多端应用-微信云开发,微信支付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: '已返回成功的响应给微信服务器'};
}
}
}
可以试试用工作流来接收微信支付回调:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/wechatpay/workflow.html