前言:这篇文章讲的是利用微信官方提供的 JSAPI 接口,实现微信网页支付。希望在看之前,要确认以下几件事情,否则会在解决问题时很费解。

① 接口文档版本号是 V3.3(在官方提供的 PHP DEMO 中的 README.txt 文件中查看。当然,也可以参考压缩包的名字(wxm-payment-biz-api218f8e.zip)来确认版本

② 微信支付 PDF 文档的版本为 V3.3.7(如果上述版本对了,这步应该也是一致的,因为这两个文件是在一个包里)

③ 该文章说的是 JSAPI 的开发

简单看了下微信支付的文档和源码(压缩包名:wxm-payment-biz-api218f8e.zip;PDF 文档名:【微信支付】微信公众号支付接口文档V3.3.7.pdf;)。然后,修改了微信的配置文件。有如下几个配置项值得注意

1、 MCHID

注释是“受理商 ID,身份标识”。可以在邮件中查看,这个邮件是在申请支付的某个流程中回执的。由于我不是微信号的“主人”,所以具体在哪个环节不好确定。同时,邮件中还会有个密码。利用这个 MCHID 和密码可以到微信商户平台(https://pay.weixin.qq.com/)登录,进入管理商户订单的界面。

2、 KEY 

这个 KEY 有些苦逼啊,文档注释说是“商户支付密钥 Key。审核通过后,在微信发送的邮件中查看”。但并没有在邮件里找到这个 KEY !算了,百度了下,发现是在微信商户平台设置的。利用上面提到的账户信息登录商户平台后,点击左侧的“安全设置”(记不清了,如果不是这个关键字,找到证书管理的选项即可),然后需要安装浏览器证书插件后,手动设置这个 KEY。随意设置,可以用 MD5 加密后的字符串,比如 MD5(“Foo”)。

3、 SSLCERT_PATH

注释为“证书路径,注意应该填写绝对路径”,给的默认格式为“/xxx/xxx/xxx/WxPayPubHelper/cacert/apiclient_cert.pem”。但是,我直接用的“http://www.domain.com/wxpay/cacert/apiclient_cert.pem”这种格式。因为,简单看了下利用这个常量的调用代码,用的是 Curl 函数,那么我想用 http 开头的链接应该不会有问题了。

4、 SSLKEY_PATH

同上

5、 CURL_TIMEOUT 

这个常量在这个版本的 DEMO 中没有用到,直接写的 30,开发者注意修改。

刚才介绍了几个有歧义的常量,下面还有个问题需要注意。在 WxPayPubHelper.php 文件中的第155行的常量有拼写错误。

curl_setopt($ch, CURLOP_TIMEOUT, $second); // 常量应该是 CURLOPT_TIMEOUT

官方的文档我很无语哦! :《

好了,配置项 OK 了。程序部署到网站的 wxpay 项目下(http://www.domain.com/wxpay/)。然后在微信公众号管理后台的微信支付的界面中进行了支付授权目录的设置。设置后不知道为什么显示为空,我没有注意。同时,我在支付测试目录中也设置了路径,同时把测试号的微信 ID 填入白名单。

这时,测试的时候一直提示 system:access_denied(同:system:not_allowed)。

接着,仔细看了下 PDF 文档,觉得问题出现在支付授权目录下,果不其然。切记,阅读官方文档是多么的重要!

解决步骤:把测试账号的微信 ID 从白名单中删除,更改支付的测试目录到其他路径(只要不和授权的目录一致即可)。然后,更改授权支付目录,设置后就有显示了。就这样,再测试就 OK 了。

接下来,我要解决 DEMO 中的类库与目前项目(Codeigniter 框架)的整合工作。

总结:进行接口开发时一定要仔细阅读官方提供的文档。

Share:

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.