小程序
小游戏
企业微信
微信支付
扫描小程序码分享
微信支付成功的回调通知没办法触发云函数,所以似乎没有办法接收微信支付的回调通知,只能在云函数里主动查询支付结果。这样好像不是最佳实践,大家有没有其他办法?
2 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
用云开发HTTP API呀,自己搭个小服务器专门接受支付回调,收到回调之后再调用云函数,或者通过http API操作云数据库,完成支付状态的接收
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
办法是有的,在支付云函数中调用云函数,通过参数名functionName指定,如paycallback,然后实现paycallback接收参数outTradeNo,找到数据库的相应订单表,将它的状态改成已支付就可以。
```
// 云函数入口函数
exports.main = async (event, context) => {
console.log('请求中')
console.log(cloud.getWXContext().ENV)
let { orderId, amount, body } = event
const wxContext = cloud.getWXContext()
const res = await cloud.cloudPay.unifiedOrder({
body: body,
outTradeNo: orderId,
spbillCreateIp: '127.0.0.1',
subMchId: '1447716902',
totalFee: amount,
envId: 'dinner-cloud',
functionName: 'pay_cb'
})
return res.payment
}
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
// API 调用都保持和云函数当前所在环境一致
env: cloud.DYNAMIC_CURRENT_ENV
const db = cloud.database()
console.log('支付回调')
console.log(event)
const orderId = event.outTradeNo
const resultCode = event.resultCode
if (resultCode === 'SUCCESS') {
const res = await db
.collection('Order')
.doc(orderId)
.update({
data: {
status: 1
console.log(res)
return { errcode: 0 }
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
用云开发HTTP API呀,自己搭个小服务器专门接受支付回调,收到回调之后再调用云函数,或者通过http API操作云数据库,完成支付状态的接收
办法是有的,在支付云函数中调用云函数,通过参数名functionName指定,如paycallback,然后实现paycallback接收参数outTradeNo,找到数据库的相应订单表,将它的状态改成已支付就可以。
```
// 云函数入口函数
exports.main = async (event, context) => {
console.log('请求中')
console.log(cloud.getWXContext().ENV)
let { orderId, amount, body } = event
const wxContext = cloud.getWXContext()
const res = await cloud.cloudPay.unifiedOrder({
body: body,
outTradeNo: orderId,
spbillCreateIp: '127.0.0.1',
subMchId: '1447716902',
totalFee: amount,
envId: 'dinner-cloud',
functionName: 'pay_cb'
})
return res.payment
}
```
```
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
// API 调用都保持和云函数当前所在环境一致
env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {
console.log('支付回调')
console.log(event)
console.log(cloud.getWXContext().ENV)
const orderId = event.outTradeNo
const resultCode = event.resultCode
if (resultCode === 'SUCCESS') {
const res = await db
.collection('Order')
.doc(orderId)
.update({
data: {
status: 1
}
})
console.log(res)
return { errcode: 0 }
}
}
```