- 云开发 CloudPay.queryRefund 查询退款,退款金额字段为空数组?
API 文档:https://developers.weixin.qq.com/minigame/dev/wxcloud/reference-sdk-api/open/pay/CloudPay.queryRefund.html [图片] 如截图,除了refund_count字段看起来有点用外,没有其他有价值的退款相关信息。我应该怎样才能看到退款金额?
2023-08-11 - 【已解决】微信支付云开发,pay_cb 中异步调用服务更新数据库的问题
// payCb 云函数入口文件 const request = require('request'); const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) exports.main = async (event, context) => { // 查看参数 console.log('--- in payCb event ---', event) const { returnCode, resultCode } = event || {} if (returnCode === 'SUCCESS' && resultCode === 'SUCCESS') { console.log('SUCCESS') // 更新数据库状态 await request({ url: 'http://xxxservice.xxx.com/handlers/wechatpaycallback.ashx', // 我们自己的服务 method: 'POST', data: { ...event, }, success: (res) => { if (res && parseInt(res.statusCode) === 200) { return { errcode: 0, errmsg: 'SUCCESS' } } else { return { errcode: 1, errmsg: 'FAIL' } } }, fail: (res) => { return { errcode: 1, errmsg: 'FAIL' } }, }) } else { console.log('FAIL', 'returnCode = ', returnCode, 'resultCode = ', resultCode) return { errcode: 1, errmsg: 'FAIL' } } } 代码如上。 描述:在 pay_cb 中判断 returnCode 和 resultCode 均为 'SUCCESS' 后,调用我们自己的服务更新数据库。 预期:在 success 回调中 return { errcode: 0 },微信结束 pay_cb 的回调。 问题:pay_cb 总是会重复回调 15 次左右。即使是这样,我们也没办法保证我们自己服务能够成功更新数据库。 调试:使用 console.log 打印信息后查看日志,使用云函数本地调试打断点后手动触发,发现不会执行到 success 和 fail 回调中。 其他尝试(死马当活马医): 添加 complete 回调,也不会进入; 改 await request({/*...*/}) 为 return await request({/*...*/}),得到的是 request 对象本身 请问:在微信支付云开发的pay_cb中,怎样做到当且仅当自己的异步函数调用成功才停止pay_cb的回调,以确保数据库更新成功。 或者说 pay_cb 的最佳实践是什么?必须将结果存在微信的云数据库里吗(看网上的pay_cb代码示例都使用了 await db.collection('cloudPay').doc(event.outTradeNo).set({data:event}) 这种代码)? 编辑:经 @老张 指点,问题已解决,感谢 @老张。下面是最终代码,希望可以给碰到同样问题的同学启发。 // pay_cb // 推荐的 request-promise 已弃用,改用了 request-promise-native // 详见官方文档 https://github.com/request/request-promise-native // 以及 request-promise 的弃用说明 https://www.npmjs.com/package/request-promise const request = require('request-promise-native') const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV }) exports.main = async (event, context) => { const { returnCode, resultCode } = event || {} if (returnCode === 'SUCCESS' && resultCode === 'SUCCESS') { // 更新数据库状态 const result = await request({ uri: 'http://ktvservice.geyuntech.com/handlers/wechatpaycallback.ashx', method: 'POST', body: { ...event, }, json : true, }).then((res) => { return { errcode: 0, errmsg: 'SUCCESS' } }).catch((error) => { return { errcode: 1, errmsg: 'FAIL' } }) return result } else { return { errcode: 1, errmsg: 'FAIL' } } }
2021-11-24