美团外卖API接入(一)

前言:文档用于记录美团外卖api的接入过程,美团外卖提供给第三方软件商的接入地址如下,如果是单独的餐饮企业是可以直接接入美团外卖比较成熟的api的。此文是针对第三方软件商想接入美团外卖可以看看。本人接入的时间大概是2016年12月份,当时此网站上是没有javaSDK的,所以一些加密方法都是自己按照文档里面加密的。有SDK还是用SDK吧。本文档只接入了外卖,其它功能未接入。
地址:https://developer.meituan.com/home?applyFrom=waimai_developer
进入后应该是这个界面。
美团外卖API接入(一)

第一步,填一些ERP厂商的基本信息。
美团外卖API接入(一)
第二步,申请一个测试帐号,及门店
美团外卖API接入(一)
测试帐号及门店申请好了,下载一个美团app,定位到你测试门店的位置,就可以下测试单了。
测试门店下单后,那些订单信息是怎么推送给你呢?
第三步,填写推送地址
美团外卖API接入(一)
云端心跳地址:是美团检验你服务器是死是活用的。
推送订单url:是将订单推送给你的url,请填写你自己的地址。
下面几个url看名字就行了。就是这个意思,美团和饿了么api不同,饿了么是同一个推送地址,但是会用type区分是什么操作的推送,美团则是需要填写多个地址。

第四步,开始写代码。
1.将所有的请求地址写在一个util中,并完成签名加密方法。

public class MeidaUrlUtil {
private static Logger logger = Logger.getLogger(MeidaUrlUtil.class);
private static String recEncoding = "UTF-8";

//商家确认订单
public static String mdOrderConfirm(Map params) throws Exception{
String url = Commons.MEIDA_URL+"/order/confirm";
params=commonOrderArgs(params);
return HttpRequestProxy.doPost(url,params,getRecEncoding());
}
//商家取消订单(非美团配送)
public static String mdOrderCancel(Map params) throws Exception{
String url = Commons.MEIDA_URL+"/order/cancel";
params=commonOrderArgs(params);
return HttpRequestProxy.doPost(url,params,getRecEncoding());
}
//商家配送订单(非美团配送)
public static String mdOrderDelivering(Map params) throws Exception{
String url = Commons.MEIDA_URL+"/order/delivering";
params=commonOrderArgs(params);
return HttpRequestProxy.doPost(url,params,getRecEncoding());
}
//商家取消订单(美团配送)
public static String mdLogisticsOrderCancel(Map params) throws Exception{
String url = Commons.MEIDA_URL+"order/cancelDispatch";
params=commonOrderArgs(params);
return HttpRequestProxy.doPost(url,params,getRecEncoding());
}
//商家配送订单(美团配送)
public static String mdLogisticsOrderDelivering(Map params) throws Exception{
String url = Commons.MEIDA_URL+"/order/dispatchShip";
params=commonOrderArgs(params);
return HttpRequestProxy.doPost(url,params,getRecEncoding());
}
//订单已送达
public static String mdOrderArrived(Map params) throws Exception{
String url = Commons.MEIDA_URL+"/order/delivered";
params=commonOrderArgs(params);
return HttpRequestProxy.doPost(url,params,getRecEncoding());
}
//订单同意退款请求
public static String mdOrderRefundAgree(Map params) throws Exception{
String url = Commons.MEIDA_URL+"/order/agreeRefund";
params=commonOrderArgs(params);
return HttpRequestProxy.doPost(url,params,getRecEncoding());
}
//订单驳回退款请求
public static String mdOrderRefundReject(Map params) throws Exception{
String url = Commons.MEIDA_URL+"/order/rejectRefund";
params=commonOrderArgs(params);
return HttpRequestProxy.doPost(url,params,getRecEncoding());
}
//查询订单id查询订单
public static String mdOrderByIdFromMd(Map params) throws Exception{
String url = Commons.MEIDA_URL+"/order/queryById";
params=commonOrderArgs(params);
return HttpRequestProxy.doGet(url,params,getRecEncoding());
}
//查询订单流水号查询订单
public static String mdOrderByDaySeqFromMd(Map params) throws Exception{
String url = Commons.MEIDA_URL+"/order/queryByDaySeq";
params=commonOrderArgs(params);
return HttpRequestProxy.doGet(url,params,getRecEncoding());
}
//心跳上报
public static String mdHeartJump(Map params) throws Exception{
String url = "http://heartbeat.meituan.com/pos/heartbeat";
params=commonOrderArgs(params);
return HttpRequestProxy.doPost(url,params,getRecEncoding());
}
public static String getRecEncoding() {
return recEncoding;
}

public static void setRecEncoding(String recEncoding) {
MeidaUrlUtil.recEncoding = recEncoding;
}
private static Map commonOrderArgs(Map params){
Long currentTimeMillis = MeidaUrlUtil.getCurrentTimeMillis()/1000;
params.put("charset","utf-8");
params.put("timestamp", currentTimeMillis.intValue());
String signature = orderEncrypt(params);
params.put("sign", signature);
return params;
}
private static String orderEncrypt(Map map){
String signature = "";
try {
String result="";
String meituanSort = meiTuanSort(map);
String signkey=Commons.MEIDA_SIGNKEY;
result=signkey+meituanSort;
signature = Sha1Util.getSha1(result);
} catch (Exception e) {
logger.error("获取美大token异常", e);
}
return signature;
}
public static long getCurrentTimeMillis(){
return System.currentTimeMillis();
}
private static String meiTuanSort(Map mapv){
//将appid,timestamp,还有参数这三个进行字母排序
Map map = mapv;
Collection keySet = map.keySet();
List list = new ArrayList(keySet);
Collections.sort(list);
String result = "";
for(int i = 0;i
result+=list.get(i)+map.get(list.get(i));
}
return result;
}
}

不太华丽的分隔线-----------------------------------------------------
美团外卖API接入(一)
上图中MEIDA_SIGNKEY和MEIDA_DEVELOPERID为美团分配,MEIDA_URL为美团服务器地址。
MEIDA_STORE为美团绑定门店ui地址。
MEIDA_PUSH_TMIE为本地推送给设备如果设备没有收到,多久后推送第二次的时间间隔。
上面的方法包括了美团外卖常用的请求地址,及加密签名方法,可以直接复制,也可以下载SDK,因本人是在SDK未出来之间写的,所以应该没有SDK规范。但是加密正确无误。
出现这个错误的原因是在导入seaborn包时,无法从typing模块中导入名为'Protocol'的对象。 解决这个问题的方法有以下几种: 1. 检查你的Python版本是否符合seaborn包的要求,如果不符合,尝试更新Python版本。 2. 检查你的环境中是否安装了typing_extensions包,如果没有安装,可以使用以下命令安装:pip install typing_extensions。 3. 如果你使用的是Python 3.8版本以下的版本,你可以尝试使用typing_extensions包来代替typing模块来解决该问题。 4. 检查你的代码是否正确导入了seaborn包,并且没有其他导入错误。 5. 如果以上方法都无法解决问题,可以尝试在你的代码中使用其他的可替代包或者更新seaborn包的版本来解决该问题。 总结: 出现ImportError: cannot import name 'Protocol' from 'typing'错误的原因可能是由于Python版本不兼容、缺少typing_extensions包或者导入错误等原因造成的。可以根据具体情况尝试上述方法来解决该问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [ImportError: cannot import name ‘Literal‘ from ‘typing‘ (D:\Anaconda\envs\tensorflow\lib\typing....](https://blog.csdn.net/yuhaix/article/details/124528628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值