最近对接美团配送,在初次调用接口的时候,就遇到了几个坑,尽管美团配送开发文档比较规范,可还是有不够详尽的地方,在对接的时候容易踩坑。
一、参数传递问题
在调用接口传参的时候,都使用post请求方式,我尝试了将参数以数组、json、XML的形式传递,皆返回错误信息:缺少xxx参数,我仔细检查,参数都有!
没办法对接到他们的技术,而且他们的客服又不懂,能查的资料又很少,费好大劲终于知道参数要自己拼接成类似于a=&c=3&b=1的字符串,然后传递过去。
二、签名加密问题
鉴于参数传递要拼接成key1=value1&key2=value2的形式,我就偷懒直接使用了http_build_query()函数来处理参数,结果一直报签名错误。
原因在于:http_build_query()方法会将中文进行urlencode编码,也就是自己在生成签名的时候,用的是中文,但是传递参数的时候中文就成了urlencode编码之后的字符串,很自然而然的对不上。
原始数据:

$product = ['id' => 1,'title' => '茅台飞天52°','product_class_title' => '酒水','price' => 9.01,
];

http_build_query()函数处理后数据:

id=1&title=%E8%8C%85%E5%8F%B0%E9%A3%9E%E5%A4%A952%C2%B0&product_class_title=%E9%85%92%E6%B0%B4%2F%E9%A5%AE%E6%96%99&price=9.01

实际需要的数据:

id=1&title=茅台飞天52°&product_class_title=酒水&price=9.01

解决方法:自己手动拼接参数,方法如下:

/*** Notes:构造请求参数* @param array $params* @return string* Date: 2020/7/16*/
public static function buildParams($params = []){if(empty($params)){throw new \LogicException('缺少请求参数',2);}//系统参数(美团系统参数)$sys_params = ['appkey' => static::getConfig('app_key'),'timestamp' => time(),'version' => '1.0',];if(static::$is_debug){$sys_params['appkey'] = static::getConfig('test_app_key');}//将系统参数和业务参数合并$mt_params = array_merge($sys_params,$params);//将合并后的参数,进行签名加密$mt_params['sign'] = self::sign($mt_params);//构造参数,将参数拼接成key1=value1&key2=value2的形式$post_data = '';foreach ($mt_params as $k => $v){$post_data .= $k.'='.$v.'&';}$post_data = substr($post_data,0,-1);return $post_data;
}/*** Notes:参数加密* @param array $params* @return string* Date: 2020/7/16*/
private static function sign($params = [])
{$secret = static::getConfig('app_secret');if(static::$is_debug){$secret = static::getConfig('test_app_secret');}if(empty($params) || empty($secret)){throw new \LogicException('构造参数缺失',2);}$signPars = "";ksort($params);foreach($params as $k => $v) {if("" != $v && "sign" != $k) {$signPars .= $k.$v;}}$signPars = $secret . $signPars;$sign = strtolower(sha1($signPars));return $sign;
}/*** Notes:验签(美团配送订单回调的时候,对要对回调接收的参数进行验签)* @param $params* @return bool* Date: 2020/7/24*/
public static function verifyMtSign($params)
{try{if(empty($params) || empty($params['sign'])){throw new \LogicException('参数错误');}$get_sign = $params['sign'];unset($params['sign']);$new_sign = self::sign($params);if($get_sign != $new_sign){throw new \LogicException('验签失败');}return true;}catch (\LogicException $exception){return false;}
}

三、联调测试接口
联调接口: https://peisongopen.meituan.com/api/test/order/arrange (根据文档说明操作,容易弄错)

PHP对接美团配送接口遇到的问题相关推荐

  1. 美团配送php,PHP对接美团配送接口遇到的坑

    最近对接美团配送,在初次调用接口的时候,就遇到了几个坑,尽管美团配送开发文档比较规范,可还是有不够详尽的地方,在对接的时候容易踩坑. 一.参数传递 在调用接口传参的时候,都使用post请求方式,我尝试 ...

  2. PHP对接美团API接口 实现卡卷核销功能

    下面的只是一些PHP代码,与其相对应的还有一个pdf文档[里面叙述了都需要那些必要条件,还有运行演示],大家可以去GitHub上去下载. 链接:GitHub - ITLYS/Warehouse: 一个 ...

  3. python 美团api接口对接_美团券对接API文档

    美团券验证平台接入文档 1  接入步骤 2 验证流程 3 接口设计 3.0 说明 3.0.1 sign计算方法: 3.0.2 测试用的app_key,sign_key和美团券密码: 3.1 M1接口: ...

  4. 美团配送交付时间轻量级预估实践

    来源:美团技术团队(meituantech)丨文:基泽 闫聪 数据猿官网 | www.datayuan.cn 今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博 ...

  5. 美团配送资金安全治理之对账体系建设

    https://tech.meituan.com/balanceAccounts.html 前言 随着美团配送业务的飞速发展,单量已经达到千万级别,同时每天产生的资金额已经超过几千万,清结算系统在保证 ...

  6. PHP 对接美团大众点评团购券的开发步骤

    这篇文章主要介绍了PHP 对接美团大众点评团购券(门票)的开发步骤,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下. 一.功能简要介绍 1.根据需 ...

  7. php实现团购功能,PHP 对接美团大众点评团购券(门票)的开发步骤

    一.功能简要介绍 1.根据需求,用户在美团大众点评中所购买的门票在自己的系统上可以核销,同时把核销信息存储到自己的系统里. 2.美团点评API文档地址:https://open.dianping.co ...

  8. 快递100下单未知错误?快递100寄件/同城配送接口FAQ

    寄件类 账号注册后商家寄件接口显示下单失败,是否可以调试? 1.商家寄件接口无接口费用,充值费用为运费,在无充值情况下无法调用接口,最低充值为100元: 2.商家寄件接口下单后为预扣费用,取消订单会返 ...

  9. 自己对接美团cps,饿了么cps,京东cps的过程,免费领取饿了么红包,分享给大家,程序员自己动手也能赚点!!!

    ** 自己对接美团cps,饿了么cps,京东cps的过程,分享给大家,程序员自己动手也能赚点!!! ** 京东联盟对接地址 https://union.jd.com 申请步骤比较简单按照提示进行就可以 ...

最新文章

  1. view桌面池计算机显示错误,学员问答之3-View桌面问题
  2. 刚刚,华为云挂了。。。
  3. UCOS 操作系统 安装配置环境
  4. 【转】EXC_BAD_ACCESS问题在xode4下的调试技巧
  5. Android 动态显示和隐藏软键盘
  6. php两个数组递归排序,PHP数组递归排序实现方法示例
  7. 线性表13|约瑟夫问题 – 数据结构和算法18
  8. html+css画一个潇洒哥
  9. mysql got signal 6_[ERROR] mysqld got signal 6 错误
  10. 各大浏览器的内核分别是什么?
  11. 【Kubernetes】k8s使用stargz光速分发镜像
  12. 安卓逆向010之实战破解内购(斗地主)
  13. 转载:老师也吐血的试卷
  14. beyond compare 4官方中文版下载
  15. 机器学习实战---PM2.5预测
  16. java程序员的学习规划,附源代码
  17. OpenCV入门系列1:图像组成与OpenCV基本操作函数
  18. 钣金cad插件_ug,CAD,SolidWorks,钣金??????非标等设计一站式学习,
  19. vue cli3 配置上线 本地图标转换base64 显示
  20. 做一个即时利润表仪表板(不用等账都做完核对完关账后)

热门文章

  1. BFC是什么?BFC可以做什么?
  2. 170617 逆向-CrackMe之024
  3. 基于微信视频直播如何做收费直播(微信公众号直播)?
  4. Linux - 第11节 - 网络入门
  5. [NOIP2008] 立体图-解题报告
  6. win10停止更新_你的win10即将终止!各大版本服务终止日期大全,准备好了吗?...
  7. saas平台相关内容
  8. 开始我的Python学习历程
  9. 用Python计算利率,告诉你亏了多少!
  10. Android动画完全解析--属性动画