最近把beecloud,芝麻信用,智能门锁接入了系统。闲下来把遇到的一些坑排下,也能给后人一些指导
来源:互联网 发布:最全英语单词数据库 编辑:程序博客网 时间:2024/06/02 09:44
一些代码片段为.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是可以我们将用户的姓名手机号传递过去进行发送短信的操作的。
- 最近把beecloud,芝麻信用,智能门锁接入了系统。闲下来把遇到的一些坑排下,也能给后人一些指导
- 往往把一些基本的给忽视了
- 最近工作里遇到的一些问题,记录下来
- 从零开始把一些简单的不易理解的记录下来。
- 今天开始把一些心得记录下来!
- 把遇到过的对.Net线程的一些问题和误解集中起来和大家分享,也希望大家能一起补充,热烈欢迎讨论
- 复制代码时, 怎么能把行号也复制下来
- 复制代码时, 怎么能把行号也复制下来
- 最近需要把miriad安装在Linux上遇到的一些问题(miriad不是重点)
- 今天有个想法,把最近做的网站记录下来给大家
- [Python] 最近把python当计算器用了,比windows的计算器方便一些
- 芝麻信用商家接入指南
- 最近遇到了一些事
- 给大家分享一下最近开发遇到的一些坑
- 转眼快一年了,现在把自己遇到的错误都记录下来,每天记录一点点。
- 做了一个GRE的实验。把配置粘下来给大家分享。
- 最近把EJB3.0的所有规范都看了,也做了一下。所以把它共享一下。
- 最近遇到的一些问题
- TensorFlow
- PagerApapter、FragmentPageAdapter、FragmentStatePageAdapter源码解析
- (AC自动机)模板
- shell算数运算
- Mysql LOAD DATA demo
- 最近把beecloud,芝麻信用,智能门锁接入了系统。闲下来把遇到的一些坑排下,也能给后人一些指导
- [设计模式]原型模式
- Socket通信过程
- 【摩客专访】简单易用的背后是吹毛求疵的追求 | 专访“方片收集”作者田飞
- 2. TraitsUI基础
- 1254 Hansel and Grethel
- 【BigHereo 8】-----博客专家
- Spring中@Controller和@RestController之间的区别
- 开通博客了