前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >再说一下微信支付踩到的坑 mch_id 参数格式错误

再说一下微信支付踩到的坑 mch_id 参数格式错误

作者头像
沈唁
发布2019-05-22 15:13:21
5.8K0
发布2019-05-22 15:13:21
举报
文章被收录于专栏:沈唁志沈唁志

微信小程序支付在好久之前写过一次,后来再写的话也是用别人的 SDK 了,之前写的文章好像留了一点坑

博客有发过一篇关于微信小程序支付的文章,见PHP 完成微信小程序在线支付功能

贴了代码没有检查,也给 Github 上传了一份,同样也是没有检查,最近就有人留言说使用的时候报错:mch_id参数格式错误

不应该啊,按理说我用的时候是好的啊,微信小程序的支付调用还是很麻烦的,不想写伪代码于是就远程看一下吧

微信小程序调用微信支付时,需要先向微信商户平台”统一下单”接口发起请求,获得prepay_id后,才可以调用小程序的requestPayment接口进行下一步的操作

但是在调用获取得prepay_id之前就已经出问题了,打印一下看看

截图就直接用问问题的同学的吧,如下图所示

这种提示可能就会想到是前后可能有空格吧,看着mch_id都是数字,先来去掉一下两头的空格吧

trim($mch_id);

不过很明显不是这里的问题,打印出来的 xml 数据中mch_id是紧挨着 xml 标签的

找啊找啊,也没发现到底是哪里的问题,随便改几个参数,写错也是提示mch_id参数格式错误

认真的同学就会发现 16-26 的 xml 数据开始结尾外层并没有<xml></xml>包裹

仔细看文档就会发现外层应该是需要<xml></xml>包裹的

转 xml 数据是封装好的方法,不应该出这种问题,又返回头去看之前的文章

    //数组转换成 xml
    private function arrayToXml($arr) {
        $xml = "";
        foreach ($arr as $key => $val) {
            if (is_array($val)) {
                $xml .= "<" . $key . ">" . arrayToXml($val) . "</" . $key . ">";
            } else {
                $xml .= "<" . $key . ">" . $val . "</" . $key . ">";
            }
        }
        $xml .= "";
        return $xml;
    }

发现 $xml 的地方居然是空字符串,此处应该是<xml></xml>

    //数组转换成 xml
    private function arrayToXml($arr) {
        $xml = "<xml>";
        foreach ($arr as $key => $val) {
            if (is_array($val)) {
                $xml .= "<" . $key . ">" . arrayToXml($val) . "</" . $key . ">";
            } else {
                $xml .= "<" . $key . ">" . $val . "</" . $key . ">";
            }
        }
        $xml .= "</xml>";
        return $xml;
    }

可能是之前复制代码的时候没注意,将xml外边的左右括号没有转实体符,编辑器自动去掉了

此时如果直接向接口发起请求会返回mch_id参数格式错误的提示,所以解决mch_id参数格式错误的方法是

请求时加上最外层的<xml></xml>即可

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档