一些代码片段为.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是可以我们将用户的姓名手机号传递过去进行发送短信的操作的。