最近把beecloud,芝麻信用,智慧門鎖接入了系統。閒下來把遇到的一些坑排下,也能給後人一些指導
一些程式碼片段為.net
1.beecloud。
這個其實沒有什麼好說的,主要就是直接用sdk就好了。
但也是有一些注意的點,因為我主要做的是掃碼槍這塊的東西,所以下面對這部分有一個詳細的講解。
a:掃碼槍這個東西其實是自帶一個提交操作的,意思就是在我們進行掃碼槍掃碼後其實就已經是提交了,所以在佈局這塊應該是先輸入金額等等資訊,最後掃碼槍然後自動提交,這樣是可以免除一次人工的操作的。
b.判斷掃碼槍傳回的是支付寶碼還是微信的碼(目前主要使用場景是這兩塊)beecloud的sdk是需要我們來指定是支付寶還是微信的,現在支付寶的條形碼規則是28開頭的18位數字,微信條形碼規則:18位純數字,以10、11、12、13、14、15開頭
if (model.corder.Substring(0, 2) == "28")//支付寶
如果說我們的使用者只是針對支付寶和微信的話,其實下面直接else就好了,但是有比如百度錢包等,這時候就需要我們對這些進行詳細的判斷區分了。
BCBill paybill = new BCBill(BCPay.OfflinePayChannel.BC_ALI_SCAN.ToString(), Convert.ToInt32(model.Money * 100), model.Number,"掃碼槍支付寶支付");
paybill.store_id = BaseService.GetBranchidByBeecloud (model.BranchID) == null ? null : BaseService.GetBranchidByBeecloud(model.BranchID);
paybill.authCode = model.corder;
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("branchid",model.BranchID .ToString());
dic.Add("billid",model.BillID.ToString());
dic.Add("number",model.Number);
paybill.optional = dic;
BCBill resultbill = BCPay.BCOfflinePayByChannel(paybill);
isboll = resultbill.result;
在beecloud中,對於金錢是int型別,所以我們在進行傳值的時候需要進行*100保證資料正取。
在程式碼中我們有兩種方式來接收是否支付成功,一種便是程式碼上中 isbool = resultbill.result。這個返回的是一個Bool型別。當然beecloud也是支援回撥返回,具體採用那種可以根據自己的需求進行選擇。
對於beecloud就到這裡。
下面是芝麻信用
2.芝麻信用
a.這個的話私鑰,公鑰應該是一個比較坑的地方,.net的話必須進行去頭去尾的操作,根據官方api的是需要進行很多次的解密操作才能獲得這個祕鑰,其實我們可以直接下載一個安裝包就好了。不需要去c++的環境去搗鼓。
DefaultZmopClient client = new DefaultZmopClient(gatewayUrl, appId, privateKey, zhimaPublicKey, charset);
ZhimaAuthInfoAuthorizeRequest request = new ZhimaAuthInfoAuthorizeRequest();
request.SetChannel("apppc");
request.SetPlatform("zmop");
request.IdentityType = "2"; //必要引數
request.IdentityParam = "{\"name\":\"" + Username + "\",\"certType\":\"IDENTITY_CARD\",\"certNo\":\"" + UserCard + "\"}"; //必要引數
request.BizParams = "{\"auth_code\":\"M_H5\",\"channelType\":\"app\",\"state\":\"" + Str + "\"}";//自定義引數
string url = client.generatePageRedirectInvokeUrl(request);
return url;
一般來講我們的自定義引數要將我們當前獲取芝麻信用的使用者的id,或者token等標識資訊作為引數傳遞過去,因為我們需要將使用者的資訊進行更新嘛。
在這步最後我們會得到一個url,這個url是支付寶提供的一個掛起頁面具體頁面會根據你應用的場景不同,呼叫的api也不同。
最後就是解析回撥
string Parmar = Request.QueryString["params"];
string SignStr = Request.QueryString["sign"];
這個是我們要拿到的引數。這兩個引數是加密過的,所以我們要對這兩個引數進行解籤
//判斷串中是否有%,有則需要decode
if (Parmar.IndexOf("%") != -1)
{
Parmar = HttpUtility.UrlDecode(Parmar);
}
if (SignStr.IndexOf("%") != -1)
{
SignStr = HttpUtility.UrlDecode(SignStr);
}
string decryptedParam = client.decryptAndVerifySign(Parmar, SignStr);
decryptedParam就是我們最後所需要的資訊,裡面包括tokenid,還有我們的一些自定義引數
//獲取芝麻分
string datetimestr = DateTime.Now.ToString("yyyyMMddhhmmssfff");
string numberstr = "0000000000001";
ZhimaCreditScoreGetRequest request = new ZhimaCreditScoreGetRequest();
request.SetChannel("apppc");
request.SetPlatform("zmop");
request.TransactionId = datetimestr + numberstr; //必要引數
request.ProductCode = "w1010100100000000001"; //必要引數
request.OpenId = tokenid; //必要引數
ZhimaCreditScoreGetResponse response = client.Execute(request);
ZhimaCreditScoreGetResponse resp = response;
最後resp會返回當前查詢使用者的芝麻分數和業務編號。然後進行我們的業務操作就好了。
3.智慧門鎖-雲盯
智慧門鎖的話其實就是新增密碼,刪除密碼,修改密碼,更主要的是我們自身的業務邏輯,本身的api使用還是比較簡單的
1.獲取token
string getjsonstr = GetDdingApi.CreateHttpPostResponse(url, canshu);
JObject obj = (JObject)JsonConvert.DeserializeObject(getjsonstr);//將json字串轉換成一個json物件
string tokenstr = obj["access_token"].ToString();
token是整個api的一個重要的引數,所有的操作都是通過整個token來進行的。
然後雲盯的api進行傳參是以dic字典進行傳引數。
主要的引數為home_id,room_id,這兩個引數也是雲盯提供給我們,為了方便我們還是存在我們的庫中比較好,room_id是唯一的。
如果是做密碼模組的話,password_id是一個重要的引數,在後期的密碼修改刪除時,password_id是重要的引數進行判斷的。
Dictionary<string, object> canshu = new Dictionary<string, object>();
string token = DEVService.GetToken();
Random rad = new Random();//例項化隨機數產生器rad;
int password = rad.Next(100000, 999999);//用rad生成大於等於100000,小於等於999999的隨機數;6位密碼
DateTime DateStart = new DateTime(1970, 1, 1, 8, 0, 0);
int totime = Convert.ToInt32((DateTime.Now - DateStart).TotalSeconds);//當前時間的時間戳
int edtime = Convert.ToInt32((Enddate - DateStart).TotalSeconds);//結束時間的時間戳
canshu.Add("access_token", token);
canshu.Add("home_id", home_id);
canshu.Add("room_id", room_id);
canshu.Add("password_id", Password_id);
canshu.Add("password", password);
canshu.Add("is_send_location", true);
canshu.Add("phonenumber", Newbill.UserMobile);
canshu.Add("name", Newbill.UserName);
canshu.Add("permission_begin", totime);
canshu.Add("permission_end", edtime);
雲盯的api是可以我們將使用者的姓名手機號傳遞過去進行傳送簡訊的操作的。