欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

小程序通过小程序云实现微信支付功能实例

程序员文章站 2022-03-27 08:07:33
一、开通微信支付1.1 关联商户号\微信公众号平台\功能\微信支付\商户号管理\关联商户号1.2 添加商户号\云开发平台\设置\其他设置\微信支付配置\添加商户号1.3 管理员授权1.2那张图上,点击...

一、开通微信支付

 1.1 关联商户号

\微信公众号平台\功能\微信支付\商户号管理\关联商户号

小程序通过小程序云实现微信支付功能实例

1.2 添加商户号

\云开发平台\设置\其他设置\微信支付配置\添加商户号

小程序通过小程序云实现微信支付功能实例

1.3 管理员授权

1.2那张图上,点击授权。管理员的微信就会跳出提示,点击确定授权即可。

否则使用的时候,会出现sub_mch_id与sub_appid不匹配的报错!

二、云函数开发

2.1 新建云函数

小程序通过小程序云实现微信支付功能实例

小程序通过小程序云实现微信支付功能实例

2.2 云函数代码

\pay\index.js

const cloud = require('wx-server-sdk')
cloud.init({
  env: cloud.dynamic_current_env
})

exports.main = async (event, context) => {    
const res = await cloud.cloudpay.unifiedorder({
    "body" : event.body,
    "outtradeno" : event.outtradeno,
    "spbillcreateip" : "127.0.0.1",
    "submchid" : "0000000000",               //这里要注意:虽然key是子商户id,实际上就是普通商户id
    "totalfee" : parseint(event.totalfee),   //第二个坑:注意必须是数字,如果不是数字,则会报错unifiedorder:fail wx api error: -202
    "envid": "ooo-xxxxxxxxxxxxxxxx",                //这里是回调函数所属的的云环境id
    "functionname": "paycallback",        //这个是回调函数名
    "noncestr":event.noncestr,            //第三个坑:官方文档中相关云函数代码没有noncestr和tradetype,测试的时候会报noncestr不存在的错,翻看文档才发现这个是必填项,直接粘过来以后还需要加上这两个参数
    "tradetype":"jsapi"
  })
  return res
}

2.3 云函数上传并部署

小程序通过小程序云实现微信支付功能实例

小程序通过小程序云实现微信支付功能实例

三、小程序调用

3.1 统一下单

  • 微信下单后获得的数据,最好先保存到数据库,留底
  • 再去调起微信支付界面
//调用云函数,微信统一下单
  cloudpay(){
    var _this = this
    this.setdata({
      body: "账单支付-xxxxx",
      outtradeno: this.data.id+"-"+util.uuid(16),
      totalfee: this.data.totalcost*100 //支付单位:分
    })
    app.showloading(true)
    wx.cloud.callfunction({
      name: "pay",
      data: {
        body: _this.data.body,
        outtradeno: _this.data.outtradeno,
        totalfee: _this.data.totalfee,
        noncestr:util.uuid(32)//调用自己的uuid函数
      },
      success(res) {
        // errcode: 0
        // errmsg: "cloudpay.unifiedorder:ok"
        // returncode: "fail"
        // returnmsg: "total_fee is empty. "
        console.log("提交成功", res.result)
        if(res.result.returncode!="success"){
          app.showtoast(res.result.returnmsg)
          return
        }
        _this.unifiedorder(res.result)
        // _this.requestpayment(res.result)
      },
      fail(res) {
        console.log("提交失败", res)
      }
    })
  },

3.2 调起微信支付界面

  //官方标准的支付方法,调起支付界面
  requestpayment(paydata) {
    var _this = this;
    const payment = paydata.payment//这里注意,上一个函数的result中直接整合了这里要用的参数,直接展开即可使用
    wx.requestpayment({
      ...payment,   //...是展开变量的语法 
      success(res) {
        console.log("支付成功", res)
        _this.paysuccess()
      },
      fail(res) {
        console.log("支付失败", res)
      }
    })
  },

3.2 支付成功回调

  • 不太建议直接在requestpayment的success回调函数中,执行支付成功的操作
  • 最好在另外建一个云函数paycallback
  • 这个云函数paycallback,调用我们自建服务器的接口,执行支付成功的操作
  • 这边涉及到如何在云函数中调用http接口,卖个关子,后续讲

到此这篇关于小程序通过小程序云实现微信支付功能实例的文章就介绍到这了,更多相关小程序 微信支付内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!