收藏
回答

201 商户订单号重复(云开发微信支付 )

当前:两次请求订单号、金额、body,全都一致(就是用户取消支付后的同一订单重新请求支付),结果报错201

期望行为:

多次调用统一下单接口,如果订单号、金额、body一致,希望能多次重复返回可以进行正常支付的参数,云函数如下:

// 云函数入口文件
// 云函数代码
const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})


exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext();
  const res = await cloud.cloudPay({appid: wxContext.FROM_APPID}).unifiedOrder({
    "body" : event.body, // 商品描述
    "outTradeNo" : event.outTradeNo, // 商户订单号
    "spbillCreateIp" : '127.0.0.1', // 终端 IP
    "subMchId" : "xxx", // 商户号
    "totalFee" : event.totalFee, // 总金额
    "envId": wxContext.ENV, // 云函数环境名称
    "functionName": "paymentCallback", // 支付结果通知回调云函数名
    "nonceStr": Math.random().toString(36).substr(2) + '',
    "tradeType": "JSAPI",
  });
  return res;
}



以上代码返回的参数只可以使用一次,相同的参数再次统一下单,就报错201 商户订单号重复

云开发文档很模糊,用户取消了支付情况下如何进行第二次统一下单?难不成要先关闭原订单吗?(我看云开发支付文档说不允许短时间内调用订单关闭接口)


端也没有换,都是小程序,订单号里的金额、body没有任何更改,原模原样

回答关注问题邀请回答
收藏

1 个回答

  • Memory (私信不回复)
    Memory (私信不回复)
    06-15

    outTradeNo是不可以重复使用的,参数重入在支付侧是可以重新获取预支付ID

    06-15
    有用
    回复 8
    • 天赐
      天赐
      06-15
      取消支付后同订单再次支付,不能调用统一下单接口了,是这个意思吗?那要调用哪个接口,还是说我只能将首次统一下单返回的参数存储起来?
      06-15
      回复
    • Memory (私信不回复)
      Memory (私信不回复)
      06-15回复天赐
      只能参数重入才可以,任何参数改动都会报错订单重复,你只能自己存起来
      06-15
      回复
    • 天赐
      天赐
      06-15
      通过云开发做微信支付,我只传入了body、outTradeNo和totalFee,nonceStr我发现是cloudPay.unifiedOrder这个方法自动生成的,所以我只要用云开发,就不可能参数重入,这样理解对吗?
      06-15
      回复
    • 天赐
      天赐
      06-15
      如果只是参数重入,那么我小程序端只传了这三个固定参数,这肯定是前后一致的,问题出在了cloudPay.unifiedOrder这个方法吗
      06-15
      回复
    • 天赐
      天赐
      06-15
      我仔细检查了,多次统一下单,只有nonceStr和sign不同,而这个nonceStr是云开发帮我自动生成的,sign也是自动生成的
      06-15
      回复
    查看更多(3)
登录 后发表内容