HTML5技术

订餐系统之同步美团商家订单 - 戢俊建(2)

字号+ 作者:H5之家 来源:H5之家 2017-05-19 13:00 我要评论( )

Response.Clear();Response.Write( );Hangjing.AppLog.AppLog.Info( );System.IO.Stream stream = Request.InputStream;(stream != null stream.Length 10 ){Hangjing.AppLog.AppLog.Info( + stream.Length); strin

Response.Clear(); Response.Write(); Hangjing.AppLog.AppLog.Info(); System.IO.Stream stream = Request.InputStream;(stream != null && stream.Length > 10) { Hangjing.AppLog.AppLog.Info(+ stream.Length); string jsondata = ""; using (StreamReader reader = new StreamReader(stream)) { jsondata = reader.ReadToEnd(); ; } Hangjing.AppLog.AppLog.Info(+ jsondata); }

View Code

 

  

新订单推送

    要推送订单,首先得要设置接收通知的url

    要推送订单,其次得有商家,所以美团为我们设置了测试商家。还可以添加多个。要特别注意的就是:测试门店为一个坐标位于南极洲、配送范围为西藏昌都的线上测试门店,开发者可使用美团外卖APP定位到西藏昌都气象局,根据测试门店名称搜索到测试门店进行下单。

    一定要App定位在西藏昌都气象局方可下订单。

   因为推送的数据格式是json,所以我的做法是:先创建好订单对应的体,收到通知后,转成实体,再做逻辑处理。接收通知,所上面的类似。

  

Response.Clear(); ]); Hangjing.AppLog.AppLog.Info(+ order); apiResultInfo rs = new apiResultInfo(); System.IO.Stream stream = Request.InputStream;(stream != null && stream.Length > 10) { Hangjing.AppLog.AppLog.Info(+ stream.Length); string jsondata = ""; using (StreamReader reader = new StreamReader(stream)) { jsondata = reader.ReadToEnd(); ; } Hangjing.AppLog.AppLog.Info(+ jsondata); mtorderInfo model = JsonConvert.DeserializeObject<mtorderInfo>(order); ) { mthelper mt = new mthelper(Context); apiResultInfo retuls = mt.confirmOrder(model.orderId, Convert.ToInt32(model.ePoiId)); } } else { rs.state = 0; rs.msg = ; } Response.Write(); Response.End();

View Code

 

   

确认订单

  我们收到新订单通知时,可以调用api直接确认订单,也就是商户接单。到这里,我们才正式去调用api,前面都是美团来调用我们,要调用api,首先要做的就是实现签名。这是我对接这么多系统,签名算法最简单的。直接上代码。

  签名:首先将GET、POST参数除去sign本身以及值为空的参数以及=号和&号,按参数自然排序,(例如a=&c=3&b=1,变为b1c3)然后按参数1值1参数2值2...参数n值n的方式拼接成新字符串,再跟字符串前面加上signKey,做sha1散列,最后将得出字符串转成小写即为sign。

  签名代码

sha1签名 createSHA1Sign() { StringBuilder sb = new StringBuilder(); ArrayList akeys = new ArrayList(parameters.Keys); akeys.Sort(); foreach (string k in akeys) { string v = HttpUtility.UrlEncode((string)parameters[k], Encoding.UTF8); if (null != v && "".CompareTo(v) != 0 && .CompareTo(k) != 0) { sb.Append(k+ v); } } string signstep2 = Constant.mt_SignKey + sb.ToString(); string sig = Utils.SHA1_Hash(signstep2).ToLower(); AppLog.AppLog.Info(+ + sb.ToString() + + signstep2 + + sig); return sig; }

View Code

      

  录入所有参数,得到签名,初始化post参数,调用指定api,即可完成确认。大概代码如下,代码都比较文明,大家一看变懂了。

public apiResultInfo confirmOrder(string orderId, int shopid) { apiResultInfo rs = new apiResultInfo(); meituanbindlogInfo record = + shopid + , , 1).FirstOrDefault(); if (record == null) { OperationLog.Warn(+ shopid + ); rs.msg = + shopid + ; return rs; } parameters = new Hashtable(); parameters.Add(, ); parameters.Add(, ); parameters.Add(, Utils.getTimestamp()); parameters.Add(, record.appAuthToken); parameters.Add(, orderId.Replace(, "")); createSHA1Sign(); HttpItem objHttpItem = new HttpItem() { Encoding = , Method = }; ; string returnmsg = queryData(objHttpItem, url); mtresult result = Newtonsoft.Json.JsonConvert.DeserializeObject<mtresult>(returnmsg); ) { rs.state = 1; } else { rs.msg = ; } return rs; } public string queryData(HttpItem objHttpItem, string url) { string sig = createSHA1Sign(); parameters.Add(, sig); serverurl = url; ArrayList akeys = new ArrayList(parameters.Keys); StringBuilder sb = new StringBuilder(); foreach (string k in akeys) { string v = context.Server.UrlEncode((string)parameters[k]); v = HttpUtility.UrlEncode(v, Encoding.UTF8); if (null != v && "".CompareTo(v) != 0) { if (sb.Length == 0) { sb.Append(k + + v); } else { sb.Append(+ k + + v); } } } ) { serverurl += + sb.ToString(); } else { objHttpItem.Postdata = sb.ToString(); } HttpHelper objhttp = new HttpHelper(); objHttpItem.URL = serverurl; objhttp.isToLower = false; string returnmsg = objhttp.GetHtml(objHttpItem); Hangjing.Common.HJlog.toLog(+ returnmsg + + serverurl); returnmsg; }

View Code

 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • nodejs+websocket实时聊天系统 - 苏黎世宝贝

    nodejs+websocket实时聊天系统 - 苏黎世宝贝

    2017-05-18 14:00

  • Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦 - 13韩

    Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦 - 13韩

    2017-05-15 16:00

  • ABP入门系列(16)——通过webapi与系统进行交互 - 『圣杰』

    ABP入门系列(16)——通过webapi与系统进行交互 - 『圣杰』

    2017-04-25 09:04

  • Omi全新版本来袭 - 指令系统 - 【当耐特】

    Omi全新版本来袭 - 指令系统 - 【当耐特】

    2017-04-20 14:04

网友点评
i