微信公众号支付开发(续)

396 查看


前言

之前写了一篇微信公众号开发的文,原文链接
现在再写一篇续,以记录这一路遇见的坑……


总结一下遇见的几个坑:

  1. KEY--商户支付密钥,这个字符串必须要32位。之前用了一个网上的随机字符串生成器,也没有仔细检查,结果生成了一个40多位的KEY,以至于支付用的签名一直无法通过。并且即便是使用微信自己的检查工具也没有检查出这个问题

  2. 微信支付需要在微信公众平台的后台添加上你网站的域名地址后方能生效。并且需要注意的是开发的时候我们一般用的是测试授权目录,网站正是运营的时候一定要添加到支付授权目录


    授权目录.png
  3. 订单过期时间过短问题。在WxPayUnifiedOrder类中,有两个方法可以设置订单的开始和过期时间:SetTime_startSetTime_expire。我之前设置了10分钟的过期时间,微信还是报错说过期时间太少,至少要5分钟什么的。之所以会有这个错误是因为这个方法使用的是北京时间。所以,如果你使用了date()函数时,就必须先要设置好时区:

    $input = new WxPayUnifiedOrder();
    date_default_timezone_set('PRC'); //设置成北京时间,如果没有这句就会报错
    $input->SetTime_start(date("YmdHis"));
    $input->SetTime_expire(date("YmdHis", time() + 600));
  4. 价格问题。如果你数据库中储存的商品价格是¥10.00这样的价格。在通过微信支付前需要乘以100。这样做是因为微信支付需要处理的价格必须是个整数(其实也就是说微信支付使用的是分作单位,而一般我们用的是元)。如果是浮点小数,在省略小数点的过程中容易出现一些匪夷所思的错误。


测试工具

最后放两个工具的链接地址

  1. 签名校验工具。这个工具是用来校验生成的支付签名用的。可以用SDK中ToXml()方法所生成的xml字符串在这里进行验证。


    签名校验
  2. 接口调试工具。这个工具和上一个工具作用非常相似。唯一的不同之处是它会自动给你生成一个xml的文本。对于一些商品单一的支付来说,xml其实是可以写死的。而在这里就可以直接获取。


    接口调试

2018 - 知识虫 - 我的知识库 渝ICP备16002641号-2

渝公网安备 50010702501581号