微信公众号支付,简单说主要分为如下几个步骤.
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();
}