IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> (三)微信小程序云开发之微信支付全解 -> 正文阅读

[移动开发](三)微信小程序云开发之微信支付全解

前言

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

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

一、准备工作

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

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

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

二、捋捋流程

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

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

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

三、怼代码

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

let params = {
    "body": "随便写点啥都行",
    "outTradeNo": ORDER,    //订单号
    "spbillCreateIp": event.ip || "127.0.0.1",
    "totalFee": data.payment * 100,    //我用的元为单位,微信支付要求分
    "attach": '【' + data.product_name + '】商品支付',    //按你的需求写
    "nonceStr": ORDER     //这要求是个随机字符串,我订单号就能保证不重复,就直接用的(懒)
}

const res = await cloud.cloudPay.unifiedOrder({
    ...params,
    "subMchId": "商户号",
    "tradeType": 'JSAPI',
    "envId": "环境ID,可写可不写,我写了",
    "functionName": "payment"    //支付成功后执行的云函数名字,云函数必须要用这个名字
})

if (res.errCode === 0 && res.errMsg === "cloudPay.unifiedOrder:ok") {
    return SendData(res.payment)    //返回小程序端支付的参数
} else {
    return SendData(res.returnMsg, 200, false)    //报个错
}

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

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

wx.requestPayment({
    ...data,
    success() {
        //你需要的代码         
    },
    fail() {
        //你需要的代码          
})

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

const db = cloud.database()

// 云函数入口函数
exports.main = async (event, context) => {
  if (event['returnCode'] === 'SUCCESS' && event['resultCode'] === 'SUCCESS') {
    try {
      let {
        data
      } = await db.collection('order_shop_list')
        .where({
          order_number: event.outTradeNo
        })
        .get()
      if (data[0].status === 1) {
        let updated = await db.collection('order_shop_list')
          .where({
            order_number: event.outTradeNo
          })
          .update({
            data: {
              status: 2,
              payment: event.totalFee / 100,
              payment_time: new Date(),
            }
          })
        const _ = db.command
        let product = await db.collection('transaction_product_list')
          .doc(data[0].product_id)
          .update({
            data: {
              sales: _.inc(data[0].product_number),
              stock: _.inc(-data[0].product_number)
            }
          })
      }
    } catch (e) {
      console.error(e)
    }
  }
}

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

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

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

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

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

点赞!收藏!评论!

散会!

要有打赏更好,嘿嘿?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 19:17:25  更:2022-08-19 19:19:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 4:26:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码