微信支付:请求参数与订单信息不一致

问题描述

​ 在小程序支付退款调用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] 在这里插入图片描述

      然后在后台调用的时候通过调用退款接口进行退款处理,但是调用的时候传入的商户号是商户号id[mch_id],并且通过微信订单号[transaction_id]查询,就出现了您的请求参数与订单信息不一致的情况,后来想在退款接口传入子商户号,发现并不满足条件,则通过云开发api的CloudPay.refund()解决
      在这里插入图片描述

备注
  1. 云开发的退款功能需要授权,在微信开发者工具->云开发->设置->全局设置页的微信支付配置中,即
    在这里插入图片描述

    再通过授权网址进行通过授权即可

  2. 示例代码

    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 // 商户自建退款订单号,退款单不能重复  
    })
    
  3. 触发云函数

在这里插入图片描述

总结

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

在这里插入图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值