评论

多端应用-微信云开发,微信支付V2支付回调解决

多端应用-微信云开发,微信支付V2支付回调解决notify

多端应用-微信云开发,微信支付V2支付回调解决


前置条件
1.创建回调云函数如:Fun_notify
2.腾讯云-云开发-访问管理-新增自定义域名
3.新建触发路径




触发路径以 / 开头 如:/Fun_notify



以下是我的代码案例仅供参考,开通会员功能


需要在统一下单时添加上云函数触发的链接 https://域名/Fun_notify

微信支付云开发APP_V2支付教程:https://developers.weixin.qq.com/community/develop/article/doc/000a004c8f8218252310f2f246b013


const cloud = require('wx-server-sdk')
const xml2js = require('xml2js')
cloud.init({env: cloud.DYNAMIC_CURRENT_ENV})


// 更新记录函数
async function updateRecord(db, collectionName, query, data) {
  return await db.collection(collectionName).where(query).update({ data });
}


exports.main = async event => {
  const timestamp = Date.parse(new Date()) / 1000;
  const wxContext = cloud.getWXContext()
  const db = cloud.database()
  const xml = Buffer.from(event.body, 'base64').toString()
  const parser = new xml2js.Parser()
  const result = await parser.parseStringPromise(xml)
  const { nonce_str, transaction_id } = result.xml


  // 验证支付结果
  if (result.xml.result_code[0] === 'SUCCESS' && result.xml.return_code[0] === 'SUCCESS') {
    const order = await db.collection('pre_order').where({ nonceStr: nonce_str[0] }).get();


    // 如果订单不存在,添加错误信息并返回成功
    if (!order.data[0]) {
      const data = {message:"订单数据不存在",type:"pay",result:result.xml,payor:true}
         // 插入错误集合
      await db.collection('Error_info').add({ data });
         // 响应给微信服务器
      return {
        statusCode: 200,
        headers: { 'Content-Type': 'application/xml' },
        body: '',
      };
    }


    const { category, id, payor, tianshu } = order.data[0]


    // 如果订单未支付,更新订单信息
    if(payor == false){
      const query = { nonceStr: nonce_str[0] };
      const data = { transactionId: transaction_id[0], payTime: new Date().getTime(), payStatus: 1, payor: true };
      await updateRecord(db, 'pre_order', query, data);

      const viptime = timestamp + 24 * 60 * 60 * tianshu;

      // 更新用户信息集合
      const data = { viptime,vip:1};
      await db.collection('UserList').doc(id).update({ data });

      // 响应给微信服务器
      return {
        statusCode: 200,
        headers: { 'Content-Type': 'application/xml' },
        body: '',
      };
    } else {
      // 如果订单已支付,返回错误信息
      return { code: -1, message: '已返回成功的响应给微信服务器'};
    }
  }
}


最后一次编辑于  2023-08-18  
点赞 1
收藏
评论

1 个评论

登录 后发表内容