申请商户号
要开通微信支付功能,首先需要申请商户号。进入微信支付官网,点击"成为商家",按照页面提示填写资料并提交审核。申请时需要提供营业执照(个体户或公司执照均可),如果没有执照需要先办理。审核通常需要1-3个工作日。
关联小程序与商户号
商户号申请通过后,登录微信支付商户平台,进入"产品中心"-"账号管理",找到"关联小程序"功能。选择需要关联的小程序并确认授权,系统会自动完成绑定。
开发工具配置
1. 打开微信开发者工具,进入对应小程序项目
2. 点击左侧"云开发"进入控制台
3. 选择"设置"-"其他设置"
4. 在"支付配置"中添加已申请的商户号
5. 保存配置后需要等待10分钟左右生效
支付业务逻辑实现
支付功能的核心业务流程分为三个关键环节:
1. 前端调用云函数获取支付参数
2. 小程序端发起支付请求
3. 处理支付结果
云函数开发要点
支付云函数(pay)主要职责是:
接收小程序端请求
向微信支付系统获取预支付订单
返回包含时间戳、随机字符串等支付参数的回包
前端调用注意事项
小程序端代码需要:
1. 调用pay云函数获取支付参数
2. 使用wx.requestPayment发起支付
3. 处理支付结果回调
const cloud = require('wx-server-sdk')
cloud.init({
env: '' //填入你的云开发环境ID
})
exports.main = async (event, context) => {
const res = await cloud.cloudPay.unifiedOrder({
"body": event.body,
"outTradeNo" : event.outTradeNo, //不能重复,否则报错
"spbillCreateIp" : "127.0.0.1", //就是这个值,不要改
"subMchId" : "", //你的商户号,
"totalFee" : event.totalFee*100, //单位为分
"envId": "", //填入你的云开发环境ID
"functionName": "pay_success", //支付成功的回调云函数
"nonceStr":event.nonceStr,//随便弄的32位字符串,建议自己生成
"tradeType":"JSAPI" //默认是JSAPI
})
return res
}
支付后业务处理
特别注意:
不要在wx.requestPayment的回调中处理业务逻辑
支付成功后的订单状态更新应该在云函数中完成
//使用微信支付
pay:function(id){
let that = this;
wx.showLoading({
title: '正在支付',
})
wx.cloud.callFunction({
name: 'pay', //云函数的名称
data:{
body:'支付跑腿费',
outTradeNo:id, //用记录号来做订单号,因为记录号也是唯一的。
totalFee:that.data.price,
nonceStr:'5K8264ILTKCH16CQ2502SI8ZNMTM67VS'
},
success: res => {
console.log(res)
const payment = res.result.payment
wx.hideLoading();
wx.requestPayment({
...payment, //...这三点是 ES6的展开运算符,用于对变量、数组、字符串、对象等都可以进行解构赋值。
success (res) {
//这里success回调函数只有用户点击了“完成”或者返回键才会被触发
//所以不要在这里写改变订单为已支付的业务逻辑
//万一用户支付完成,但不点击"完成"或者返回键,那会造成数据不一致性的问题
console.log('支付成功', res)
wx.showToast({
title: '下单成功',
icon: 'success',
duration: 2000
})
},
fail (err) {
console.error('支付失败', err) //支付失败之后的处理函数,写在这后面
//为了节省数据库的空间,支付失败的订单可以删除
db.collection('publish').doc(id).remove()
},
})
},
fail(ere){
//为了节省数据库的空间,支付失败的订单可以删除
db.collection('publish').doc(id).remove()
},
})
},
使用云数据库的触发器或定时任务检查支付状态
订单查询时只显示支付状态为true的订单
常见问题解决方案
1. 支付回调不可靠问题:建议使用微信支付通知+主动查询双重校验机制
2. 数据一致性问题:采用事务操作更新订单状态
3. 支付超时问题:设置合理的支付有效期(建议2小时)
开发建议
1. 先在测试环境下完成支付流程验证
2. 做好异常处理和日志记录
3. 支付金额使用分单位(整数)
4. 定期对账确保财务数据准确
const cloud = require('wx-server-sdk')
cloud.init({
env:'' //填入你的云开发环境ID
})
const db = cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {
const orderId = event.outTradeNo
const returnCode = event.returnCode
if(returnCode == 'SUCCESS'){
//更新云数据库的订单状态,改为已支付的状态即可
db.collection('publish').where({
_id:orderId,
}).update({
data:{
pay_status:true, //改为已支付状态
}
})
const res = {errcode:0,errmsg:'支付成功'}//需要返回的字段,不返回该字段则一直回调
return res
}
}
通过以上步骤和注意事项,可以在小程序云开发中实现稳定可靠的微信支付功能。关键是理解支付业务流程,处理好各个环节的状态同步,确保支付数据的一致性。
版权声明:本文为 “博览广文网” 原创文章,转载请附上原文出处链接及本声明;
工作时间:8:00-18:00
客服电话
0755-88186625
电子邮件
admin@lanyu.com
扫码二维码
获取最新动态