手记

微信公众号支付踩坑笔记

微信公众号支付,简单说主要分为如下几个步骤.

1.openId的获取

openId是微信用户与特定公众号对应关系的记录。

1.1设置回调域名



官方解释:用户在网页授权页同意授权给公众号后,微信会将授权数据传给一个回调页面,回调页面需在此域名下,以确保安全可靠。回调页面域名不支持IP地址。

回调页设置截图

1.2设置支付授权目录

授权目录设置地址

2.通过统一下单接口获取prepay_id

其中统一下单接口链接URL
统一下单接口一般放在应用服务器端处理,可以用java以及php等语言处理。在所有必传参数中,只有openId需要从前端页面获取,其它参数是与公众号与付款信息相关。

3.调用getBrandWCPayRequest,监听支付是否成功

getBrandWCPayRequest需要用到的参数为:
appId:公众号id
timeStamp:时间戳
nonceStr:随机字符串
package: prepay_id(示例值prepay_id=123456789)
signType: MD5或者HMAC-SHA256
paySign:对appId,timeStamp,nonceStr,package,signType参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串再拼接商户密钥,然后进行MD5(或HMAC-SHA256)加密,全部转换成大写即可。
微信支付签名验证地址
微信浏览器默认内置WeixinJSBridge对象,在其他浏览器中无效。
微信示例代码如下:

function onBridgeReady(){
   WeixinJSBridge.invoke(       'getBrandWCPayRequest', {           "appId":"wx2421b1c4370ec43b",     //公众号名称,由商户传入     
           "timeStamp":"1395712654",         //时间戳,自1970年以来的秒数     
           "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串     
           "package":"prepay_id=u802345jgfjsdfgsdg888",     
           "signType":"MD5",         //微信签名方式:     
           "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 
       },       function(res){     
           if(res.err_msg == "get_brand_wcpay_request:ok" ) {}     // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回    ok,但并不保证它绝对可靠。 
       }
   ); 
}if (typeof WeixinJSBridge == "undefined"){   if( document.addEventListener ){       document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
   }else if (document.attachEvent){       document.attachEvent('WeixinJSBridgeReady', onBridgeReady); 
       document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
   }
}else{
   onBridgeReady();
}


作者:maxZhang
链接:https://www.jianshu.com/p/33de7766e3a8


0人推荐
随时随地看视频
慕课网APP