微信小程序云开发实现支付与退款 yinshibanxian

一、 支付

微信小程序云开发实现支付,采用的是tenpay库。npm库链接为[tenpay]:https://www.npmjs.com/package/tenpay。云开发环境暂且不表,实现步骤如下:
  1. 新建一个名称为pay的云函数
  2. 终端打开云函数,分别执行如下两条命令:npm i wx-server-sdk npm i tenpay
  3. 云函数代码如下:
  //云开发实现支付
  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结尾的那个文件。同样的,步骤如下:
  1. 新建一个refund云函数,云函数目录如下: – refund – ssl – apiclient_cert.p12 – index.js
  2. 右键云函数,在终端打开,执行以下两条命令:npm i wx-server-sdk npm i tenpay
  3. 云函数代码如下:

    
    
     // 云函数入口文件
     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
     }
    
  4. 小程序端调用代码
    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)
         }
         })
      }
    

结语

以上就是微信小程序云开发支付和退款的全部教程,笔者踩了很多坑才总结完毕,希望对大家能有所帮助。