您的位置:首页 > 其它

订餐系统之同步美团商家订单

2017-09-10 08:59 204 查看

背景

  之前写过一篇关于同步饿了么订单的文章《订餐系统之同步饿了么商家订单》,有不少人加我咨询,感觉有这方面需求的人还是满多的,毕竟现在2家几乎瓜分了市场,再做平台已然机会渺茫了,但是商户毕竟需要服务,订单还得配送出去。然后饿了

么,美团外卖都提供了面向供应商的api的权限的申请,这对我们做配送系统的说,真是一大利好。以前都是让商户手动录入其他平台的订单,费力还容易出错。还得在多个app之间来回切换,商户也是抱怨满天。有了这些接口,商户可以选择自动接单,

自动同步订单,再也不用几个app来回切换了。饿了么同步订单,在上面的文章中已经介绍了,虽然接口现在变成2.0了。有了一些变化,总的来说还是 万变不离其宗。本篇就来详细接受下同步美团订单的相关步奏。写得不对地方,欢迎指正 :)

  具体流程,下图中写得比较详细。

  
Response.Clear();
Response.Write("{\"data\":\"success\"}");
Hangjing.AppLog.AppLog.Info("美团门店与ERP绑定接收token回调URL");

System.IO.Stream stream = Request.InputStream;//这是你获得的流
if (stream != null && stream.Length > 10)
{

Hangjing.AppLog.AppLog.Info("stream.Length :" + stream.Length);
string jsondata = "";
using (StreamReader reader = new StreamReader(stream))
{
jsondata = reader.ReadToEnd(); ;
}
//保存 appAuthToken
Hangjing.AppLog.AppLog.Info("回调URL信息:" + jsondata);

}

Response.Clear();
Response.Write("{\"data\":\"success\"}");
Hangjing.AppLog.AppLog.Info("美团门店与ERP解除绑定token回调URL");

System.IO.Stream stream = Request.InputStream;//这是你获得的流
if (stream != null && stream.Length > 10)
{

Hangjing.AppLog.AppLog.Info("stream.Length :" + stream.Length);
string jsondata = "";
using (StreamReader reader = new StreamReader(stream))
{
jsondata = reader.ReadToEnd(); ;
}
Hangjing.AppLog.AppLog.Info("解除绑定回调URL信息:" + jsondata);

}

Response.Clear();
string order = Server.UrlDecode(Request["order"]);

Hangjing.AppLog.AppLog.Info("美团订单来了.美团订单内容:" + order);

apiResultInfo rs = new apiResultInfo();
System.IO.Stream stream = Request.InputStream;//这是你获得的流
if (stream != null && stream.Length > 10)
{

Hangjing.AppLog.AppLog.Info("stream.Length :" + stream.Length);
string jsondata = "";
using (StreamReader reader = new StreamReader(stream))
{
jsondata = reader.ReadToEnd(); ;
}

Hangjing.AppLog.AppLog.Info("美团订单信息:" + jsondata);

mtorderInfo model = JsonConvert.DeserializeObject<mtorderInfo>(order);

if (model.ePoiId == "1015")
{
mthelper mt = new mthelper(Context);
apiResultInfo retuls = mt.confirmOrder(model.orderId, Convert.ToInt32(model.ePoiId));
}

}
else
{
rs.state = 0;
rs.msg = "参数错误";
}

Response.Write("{\"data\":\"OK\"}");
Response.End();

/// <summary>
/// sha1签名
/// </summary>
/// <returns></returns>
public string 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
&& "sign".CompareTo(k) != 0)
{

sb.Append(k+ v);

}
}

string signstep2 = Constant.mt_SignKey + sb.ToString();

string sig = Utils.SHA1_Hash(signstep2).ToLower();

AppLog.AppLog.Info("美团签名=" + "signstep1=" + sb.ToString() + "\r\nsignstep2=" + signstep2 + "\r\n => sign:" + sig);

return sig;
}

public apiResultInfo confirmOrder(string orderId, int shopid)
{
apiResultInfo rs = new apiResultInfo();

meituanbindlogInfo record = new meituanbindlog().GetList(1, 1, "ePoiId=" + shopid + " and mtype=1", "mid", 1).FirstOrDefault();
if (record == null)
{
OperationLog.Warn("商家:" + shopid + "未找到绑定token");
rs.msg = "商家:" + shopid + "未找到绑定token";
return rs;
}

parameters = new Hashtable();
parameters.Add("charset", "UTF-8");
parameters.Add("version", "1");
parameters.Add("timestamp", Utils.getTimestamp());
parameters.Add("appAuthToken", record.appAuthToken);
parameters.Add("orderId", orderId.Replace("m", ""));

createSHA1Sign();

HttpItem objHttpItem = new HttpItem()
{
Encoding = "utf-8",
Method = "POST"
};

string url = "http://api.open.cater.meituan.com/waimai/order/confirm";
string returnmsg = queryData(objHttpItem, url);

mtresult result = Newtonsoft.Json.JsonConvert.DeserializeObject<mtresult>(returnmsg);

if (result.data != null && result.data.ToLower() == "ok")
{
rs.state = 1;

}
else
{

rs.msg = "确认订单失败";
}

return rs;
}

public string queryData(HttpItem objHttpItem, string url)
{
string sig = createSHA1Sign();
parameters.Add("sign", 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);
}
}
}

if (objHttpItem.Method.ToLower() == "get")
{
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=" + returnmsg + "\r\n url=" + serverurl);
// HJlog.toLog(this.getDebugInfo());

return returnmsg;
}

public apiResultInfo shopOnline(int shopid) { apiResultInfo rs = new apiResultInfo(); meituanbindlogInfo record = new meituanbindlog().GetList(1, 1, "ePoiId=" + shopid + " and mtype=1", "mid", 1).FirstOrDefault(); if (record == null) { OperationLog.Warn("商家:" + shopid + "未找到绑定token"); rs.msg = "商家:" + shopid + "未找到绑定token"; return rs; } parameters.Add("appAuthToken", record.appAuthToken); createSHA1Sign(); HttpItem objHttpItem = new HttpItem() { Encoding = "utf-8", Method = "POST" }; string url = "http://api.open.cater.meituan.com/waimai/poi/open"; string returnmsg = queryData(objHttpItem, url); mtresult result = Newtonsoft.Json.JsonConvert.DeserializeObject<mtresult>(returnmsg); if (result.data != null && result.data.ToLower() == "ok") { rs.state = 1; } else { rs.msg = "商家上线失败"; } return rs; }

设置商家上线

public apiResultInfo shopOnline(int shopid)
{
apiResultInfo rs = new apiResultInfo();

meituanbindlogInfo record = new meituanbindlog().GetList(1, 1, "ePoiId=" + shopid + " and mtype=1", "mid", 1).FirstOrDefault();
if (record == null)
{
OperationLog.Warn("商家:" + shopid + "未找到绑定token");
rs.msg = "商家:" + shopid + "未找到绑定token";
return rs;
}

parameters.Add("appAuthToken", record.appAuthToken);

createSHA1Sign();

HttpItem objHttpItem = new HttpItem()
{
Encoding = "utf-8",
Method = "POST"
};

string url = "http://api.open.cater.meituan.com/waimai/poi/open";
string returnmsg = queryData(objHttpItem, url);

mtresult result = Newtonsoft.Json.JsonConvert.DeserializeObject<mtresult>(returnmsg);

if (result.data != null && result.data.ToLower() == "ok")
{
rs.state = 1;

}
else
{
rs.msg = "商家上线失败";
}

return rs;
}


上线

  其他还有很多接口可以按需对接,比如商口数据,评论数据。目前我们用不上,暂未对接。最后一步就上线操作了。

  未上线之前,最多能接5个商家,上线后就没有限制了。

  目前上线要先写一个《上线申请》,然后在开放平台,里点击上线,会有美团人员联系你,确认相关信息就OK了。

  

  最后效果图如下:

  




结语

  对接美团外卖,除了提交审核时间不好,导致审核时间长了些外,其他还是蛮顺利的,他们也蛮配合的,根据接口文档几乎可以完整大部分操作。

  就代码上而言,确定没有太多可以说的,对接过程还是有些曲折的。希望这个文章能给那个正在对接的,想对接的人提供一些帮助,如果真有帮助了,有个赞最好了。

转:
http://www.cnblogs.com/jijunjian/p/6875909.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: