微信小程序,支付,退款,查询订单(支付篇)
发布于 3 年前 作者 jingsong 1034 次浏览 来自 分享

微信支付功能首先必须开启以下几项授权

1.登录微信公众平台>点击功能>点击微信支付 确保已经授权微信商户号

2.打开微信小程序开发者功具>点击云开发>点击设置>点击其它设置 确保微信支付配置三项已全部授权才能正常使用退款功能,但不影响支付功能

微信支付功能建议使用云开发,这样就不需要签名。小程序密钥等等!

接下来就可以开始微信支付以及其他功能了!


微信支付功能

wxml:

<button bindtap="Buy">立即购买</button>

js:

// 首先在page({})外层声明随机数
var random=Math.floor((Math.random() * 100000) + 1)
var random2=Math.floor((Math.random() * 1000000) + 1)
page({
    data:{
        //在data中赋值一个唯一的订单号
        outTradeNo:random+"9527"+new Date().getTime()+random2,//随机生成的订单号     
    }
     // 购买套餐
    Buy(e){   
        //调用云函数
        wx.cloud.callFunction({
            name'buy',  //填写云函数名
            data:{    //data里的数据用于向云函数后台提交数据
                name:"商品名称",  //提交商品名称
                totalFee:"商品的金额"*100, // 提交商品的金额,因为单位是(分)所以要*100确保  金额准确性
                outTradeNo, // 提交订单号,这个是自己生成的订单号,确保唯一性
            }            
          }).then(res=>{  //成功回调
            console.log(res)
          const payment = res.result.payment  //如果回调成功会抛出一些订单信息
          var that = this
          wx.requestPayment({ //调用微信支付api接口
            ...payment,      //这里就是上面拿到的订单信息 注意:这个前面是三个点
            success (res) {  //程序走到这里就是支付成功了
              console.log('支付成功', res)
             },
            fail (err) { //如果取消支付会走这一步
              console.error('支付失败', err)             
            }
            })
          })
    },
      onLoad(){
         this.setData({
            //当每次进入页面时可以重置data中的随机数,否则随机数会一直保持一个数,当然为了严谨也可以使用雪花算法确保订单信息的唯一
        outTradeNo:random+"9527"+new Date().getTime()+random2,//随机生成的订单号   
        })
      }
    })

支付云函数代码

const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV   //当前云函数的环境id这个值是默认第一个当然自己也可以定义
})

exports.main = async (event, context) => {
  const res = await cloud.cloudPay.unifiedOrder({ //注意这里是微信支付的代码和普通使用云函数调用数据库不一样一定要写
    "body" : event.name,//商品名称
    "outTradeNo" : event.outTradeNo,//订单编号唯一的自己生成的支付订单号
    "spbillCreateIp" : "127.0.0.1",  //这里是默认地址一般可以不用动
    "subMchId" : "商户号",//商户号 这个是授权支付配置的商户号
    "totalFee" : event.totalFee,// 订单金额以分为单位,js中已经*100了就直接调用就可以了
    "envId""你的云函数环境id",   //当前云函数的环境id
    "functionName""buy"   //当前云函数的名称
  })
  return res  //向前端代码抛出订单信息
}    
回到顶部