小程序云开发实现微信支付注意事项

比较容易出错的是两个地方:

1. 订单号必须唯一,不能重复,重复就会创建失败

2. 金额必须是整数(以分为单位),小数会导致创建失败

小程序云开发实现微信支付的代码分为两部分:

1. 小程序端代码

2. 云函数代码

小程序端的代码首先调用云函数代码创建一个支付项目,如果创建成功,云函数将返回这个支付项目的相关数据(payment),小程序端用这个数据(payment)来调用微信支付界面,用户开始支付,用户的操作结束后,小程序获得支付结果,成功支付或者未支付。

小程序端

  async onTapPay(e){    
    let paid=false; let This=this;
    let order = new Date().Idealand_ToFileName(); // 订单号,每个订单必须不一样,如果重复会导致订单创建失败
    let totalFee = 1000; // 这里是以分为单位,必须为整数,如果是小时,会导致订单创建失败 
    let data = { order, totalFee }; 
    let res=await wx.cloud.callFunction({  name: 'pay', data }); 
    const { payment } = res.result;  
    if(!payment || !payment.package){ 
      // 订单创建失败
     
    } else { 
      // 订单创建成功,调用支付界面
      wx.requestPayment({
        ...payment,
        success (res) { paid=true; /* 支付成功 */ },
        fail (err) {  /* 支付失败 */ },
      });      
    }
  },

云函数 pay


exports.main = async (event, context) => {
  let {order, totalFee}=event;
  let ps={
    "outTradeNo" : order,  // 支付项目编号,必须唯一,不可重复
    totalFee,              // 以分为单位,必须为整数,不可为小数
    "subMchId" : "1652990403",  // 普通商户号
    "envId": "juyipintest-4gx5k7wu2ab0d08f", // 云环境Id
    "body" : "居意品创意餐厅",          // 这个没有用,随便填
    "spbillCreateIp" : "127.0.0.1",    // 这个没有用,随便填
    "functionName": "payCallBack",     // 这个没有用,随便填
  }; 
  const res = await cloud.cloudPay.unifiedOrder(ps); return res;
};

你可能感兴趣的:(小程序,微信)