概述
先调用“统一下单”接口,在微信支付服务后台生成预支付交易单,返回正确的预支付交易后,再调起微信支付接口,发起支付。
统一下单接口
URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder
不需要证书
具体参数字段、返回值看-->https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1
成功调用后,得到prepay_id
,作为支付接口的参数之一
发起微信支付
wx.requestPayment({
'timeStamp': '', //当前时间戳
'nonceStr': '', //随机字符串,长度为32个字符以下 (调用随机数函数生成)
'package': '', // 统一下单接口返回的 `prepay_id` 参数值,提交格式如:prepay_id=*
'signType': 'MD5', // 签名算法,暂支持 MD5
'paySign': '', // 签名
'success':function(res){
},
'fail':function(res){
}
})
获取时间戳
var timestamp = Date.parse(new Date())
timestamp = timestamp / 1000
获取随机数
var random = Math.round ( Math.random() * 1000 )
/* 其中random会产生0-1之间的数,当*1000时,random函数就会生成0-1000之间的一个随机自然数;
然后我们通过round函数,进行四舍五入。
签名算法
对输入参数进行加密处理,得到paySign字段的值。
1、按照ASCII字典序,对参数名进行排序
如:
stringA='appid=wxd930&body=test&device_info=1000&mch_id=100100&nonce_str=ibuaiVJA';
2、拼接API密钥
stringSignTemp = stringA+'&key=192006250b4c09247ec02edce69f6a2d'
//注:key为商户平台设置的密钥key
3、加密处理
/* MD5签名方式
paySign = MD5(stringSignTemp).toUpperCase()
="9A0A8657E2CA0A9CF3B7"
/* HMAC-SHA256签名方式
paySign =hash_hmac("sha256",stringSignTemp,key).toUpperCase()
="6A9AE1657590FD6257D693A078E1C3E4BB6BA4DC3ACD6"