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 = { //要修改的数据
ZhiFuZhuangTai: 1,
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, {
JiFen: true
}) //查询用户的积分
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多次,看日志:
老白写的代码,没有基础,别笑话