fix: 微信退款API参数修正——refund_order正确字段(openid/order_id/refund_order_id/left_fee/refund_fee/refund_reason/req_from/env)替换错误的offerId/outTradeNo
This commit is contained in:
@@ -1294,7 +1294,20 @@ router.post('/vpay/orders/:id/refund', requirePermission('orders:write'), async
|
|||||||
const accessToken = tokenRes.access_token
|
const accessToken = tokenRes.access_token
|
||||||
if (!accessToken) throw new Error('获取access_token失败: ' + JSON.stringify(tokenRes))
|
if (!accessToken) throw new Error('获取access_token失败: ' + JSON.stringify(tokenRes))
|
||||||
|
|
||||||
const refundBody = JSON.stringify({ offerId: OFFER_ID, outTradeNo: order.orderNo })
|
// refund_order 正确参数(snake_case,官方文档 https://developers.weixin.qq.com/miniprogram/dev/server/API/VirtualPayment/api_refund_order.html)
|
||||||
|
const refundOrderId = `RF${Date.now()}${require('crypto').randomBytes(3).toString('hex').toUpperCase()}`
|
||||||
|
const refundFee = Math.round(order.amount * 100) // 退款金额(分)= 订单金额
|
||||||
|
const refundBody = JSON.stringify({
|
||||||
|
openid: user.openid,
|
||||||
|
order_id: order.orderNo, // 商户单号(下单时的 outTradeNo)
|
||||||
|
refund_order_id: refundOrderId, // 本次退款单号(8-32位)
|
||||||
|
left_fee: refundFee, // 剩余可退金额(分)
|
||||||
|
refund_fee: refundFee, // 本次退款金额(分),须 ≤ left_fee
|
||||||
|
biz_meta: JSON.stringify({ admin: req.admin.username, reason: 'user_refund' }),
|
||||||
|
refund_reason: 0, // 0=用户申请退款
|
||||||
|
req_from: 1, // 1=商户后台发起
|
||||||
|
env: ENV,
|
||||||
|
})
|
||||||
const paySig = require('crypto').createHmac('sha256', APPKEY).update('/xpay/refund_order&' + refundBody).digest('hex')
|
const paySig = require('crypto').createHmac('sha256', APPKEY).update('/xpay/refund_order&' + refundBody).digest('hex')
|
||||||
|
|
||||||
const wxRes = await fetch(`https://api.weixin.qq.com/xpay/refund_order?access_token=${accessToken}&pay_sig=${paySig}`, {
|
const wxRes = await fetch(`https://api.weixin.qq.com/xpay/refund_order?access_token=${accessToken}&pay_sig=${paySig}`, {
|
||||||
|
|||||||
Reference in New Issue
Block a user