接了个甲方的项目,要求用全云开发实现微信支付V3电商收付通,谈妥后,于是开干。
先看文档,再找攻略,第一步开始写段统一下单的测试代码。非常神奇的事情发生了,居然是秒过的,直接拿到prepaid_id!秒过,秒过,秒过,一个红错误都没有,难以置信;
V3收付通文档:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/pages/guide.shtml
遥想当年做V2小程序支付,仅一个统一下单的接口,就调得让人欲生欲死,前前后后一个星期不止。
我自己也有点懵圈,这是什么情况,V3新的接口里,签名?Authorization?Headers?这些都是闹着玩的吗?能不能严肃点?
想了一会儿静静,继续,看能不能在小程序里拉起wx.requestPayment,结果V3文档里一句小程序支付的都没有,难道不支持?立马在论坛大佬群里@了一下娇华同学,得到肯定回答,于是,wx.requestPayment拉起,美滋滋地支付了0.01元,统一下单,完美。
云函数相关代码:
//JSAPI下单+JS调起支付
async function partner_transactions_jsapi(event) {
let wxContext = cloud.getWXContext()
let jsonStr = JSON.stringify({
sp_appid: wxContext.APPID,
sp_mchid: mchid,
notify_url: config.notify_url,
payer: {
sp_openid: wxContext.OPENID
},
...event.unified_order,//小程序端传入的统一下单参数
})
let method = 'POST'
let url = '/v3/pay/partner/transactions/jsapi'
let headers = getHeaders(method, url, jsonStr)
let res = await rp({ method, uri: config.host + url, headers, body: jsonStr })
let prepay_id = JSON.parse(res).prepay_id
return getPayment(prepay_id) //返回拉起小程序 wx.requestPayment 所需参数
}
小程序端测试代码:
//JSAPI下单+JS调起支付
partner_transactions_jsapi: async function () {
console.log('partner_transactions_jsapi')
let res = await wx.showModal({content: '统一下单?'})
if (res.confirm) { } else return
wx.showToast({ icon: 'loading' })
let unified_order = { //测试订单
sub_mchid: SUB_MCHID,
description: '电商收付通测试',
out_trade_no: "otn" + Math.random().toString(36).substr(2, 15) + parseInt(Date.now() / 1000),
amount: {
total: 10,
currency: 'CNY'
},
}
res = await wx.cloud.callFunction({
name: 'wxPayV3',
data: {
action: 'partner_transactions_jsapi',
unified_order
}
})
res = await wx.requestPayment({ ...res.result }).catch(err => console.log(err))
console.log(res)
wx.showToast({})
},
今天先弄这么多,更多踩坑实录继续。
更多相关内容:
你好,请问一下:
1、进件的主体是小微吗?
2、是不是在进件时就传了sub_appid,跟商户进行了绑定,之后才能成功下单和支付?
2、是
云端是nodejs 10.15.3 环境,https://github.com/TheNorthMemory/wechatpay-axios-plugin 这个lib在10.15.0下做过测试,不仅是支付,已知开放出来的167个v3接口,均可正常跑转起来,可以尝试尝试。