专栏首页沈唁志再说一下微信支付踩到的坑 mch_id 参数格式错误

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

微信小程序支付在好久之前写过一次,后来再写的话也是用别人的 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>即可

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PHP完成微信小程序在线支付功能

    沈唁
  • Kindle 怎么使用电子邮件附件推送电子书到设备中?

    之前买过 PHP 的书看,结果也没看到了几本,一是书都在家里,没给公司带,二是下班晚回去不想看了

    沈唁
  • Windows10系统电脑怎么查看虚拟化技术是否开启?

    在Windows下使用Swoole,是需要在虚拟机下进行测试的,所以我们使用VirtualBox和vagrant搭建Swoole的开发环境

    沈唁
  • PHP 运用 XMLWriter 读写 xml 文件

    阳光岛主
  • JavaWeb学习——4.XML

    要写xml,第一步必须要有一个文档声明(写了文档声明之后,表示写xml文件的内容)

    一墨编程学习
  • xml文件-1

    1969 gml(通用标记语言) [主要的目的是要在不同的机器进行通信的数据规范]

    用户5927264
  • 10.22 firewalld关于service的操作

    Linux防火墙-firewalled firewall-cmd --get-services 查看所有的servies firewall-cmd -...

    运维小白
  • 微信支付-支付结果通用通知

    所有数据通过自己的逻辑保存后需要告诉微信一声,这时候需要再将代码组成xml发送给微信,微信给定了固定格式和字段

    CrazyCodes
  • Spring注解配置和xml配置优缺点比较

    在昨天发布的文章《spring boot基于注解方式配置datasource》一文中凯哥简单的对xml配置和注解配置进行了比较。然后朋友看到文章后,就问:那你说...

    凯哥Java
  • as3文档中根元素后面的标记格式必须正确

    在使用as3解析xml时遇到这个错误,断点调试时获取读取的字符串信息,也没发现异常,网上搜索了一下,说是后面有多余的随机乱码。但我这里没有发现任何乱码,至少复制...

    meteoric

扫码关注云+社区

领取腾讯云代金券