当前位置:   article > 正文

(三)微信小程序云开发之微信支付全解_微信小程序支付功能开发

微信小程序支付功能开发

前言

项目基本开发完成,之后逐步会出一些之前评论或者私信的大家问的问题,最近比较忙,稍安勿躁,下面开始正题。

微信支付】无论是云开发还是常规开发支付都是避不开的一个功能,面试小程序相关的岗位的时候也很喜欢问支付相关的流程。

一、准备工作

首先要注册小程序(好像是个废话,没小程序看这个干啥)而且需要企业主体,个人主体不能玩支付,然后需要注册一个商户号,最后将商户号和小程序绑定到一起,网上都有教程,这里就不重复说了,搜一下都出来了。

需要注意的是,前面如果都完成了,还需要在开发者工具中--其他设置--微信支付配置中授权

如果都完成了,下面我们开始吧~

二、捋捋流程

怼代码之前看一下微信开发文档中的CloudPay.unifiedOrder()点这里 ,这是云开发的,如果是常规开发就别看了,诶,常规开发看这个干啥......

稍等我画个流程图马上回来......

大致流程就是这样,比较抽象,下面看代码

三、怼代码

(1)订单信息存库我就不给大家看了,每个项目所需的数据不一样,没啥借鉴的,直接看统一下单

  1. let params = {
  2. "body": "随便写点啥都行",
  3. "outTradeNo": ORDER, //订单号
  4. "spbillCreateIp": event.ip || "127.0.0.1",
  5. "totalFee": data.payment * 100, //我用的元为单位,微信支付要求分
  6. "attach": '【' + data.product_name + '】商品支付', //按你的需求写
  7. "nonceStr": ORDER //这要求是个随机字符串,我订单号就能保证不重复,就直接用的(懒)
  8. }
  9. const res = await cloud.cloudPay.unifiedOrder({
  10. ...params,
  11. "subMchId": "商户号",
  12. "tradeType": 'JSAPI',
  13. "envId": "环境ID,可写可不写,我写了",
  14. "functionName": "payment" //支付成功后执行的云函数名字,云函数必须要用这个名字
  15. })
  16. if (res.errCode === 0 && res.errMsg === "cloudPay.unifiedOrder:ok") {
  17. return SendData(res.payment) //返回小程序端支付的参数
  18. } else {
  19. return SendData(res.returnMsg, 200, false) //报个错
  20. }

这是阉割版的代码demo,但是足以运行起来,其他的根据各位需求自己写就好

(2)之后是小程序端代码,拿到res.payment之后直接调requestPayment,就很简单直接塞进去就行,data就是上边返回的res.payment一点没改。

  1. wx.requestPayment({
  2. ...data,
  3. success() {
  4. //你需要的代码
  5. },
  6. fail() {
  7. //你需要的代码
  8. })

 (3)创建另一个云函数,名字就是统一下单时候再functionName中填写的名字,这个云函数主要用户等待腾讯服务器返回支付结果,只要返回成功就改变订单状态

  1. const db = cloud.database()
  2. // 云函数入口函数
  3. exports.main = async (event, context) => {
  4. if (event['returnCode'] === 'SUCCESS' && event['resultCode'] === 'SUCCESS') {
  5. try {
  6. let {
  7. data
  8. } = await db.collection('order_shop_list')
  9. .where({
  10. order_number: event.outTradeNo
  11. })
  12. .get()
  13. if (data[0].status === 1) {
  14. let updated = await db.collection('order_shop_list')
  15. .where({
  16. order_number: event.outTradeNo
  17. })
  18. .update({
  19. data: {
  20. status: 2,
  21. payment: event.totalFee / 100,
  22. payment_time: new Date(),
  23. }
  24. })
  25. const _ = db.command
  26. let product = await db.collection('transaction_product_list')
  27. .doc(data[0].product_id)
  28. .update({
  29. data: {
  30. sales: _.inc(data[0].product_number),
  31. stock: _.inc(-data[0].product_number)
  32. }
  33. })
  34. }
  35. } catch (e) {
  36. console.error(e)
  37. }
  38. }
  39. }

(4)当returnCode和resultCode返回为SUCCESS时就支付成功了,returnCode是请求的状态码并不是支付的成功标识,resultCode才是支付成功,之前没注意,订单状态就一直变来变去的。

敲黑板【邦邦邦】,划重点了啊

从用户支付后微信服务器会一直请求这个等待反馈的云函数,无论是云开发还是普通开发都会遇到,所以需要自己处理这些多余的请求。

我之前没处理,销量和下单数量一直对不上,才发现这个问题,买了一单,销量-6,-8,-12,-14我都方了

我不知道其他人怎么做的。我想的办法就是只要成功就改变订单状态,只要腾讯服务器请求先判断订单状态是不是未支付,如果是就改,不是就不改,销量也不动

点赞!收藏!评论!

散会!

要有打赏更好,嘿嘿 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/266838
推荐阅读
相关标签
  

闽ICP备14008679号