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

步骤一:
在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,        
          })      
         }    
        }

步骤三:

打开云开发

微信小程序 云函数 axios 微信小程序 云函数pay_本地服务


如果是第一次使用云开发可以这样操作:

1:新建项目时选择使用小程序·云开发

2:点击云开发按钮创建初始环境,如果创建完之后未出现相关文件夹可重启开发工具

微信小程序 云函数 axios 微信小程序 云函数pay_回调函数_02


创建好环境之后会有这个文件夹。payment里就是当前的云函数所在地

3:在payment文件夹上右键单击可以进行云函数的运行与部署

4:在app.js里面有一个属性env,它是当前环境的ID,如果要更换环境更改ID即可

微信小程序 云函数 axios 微信小程序 云函数pay_微信小程序 云函数 axios_03


步骤四:

编辑本地服务函数(给支付按钮绑定个事件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,这个方法比较简单,先记录下来,以后用到别的方法在比较。