微信小程序云函数支付功能

454 阅读2分钟

说明:第一次使用微信小程序云函数的支付功能,也找了很多资源,这一种是最适合我的,不知道能不能帮助到大家,就算是自己的一个总结吧。

步骤一:

      在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…