目录

  • 问题描述
  • 解决方案
  • 备注
  • 总结


问题描述

在小程序支付退款调用api(https://api.mch.weixin.qq.com/secapi/pay/refund)时出现您的请求参数与订单信息不一致的问题

解决方案
  1. 常见错误是total_feerefund_fee金额设定错误,这两个参数单位为,并且只能为整数,total_fee的值需与原始的订单支付的金额相对应,refund_fee的值不能超过可退款的余额
  2. appid 需与小程序id对应
  3. 退款单out_refund_no不能重复
  4. 商户号id与订单生成时的商户号id不一致
  5. 我们项目的错误出在这种较为少见的情况:
  1. 我们是通过云开发的CloudPay.unifiedOrder()的api创建的支付单,传入参数列表包含子商户号id[subMchId]
  2. 交易日期列为每行的索引python 交易日期参数不一致_解决方案

  3. 然后在后台调用的时候通过调用退款接口进行退款处理,但是调用的时候传入的商户号是商户号id[mch_id],并且通过微信订单号[transaction_id]查询,就出现了您的请求参数与订单信息不一致的情况,后来想在退款接口传入子商户号,发现并不满足条件,则通过云开发api的CloudPay.refund()解决
  4. 交易日期列为每行的索引python 交易日期参数不一致_小程序_02

备注
  1. 云开发的退款功能需要授权,在微信开发者工具->云开发->设置->全局设置页的微信支付配置中,即
  2. 交易日期列为每行的索引python 交易日期参数不一致_解决方案_03

  3. 再通过授权网址进行通过授权即可
  4. 示例代码
const result = await cloud.cloudPay.refund({
    nonceStr,  // 随机字符串 可通过Math.random().toString(36).substr(2, 13)生成
    total_fee,  // 订单总额
    refund_fee, // 退款金额
    sub_mch_id, // 需授权退款且与订单生成时一致的商户号id
    out_trade_no, // 与transaction_id二选一
    out_refund_no // 商户自建退款订单号,退款单不能重复  
})
  1. 触发云函数

交易日期列为每行的索引python 交易日期参数不一致_解决方案_04

总结

这次错误其实有预兆,因为我们在通过商户订单号[out_trade_no]查询不到订单,但是通过微信订单号[transaction_id]能查询到订单时直接忽略了,以为微信支付不能通过商户订单号[out_trade_no]查询,在接下来的退款操作时就出现了以上参数与订单信息不一致的错误,纠错了半天,殊不知是子商户号商户号填写错误的问题

交易日期列为每行的索引python 交易日期参数不一致_解决方案_05