收藏
回答

统一下单完成后回调接口被重复多次执行是什么情况?

const db = cloud.database(); //获取数据库的引用 无参数,用默认环境
const _ = db.command
//const $ = db.command.aggregate
//event 客户端调用接口时携带的参数 context调用信息和状态
exports.main = async (event, context) => {
  if (returnCode == "SUCCESS") { //用户支付完成后的回调函数
        await ZhiFu_JieGuo(event) //支付结果
        return false
    }
}
async function ZhiFu_JieGuo(Event{
    let DangHao = Event.outTradeNo //创建订单时的单号 即数据库中的_id字段
    let DD_CJReng = Event.subOpenid //订单创建人
    let ShiJian = Event.timeEnd.replace(/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/"$1-$2-$3 $4:$5:$6"//收到回调结果的时间(支付完成时间) 转为年-月-日 小时:分:秒
    let JiaoYiDangHao = Event.transactionId //交易单号
    let attach = JSON.parse(Event.attach) //符加数据(需要转为对象格式)
    let GouMaiJiFenShu=attach.JiFen//购买的数量
    let XiuGaiShuJu = { //要修改的数据
        ZhiFuZhuangTai1,
        WanChengShiJian: ShiJian, //完成时间
        ZhiFuRen: DD_CJReng, //支付人
        JiaoYiDangHao: JiaoYiDangHao //交易单号
    }
    let res0=await Doc_Get("ZhiFuJiLu",DangHao,{ZhiFuZhuangTai:true})//获统一下单存储的单据的支付状态
    if(res0.ZhiFuZhuangTai===1){
        XieRiZhi("warn","支付完成","查询支付状态","已完成支付,被重复运行")//写日志这里在日志中可以查到
        return false
    }
    let res = await doc_update("ZhiFuJiLu", DangHao, XiuGaiShuJu) //更新支付状态
    if (res._err) {
        XieRiZhi("error""支付完成""更新支付状态", XiuGaiShuJu, res._err)//写日志
        return false//中断执行
    }


    let res1 = await Doc_Get("YongHuXingXiBiao", DD_CJReng, {
        JiFentrue
    }) //查询用户的积分
    if (res1._err) {
        XieRiZhi("error""支付完成""查询用户的积分",XiuGaiShuJu, res1._err)//写日志
        return false//中断执行
    }
    //以自增的方式增加积分
    let res2=await  doc_update_inc("YongHuXingXiBiao",DD_CJReng,"JiFen",GouMaiJiFenShu)//增加用户的积分
   let XieDaiCangShu={//在日志中记录参数
          _id:Event.outTradeNo,
          JiaoYiDangHao: JiaoYiDangHao //交易单号
      }
    if(res2._err){
        XieRiZhi("error","支付完成","增加积分",XieDaiCangShu,res2._err)//写日志
        return false//中断执行
    }
    
    let res3 = await doc_update_push("YongHuXingXiBiao", DD_CJReng, "JiFenJiLu"0, ['积分购买', attach.BiaoTi, ShiJian, GouMaiJiFenShu]) //更新积分数量
    if (res3._err) {
        XieRiZhi("error","支付完成""记录积分增加",XiuGaiShuJu, res3._err)//写日志
        return false//中断执行
    }
    return false

}

以上为支付回调接口.不明白为什么会执行10多次,看日志:

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

2 个回答

  • Memory
    Memory
    2022-02-14

    2022-02-14
    有用 1
    回复 1
    • 大尾巴狼
      大尾巴狼
      发表于移动端
      2022-02-14
      大意了。谢谢
      2022-02-14
      回复
  • 大尾巴狼
    大尾巴狼
    2022-02-12

    老白写的代码,没有基础,别笑话

    2022-02-12
    有用
    回复
登录 后发表内容