一、 支付
微信小程序云开发实现支付,采用的是tenpay库。npm库链接为[tenpay]:https://www.npmjs.com/package/tenpay。云开发环境暂且不表,实现步骤如下:
- 新建一个名称为pay的云函数
 - 终端打开云函数,分别执行如下两条命令:npm i wx-server-sdk npm i tenpay
 - 云函数代码如下:
 
  //云开发实现支付
  const cloud = require('wx-server-sdk')
  cloud.init()
  //1,引入支付的三方依赖
  const tenpay = require('tenpay');
  //2,配置支付信息
  const config = {
    appid: '这里填小程序的appid',
    mchid: '这里填微信商户号id',
    partnerKey: '这里填微信商户的支付密钥',
    notify_url: 'https://mp.weixin.qq.com', // 这里填任意公网可访问的ip即可,如此处的https://mp.weixin.qq.com
    spbill_create_ip: '127.0.0.1' //这里填这个就可以
  };
  exports.main = async (event, context) => {
    const wxContext = cloud.getWXContext()
    let {
        total_fee
    } = event;
    //3,初始化支付
    const api = tenpay.init(config);
    const nonceStr = Math.random().toString(36).substr(2, 15)
    const timeStamp = parseInt(Date.now() / 1000) + ''
    const out_trade_no = "otn" + nonceStr + timeStamp
    let result = await api.getPayParams({
        out_trade_no: out_trade_no,  // 这里填的是商户号中的订单号
        body: '牌位', // 这里填写的是付款信息
        total_fee: total_fee, //订单金额(分),
        openid: wxContext.OPENID //付款用户的openid
    });
    return result;
  }
小程序端调用代码:
  pay(total_fee) {
    wx.cloud.callFunction({
      name: 'pay',
      data: { total_fee: total_fee }, // 可传入相关参数。
      success: res => {
        console.log(res.result)
        if (!res.result.appId) return
        wx.requestPayment({
          ...res.result,
          success: res => {
            console.log(res)
          }
        })
      },
      fail: err => {
        console.log(err)
      }
    })
  }
这样,就可以实现拉起支付页面,支付给对应的商户了。
二、 退款
注意,此处的退款与企业付款到用户零钱是不一样的,笔者一度认为这是相同的东西,从而浪费了很多时间。并且,退款的api调用需要用到证书,证书在微信商户平
台-账户中心-API安全可以下载,下载后是一个压缩文件,解压后里面有三个文件,咱们只需要以p12结尾的那个文件。同样的,步骤如下:
- 新建一个refund云函数,云函数目录如下: – refund – ssl – apiclient_cert.p12 – index.js
 - 右键云函数,在终端打开,执行以下两条命令:npm i wx-server-sdk npm i tenpay
 - 
    
云函数代码如下:
// 云函数入口文件 const cloud = require('wx-server-sdk') const tenpay = require('tenpay'); cloud.init() const config = { appid: '这里填小程序的appid', mchid: '这里填商户号id', partnerKey: '这里填商户的支付密钥', pfx: require('fs').readFileSync('ssl/apiclient_cert.p12'), // 这里导入对应的证书 notify_url: 'https://mp.weixin.qq.com', spbill_create_ip: '127.0.0.1' //这里填这个就可以 }; // 云函数入口函数 exports.main = async (event, context) => { const wxContext = cloud.getWXContext() const api = tenpay.init(config); const out_trade_no = event.trade_no, out_refund_no = event.refund_no, total_fee = event.total_fee, refund_fee = event.refund_fee let result = await api.refund({ out_trade_no, // 支付单号,之前生成的 out_refund_no, // 退款单号,可以在之前的支付单号的基础上生成 total_fee, // 订单总额 refund_fee // 退款金额 }); return result } - 小程序端调用代码
    
refund() { wx.cloud.callFunction({ name: 'refund', data: { trade_no: "otn10bkmla7cirg1588559477", // 商户单号,即之前支付生成的 refund_no: "refundotn10bkmla7cirg1588559477", // 退款单号,可以在商户支付单号的基础上生成 total_fee: 1, refund_fee: 1 }, success: res => { console.log(res) }, fail: err => { console.log(err) } }) } 
结语
以上就是微信小程序云开发支付和退款的全部教程,笔者踩了很多坑才总结完毕,希望对大家能有所帮助。