2021小程序连接支付流程教程
2021⼩程序连接⽀付流程教程
2021 ⼩程序连接⽀付流程教程
这他x太坑了,我必须写下来。
撰写⽀付系统前要准备⼀下资料,要注意有⼩程序平台和⽀付平台两个平台,两个设置是独⽴的。准备资料会需要好⼏天,可以的话要提早准备。
1. App Id 和 App Secret :这个要从⼩程序平台提取,注册好了就会有。
2. Merchant Id (mchid) : 这个要从⽀付平台提取,并且要从那个平台连接上你的⼩程序,⼀切报备要做。
3. CA 证书:这个从⽀付平台得到,在安全中⼼⾥。会提供⼀个证书(这个过程还挺⿇烦的,直接参考官⽅⽂档),还有需要
你⾃⼰设置的两个api key,注意你需要的是证据zip⾥的apiclient_key.pem,序列号还有你的api v3密钥。
4. https 域名的服务器,这个服务器主体会绑定域名,所以要注意,你可以考虑⽤⼀个服务器做proxy转接,真正的逻辑在另⼀台电脑。
⼩程序中只能⽤已经报备好的https域名进⾏对接!还有就是⼀些的api只能通过后端使⽤,前端不应该使⽤,因为关系到你的密钥。进⼊正题
1. 使⽤ wx.login 得到⼀个暂时的登⼊码。注意,每⼀次wx.login会把之前的登⼊码作废,所以需要的时候直接⽤wx.checkSession来
检查。
2. 在后端使⽤ api.weixin.qq/sns/jscode2session?appid=${appid}&secret=${appsecret}&js_code=${登⼊
码}&grant_type=authorization_code (). 这个会让你得到⼀个openid,这个openid不会改变,同⼀个⽤户会有⼀个openid。
3. 准备预付,参考( 和 ),会使⽤RSA制造签名,然后向h.weixin.qq 这个统⼀下单api发出请求。NodeJS 参考以
下代码。[1]。这样会得到⼀个prepay_id.
4. 使⽤3.得到的prepay_id,根据 和3.的⽅法做多⼀次签名,是给前端的。参考[2]。
5. 在前端在wx.requestPayment使⽤randomString,timestamp,signature,还有prepay_id,记得表明signType是RSA.
[1]
什么是阴阳合同>崩溃大陆const{ v4: uuidv4 }=require('uuid')
var crypto =require('crypto')
var fs =require('fs')
const pem = fs.readFileSync('./certs/apiclient_key.pem')
const key = String('ascii')
let minifiedRawData =JSON.stringify(JSON.parse(JSON.stringify(rawData)))
const currentUnixTime =parseInt((new Date().getTime()/1000).toFixed(0))
const randomString =uuidv4()//这个随机就可以,但是前端后端发出请求必须⽤同⼀个
let sign = ateSign('RSA-SHA256')
sign.update(
`POST\n/v3/pay/transactions/jsapi\n${currentUnixTime}\n${randomString}\n${minifiedRawData}\n`
)美国女明星
const token = sign.sign(key,'base64')
const r =await axios.post(
`h.weixin.qq/v3/pay/transactions/jsapi`,
rawData,
{
headers:{
Authorization:`WECHATPAY2-SHA256-RSA2048 mchid="${mchid}",nonce_str="${randomString}",signature="${token}",timestamp="${currentUnixTime }",serial_no="${certSerialNumber}"`
}
小白花的制作方法
}
)
[2]
const r =await axios.post(
`h.weixin.qq/v3/pay/transactions/jsapi`,
rawData,
{
headers:{
Authorization:`WECHATPAY2-SHA256-RSA2048 mchid="${mchid}",nonce_str="${randomString}",signature="${token}",timestamp="${currentUnixT ime}",serial_no="${certSerialNumber}"`
}
}
)
let frontendSign = ateSign('RSA-SHA256')
frontendSign.update(
`${appid}\n${currentUnixTime}\n${randomString}\nprepay_id=${r.data.prepay_id}\n`
)
r.data.timestamp = currentUnixTime银行业务
questId = randomString
卡巴斯基 激活r.data.signature = frontendSign.sign(key,'base64')

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。