使用云开发实现微信支付的具体方法

为方便微信小程序的开发,与维护的便捷性,开始研究使用云开发实现微信支付的方法,省掉了租赁服务器与后台开发的成本。值得开心的是云开发已经支持了微信支付。

微信支付的准备条件

官方文档说明,微信支付要实现的前提条件是:

  • 1、微信开发者工具 Nightly 版 1.02.2005111 及更新的版本
  • 2、需要已经开通了微信支付(目前只有企业法人经过认证才能开通;),且已绑定了商户号的小程序。具体开通方法参见微信支付官方文档

开通方法

(1)在微信开发者工具中,使用绑定的微信小程序账号,打开云开发控制台,在云开发控制台中的 设置 - 其他设置 中添加商户号
在这里插入图片描述
(2)添加后,需要在绑定的商户号管理员在微信支付提供的【服务商助手】小程序上确认授权。
如果需要 jsapi 和 api 退款权限,需要前往微信支付商户平台我的授权产品中进行确认授权,完成授权后即可调用微信支付相关接口能力。

微信支付流程说明

用微信支付云调用来实现完整的支付功能,大体上会经过以下4个步骤(后面在代码的写法上有些步骤会整合到一起):

1、用户在小程序端点击支付时使用wx.cloud.callFunction调用云函数(比如云函数名为pay),并将商品名称、商品价格等信息传递给pay云函数;

2、在pay云函数中调用统一下单接口CloudPay.unifiedOrder(),参数包括接收的商品信息、云函数环境id,以及需要填写结果通知回调函数(比如函数名为paynotice)用来接收异步支付结果;pay云函数会返回的成功结果对象中会包含payment字段;

3、在小程序端wx.cloud.callFunction的success回调函数(也就是拿到云函数返回的对象)里调用wx.requestPayment接口发起支付,而从pay云函数返回的payment对象(字段)就包含这个接口所需要的所有信息(参数);这时会弹出微信支付的界面;

4、用户在小程序端支付成功,paynotice就会接受到异步的支付结果,我们可以在paynotice云函数里进行发送订阅消息以及将支付成功的信息更新到数据库等操作

支付的简单实现

我们可以在小程序的wxml页面比如pay.wxml页面,点击某个button组件时,通过事件处理函数比如callPay,来调用pay云函数,代码如下:

<button bindtap ="callPay">发起支付</button>

云函数

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": "微信支付",    
    "outTradeNo" : "122775224070323234368128", //订单号,不能重复,这个可以根据时间生成 
    "spbillCreateIp" : "127.0.0.1", //就是这个值不用改    
    "subMchId" : "1520057521",  //你的商户ID或子商户ID    
    "totalFee" : 100,  //单位为分    
    "envId": "",  //你的云开发环境ID,注意不是环境名称    
    "functionName": "paysuc",  // 支付成功的回调云函数,这个函数可以处理支付成功之后的事情
    "nonceStr":"F8B31E62AD42045DFB4F2",  //随便写的32位字符串,建议自己生成    
    "tradeType":"JSAPI"   //默认是JSAPI  
    })  
    return res
}

调用云函数

callPay(){  
    wx.cloud.callFunction({    
    name: 'pay',  //云函数的名称    
    success: res => {      
        console.log(res)      
        const payment = res.result.payment   // payment包含了支付需要的所有参数   
        wx.requestPayment({        
            ...payment,        
            success (res) {          
                console.log('支付成功', res)
            },        
            fail (err) {          
               console.error('支付失败', err)         
            }      
         })    
     },    
     fail: console.error
    })
},

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码搬运媛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值