说明:第一次使用微信小程序云函数的支付功能,也找了很多资源,这一种是最适合我的,不知道能不能帮助到大家,就算是自己的一个总结吧。
步骤一:
在project.config.json文件里添加"cloudfunctionRoot": "cloudfuntions/",字段
"description": "项目配置文件", "cloudfunctionRoot": "cloudfuntions/", "packOptions": { "ignore": [] },
步骤二:
在app.js里添加代码
onLaunch() {
// 将用户访问记录到用户管理中,在控制台可见 if(!wx.cloud) { console.error('请使用2.2.3或以上的基础库以使用云能力'); } else { wx.cloud.init({ env: 'pay-2gbw5art867e1f3c', // 当前云开发环境的ID traceUser: true, }) } }
步骤三:
打开云开发
如果是第一次使用云开发可以这样操作:
1:新建项目时选择使用小程序·云开发
2:点击云开发按钮创建初始环境,如果创建完之后未出现相关文件夹可重启开发工具
创建好环境之后会有这个文件夹。payment里就是当前的云函数所在地
3:在payment文件夹上右键单击可以进行云函数的运行与部署
4:在app.js里面有一个属性env,它是当前环境的ID,如果要更换环境更改ID即可
步骤四:
编辑本地服务函数(给支付按钮绑定个事件pay())
pay() { wx.cloud.callFunction({ name: 'payment', // payment为云函数的名字 data: { total_fee: 1800, // 这里注意这是number类型,当时我写成了string找了半天 spbill_create_ip: '127.0.0.1' // 回调函数服务,我随便写的,不知道有啥用,我看别的帖子也随便写的 } }).then(res => { console.log('vip接口', res) wx.requestPayment({
// 这是调用云函数之后返回的五个参数,都在res里 timeStamp: res.result.payment.timeStamp, nonceStr: res.result.payment.nonceStr, package: res.result.payment.package, signType: res.result.payment.signType, paySign: res.result.payment.paySign, success: res => { // 支付成功 console.log('支付成功', res); }, fail: err => { // 支付失败 console.log('支付失败', err); } }) }) }
步骤五:
我的云函数payment
// 云函数入口文件const cloud = require('wx-server-sdk')cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV // 当前云函数环境的ID})exports.main = async (event, context) => {
// event包含本地服务里的函数wx.cloud.callFunction里传过来的data
// 我传递的是total_fee和spbill_create_ip const res = await cloud.cloudPay.unifiedOrder({ "body" : "yuanyuan",//商品名称 "outTradeNo" : "250190269"+new Date().getTime(),//订单号 "spbillCreateIp" : `${event.spbill_create_ip}` + '',//回调函数,这我转换了,可以不转换 "subMchId" : "123123123",//商户号 "totalFee" : event.total_fee,//商品支付金额,单位分 "envId": "pay-2gbw5art867e1f3c",//云开发id "functionName": "pay_cb"//回调云函数 }) return res}
总结:云函数是将一部分代码放在了服务器上,注意异步的问题,我本来在掘金上搜的帖子是没用cloud.cloudPay.unifiedOrder,这个方法比较简单,先记录下来,以后用到别的方法在比较。
我之前看的帖子:juejin.cn/post/684490…。