微信支付-公众号支付-choosewxpay:fail

是司机都要翻船的.

公众号支付涉及微信平台两个大类的接口,要在客户端最后调用出成功的微信支付界面真是一件不容易的事情.

JSAPI类接口:

1.wx.config

2.wx.chooseWXPay

支付类接口:

1.unifiedorder

2.notify

 

网上一堆的码工朋友被腾讯坑得不要不要地.现在想总结一下.

 

1.后台的配置一定要配置好:

1.1.公众号平台:配置好域名,IP白名单.

1.2.商户平台:授权目录配置,API-Key.一定要配置准确.

比如:调用以上JSSDK的页面地址为 http://.com/payaeixin/c.html

那么测试授权目录配置为 http://a.com/pay/weixin/,如果只是配置成 http://a.com/pay/将报以上错误.

1.3.手机微信端:微信程序需要拥有[悬浮窗权限].

 

2.API的签名一定要准确.参数数量,名称,顺序和加密算法,密钥都要准确.多使用签名工具校验一下.

2.1.参数的数量数一数就可以比较出来的.

2.2.参数的名称就要跟紧API文档了.

最典型的一个错误是:

       使用wx.chooseWXPay,需要后台返回的参数列表中有timestamp,而后台生成该参数的值后,要签名,而签名用的名称是timeStamp.注意红色字符s和S.加上中间代码中的名称,那最起码要4个类似的名称了,一定要注意.

2.3.参数的顺序,耐心检查,或跟校验工具对比一下.

2.4.加密算法,我使用的是最新官方JAVA-SDK,默认使用的是HMACSHA256,而前台JSAPI要使用的是MD5,而如果配置useSandBox,则会有一堆奇怪的URL出来,这个我没空地追究了,想用一般的URL,又要用MD5,只能去改源码了.顺便再吐槽一下神奇的IWXPayDomain接口.config.getWXPayDomain().getDomain(config)-->自己使用自己作为参数调用自己的方法.

2.5.加密密钥,使用微信支付一定要使用商户平台的API-KEY,而不是公众号上的APP-SECRET.

2.6校验工具:

    微信 JS 接口签名校验工具: https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign

    微信支付接口签名校验工具: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1

2.7完成的过程一共需要5次签名,分别是:

    wx.config一次,生成JSAPI的sign.参数是:jsapi_ticket,noncestr,timestamp,使用SHA1加密

    unifiedorder两次,生成请求一次,参数文档中要求必填的字段.校验返回值一次,如果足够信任,可以不校验返回结果.

    wx.chooseWXPay一次,需要将unifiedorder返回的prepay_id连同签名.参数是:appId,timeStamp,nonceStr,package,signType.(注意这里使用的是微信的签名算法,即最后要拼接&key=API-KEY一起加密)

    notify一次,用于校验通知信息是否正确.

 

3.API的参数理解要准确:

统一下单接口中:

终端IP spbill_create_ip String(16) 123.12.12.123 APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。

这个IP指的是用户端的IP.不是指服务器的IP,也不是指代理IP(如果你使用代理IP).理论上这是一个公网的IP地址,微信可用于二次验证,防止用一个IP请求下单,用另一个IP支付.

 

4.像腾讯鄙视安卓一样鄙视腾讯.最好是可以先用iphone手机进行调试,苹果手机对错误的提示是很友好的,一下就能看出具体错误了.

 

如果以上4点看一遍都没办法帮忙解决问题,最好看多两遍.还不行.我觉得最佳的选择是仔细地重写一次.

你可能感兴趣的:(微信)