201 商户订单号重复 问题解决
发布于 3 年前 作者 linfang 987 次浏览 来自 分享

我们在做支付时,如果第一次吊起支付,用户没有支付,下次再进入订单列表重新支付时,就会报这个错误。 201 商户订单号重复

解决办法呢,就是每次支付的时候,不管是新下单支付,还是第一次没有支付成功,再次吊起支付,我们都做一个随机的处理,就是每一次提交的outTradeNo都不一样。

pay云函数

// 云函数代码
const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
exports.main = async (event, context) => {
  let orderId = event.outTradeNo.substring(0, 15) + new Date().getTime()
  await cloud.database().collection('mh-dingdan')
    .doc(event.outTradeNo)
    .update({
      data: {
        orderId: orderId
      }
    })
  const res = await cloud.cloudPay.unifiedOrder({
    "body": event.goodName, //商品名称或商品描述
    "outTradeNo": orderId, //订单号
    "spbillCreateIp": "127.0.0.1",
    "subMchId": "1615986178", //****** 微信支付商户号
    "totalFee": event.totalFee * 100, //支付的金额,单位分

    "envId": "cloud1-3g5spw8wbb2af38f",
    "functionName": "payCallBack" //支付成功的回调
  })
  return res
}

对应的payCallBack云函数做定当状态更新

// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})
// 云函数入口函数
exports.main = async (event, context) => {
  //订单号 event.outTradeNo
  return await cloud.database().collection('mh-dingdan')
    .where({
      orderId: event.outTradeNo
    })
    .update({
      data: {
        status: 1
      }
    }).then(res => {
      return {
        errcode: 0,
        errmsg: '支付成功'
      }
    }).catch(res => {
      return res
    })
}
回到顶部