今天打了几把永劫无间后,咱们来聊一聊用云开发来开发微信小程序时,如何实现微信支付,并且保证业务逻辑可靠。

目录

  • 注册微信支付商户号
  • 小程序关联商户号
  • 业务逻辑
  • 代码实现

注册微信支付商户号

点击“成为商家”,按照操作提示去申请商户号即可(需要营业执照,个体户或公司都行。没有可以办一个)

小程序关联商户号

注册完成,登录进去,点击产品中心。再点击AppID账号管理,关联微信小程序的AppID,同意即可。

在微信开发者工具绑定商户号,点击云开发,进入云开发控制台,点击设置,点击其他设置,添加商户号,如下图操作即可


前期工作准备结束后,开始进入撸代码环节了

业务逻辑


这个是官方文档的一张微信支付的业务逻辑示意图。我以前看的时候还是挺懵的,不知所云。后来真正实践过才明白它的意思。

举个栗子可能更好明白,我们在开发跑腿小程序的时候呢,需要发布跑腿功能,发布时需要进行微信支付。

先看看我画的图,发布跑腿的一个业务逻辑

代码实现

pay云函数:
主要是用于获取回包,回包里面有wx.requestPayment 发起微信支付所需要的参数。

const cloud = require('wx-server-sdk')
cloud.init({env: ''  //填入你的云开发环境ID
})exports.main = async (event, context) => {const res = await cloud.cloudPay.unifiedOrder({"body": event.body,"outTradeNo" : event.outTradeNo, //不能重复,否则报错"spbillCreateIp" : "127.0.0.1", //就是这个值,不要改"subMchId" : "",  //你的商户号,"totalFee" : event.totalFee*100,  //单位为分"envId": "",  //填入你的云开发环境ID"functionName": "pay_success",  //支付成功的回调云函数"nonceStr":event.nonceStr,//随便弄的32位字符串,建议自己生成"tradeType":"JSAPI"   //默认是JSAPI})return res
}

微信小程序前端代码调用pay云函数,并调用wx.requestPayment发起微信支付

  //使用微信支付pay:function(id){let that = this;wx.showLoading({title: '正在支付',})wx.cloud.callFunction({name: 'pay',  //云函数的名称data:{body:'支付跑腿费',outTradeNo:id,      //用记录号来做订单号,因为记录号也是唯一的。totalFee:that.data.price,nonceStr:'5K8264ILTKCH16CQ2502SI8ZNMTM67VS'},success: res => {console.log(res)const payment = res.result.paymentwx.hideLoading();wx.requestPayment({...payment, //...这三点是 ES6的展开运算符,用于对变量、数组、字符串、对象等都可以进行解构赋值。success (res) {//这里success回调函数只有用户点击了“完成”或者返回键才会被触发//所以不要在这里写改变订单为已支付的业务逻辑//万一用户支付完成,但不点击"完成"或者返回键,那会造成数据不一致性的问题console.log('支付成功', res)wx.showToast({title: '下单成功',icon: 'success',duration: 2000})},fail (err) {console.error('支付失败', err) //支付失败之后的处理函数,写在这后面//为了节省数据库的空间,支付失败的订单可以删除db.collection('publish').doc(id).remove()},})},fail(ere){//为了节省数据库的空间,支付失败的订单可以删除db.collection('publish').doc(id).remove()},})},

这样就可以实现微信支付啦

特别注意,不要在wx.requestPayment接口的success回调函数里面写支付成功后的业务处理。切记!!!因为这里success回调函数只有用户点击了“完成”或者返回键才会被触发。万一用户支付完成,但不点击"完成"或者返回键,那会造成支付成功,但没去处理数据,导致数据不一致性的问题。

应该交给pay_success云函数来处理支付成功后的业务逻辑。

pay_success云函数:


const cloud = require('wx-server-sdk')cloud.init({env:''   //填入你的云开发环境ID
})
const db = cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {const orderId = event.outTradeNoconst returnCode = event.returnCodeif(returnCode == 'SUCCESS'){//更新云数据库的订单状态,改为已支付的状态即可db.collection('publish').where({_id:orderId,}).update({data:{pay_status:true,  //改为已支付状态}})const res = {errcode:0,errmsg:'支付成功'}//需要返回的字段,不返回该字段则一直回调return res}
}

改变状态之后,我们在接单大厅里去查询获取待接单信息的时候,要去获取已支付的待接单的订单,也就是pay_status:true状态的订单即可。保证了数据的一致性。

到此结束啦。其实云开发实现微信支付也没有那么难。只不过业务逻辑需要更加严谨一点。以前自己太辣鸡,写的业务逻辑漏洞百出,惭愧…

还是得继续学习才行。

微信小程序云开发如何实现微信支付,业务逻辑又怎样才算可靠相关推荐

  1. 校园二手书商城源代码基于微信小程序云开发,可在线支付提现,含详细配置教程

    校园二手书商城源代码基于微信小程序云开发,可在线支付提现,含详细配置教程 完整代码下载地址:校园二手书商城源代码基于微信小程序云开发 欢迎使用,下面是配置教程 长话短说,下面直接说配置流程 一.小程序 ...

  2. 微信小程序云开发笔记

    微信小程序云开发笔记 1. 微信小程序基本知识 1.1 小程序框架 1.2 开发工具 1.3 WXML基本语法 2. 导航栏操作 2.1 改变导航栏背景颜色 2.2 改变导航栏标题 2.3 改变导航栏 ...

  3. python操作微信小程序云端数据库_微信小程序云开发之数据库操作

    本文实例为大家分享了微信小程序云开发之数据库操作的具体代码,供大家参考,具体内容如下 新建集合 1.打开云开发控制台,数据库 2.添加集合users 添加代码 onAdd: function () { ...

  4. 微信小程序云开发不完全指北

    微信小程序云开发不完全指北 首先必须说明云开发的"云"并不是类似云玩家里的云的意思,而是微信小程序真的提供了云开发的接口以及一个简单的提供存储.数据库服务的虚拟后台(对于一些轻量小 ...

  5. python操作微信小程序云端数据库_微信小程序·云开发云数据库的基本使用-微信小程序云开发实例-腾讯云微信小程序...

    微信小程序·云开发云数据库的基本使用-微信小程序云开发实例-腾讯云微信小程序 浏览量:1120 时间:2020-04-06

  6. 微信小程序云开发用户身份登录_你必须要掌握的微信小程序云开发

    微信小程序开发已经成为目前最火爆的技能之一,无论是在求职.毕设.兴趣培养等方面都已经成为一项必备技能,而小程序云开发技术的出现更是点燃了整个小程序生态圈. 在2019微信公开课PRO小程序分论坛上,腾 ...

  7. 基于微信小程序云开发(校园许愿墙app)2.0稳定版,以发布上线

    大家好~我是c站的一个小博主,我会定期更新博文,本篇是围绕微信小程序基于腾讯云开发展开的一个项目,如果看着还不错,或者对您有帮助的话,可以进我的专栏看看我的小程序的其他作品https://blog.c ...

  8. 微信小程序云开发实战:网上商城(二)

    微信小程序云开发实战:网上商城(二) 主页面 入口页面 云函数与云数据库 代码实现 云端实现 小程序端实现 选择UI组件库 WeUI Vant 整合UI组件库 以扩展包的方式引入weui 接下来 主页 ...

  9. php访问微信云数据库,第三方服务器php获取微信小程序云开发access_token和云数据库...

    微信小程序云开发开放了http api,可以从第三方访问云服务了.方便很多.云服务的后台,可以用PC端写了. 流程大概就是通过appid,appkey获得access_token,这个access_t ...

最新文章

  1. 前端二十七:四彩边框
  2. 关于Netty的入门使用
  3. 交易性金融资产账务处理问题及改进
  4. 关于[super dealloc]
  5. 圣地亚哥分校 计算机,加州大学圣地亚哥分校计算机怎么样?
  6. 使用PID和LQR控制器进行多旋翼飞行器控制
  7. 离散数学-第八章图论及其应用
  8. android集成第三方---集成wps实现文档阅读功能
  9. 给力大辞典v3.0 免费安装版【包含18部字典词典】
  10. LeapFTP 显示服务器端文件名乱码问题处理
  11. 基于OpenCV视频帧差分的身高检测
  12. 服务器系统内存不能为written,LOL选了英雄之后出现 无法连接服务器, 0x007197ea指令引用的0x0000003c内存。该内存不能为written。高悬赏...
  13. PHP快速入门指南-基础篇一
  14. 印象团队EverTeam for Mac(团队协作工具)
  15. Elasticsearch - Fuzzy query
  16. 上传文件 后清空file
  17. 部署DNS从服务失败,nslookup访问www.linuxprobe.com失败
  18. 中英离线翻译mac_Translatium for mac(翻译工具)
  19. 谷歌浏览器为什么推荐使用搜狗搜索?知乎网友的脑回路真是……
  20. 使用map方式获取iris请求中的json请求数据

热门文章

  1. 英文手写墨水艺术字体
  2. #c拉普拉斯展开求行列式的值
  3. vbo,ibo,vao
  4. 机器学习项目之数据清洗
  5. 机器学习:浅谈先验概率,后验概率
  6. 用Keras解决机器学习问题!
  7. Js微信公众号引JS-SDK调起微信支付
  8. SQL的高级教程(一)
  9. 智能化推送服务MobPush产品简介
  10. ps 2022 保存打开文件闪退解决方法