支付流程

  • 整个支付流程分为四个步骤:

    1. 获取令牌token

    2. 创建订单

    3. 预支付,获取支付参数对象pay

    4. 发起微信支付

    5. 收尾工作。跳转到订单页面,删除购物车中已购买的商品

  • 请求方式:POST

    整个支付过程中用到的网络请求较多,并且有很多的共性,建议封装到request.js中

  • 整个支付过程都要用try-catch包裹(我没有用)

[温馨提示]:支付流程中的url已失效

获取令牌token

  • 获取令牌token
  1. // 点击支付
  2. async handleOrderPay() {
  3. // 从缓存中获取token
  4. const token = wx.getStorageSync('token')
  5. // 如果token不存在,跳转到授权页面获取token
  6. if (!token) {
  7. wx.navigateTo({
  8. url: '/pages/auth/auth',
  9. })
  10. }
  1. <!-- 点击按钮获取用户信息 -->
  2. <button type="primary" plain open-type="getUserInfo" bindgetuserinfo="handleGetUserInfo">授权</button>
  • 缓存中不存在token,授权!
  1. // 授权操作
  2. // pages/auth/auth.js
  3. import {request} from '../../request/index.js' //网络请求
  4. import regeneratorRuntime from '../../lib/runtime/runtime' //使用es7语法
  5. import {login} from '../../utils/asyncWx.js' //内部封装了wx.login(),通过该方法获取一个必须参数code
  6. Page({
  7. // 获取用户信息
  8. async handleGetUserInfo(e) {
  9. try {
  10. // 获取小程序登录成功后的五个必须参数
  11. const {
  12. encryptedData,
  13. rawData,
  14. iv,
  15. signature
  16. } = e.detail
  17. const {
  18. code
  19. } = await login()
  20. // 将这五个参数存入loginParams自定义对象中
  21. const loginParams = {
  22. encryptedData,
  23. rawData,
  24. iv,
  25. signature,
  26. code
  27. }
  28. // 获取token
  29. const {
  30. token
  31. } = await request({
  32. url: '/users/wxlogin',
  33. // 传入这五个必须参数
  34. data: loginParams,
  35. method: 'POST'
  36. })
  37. // 将token存入缓存中,同时跳转到上一个页面
  38. wx.setStorageSync('token', token)
  39. wx.navigateBack({
  40. // delta表示返回的层级,1表示返回上一层,2表示返回上两层
  41. delta: 1,
  42. })
  43. } catch (error) {
  44. console.log(error)
  45. }
  46. }
  47. })

创建订单

  • 获取到5个必须参数
  1. // 创建订单
  2. // 请求头参数,这个参数会贯穿整个支付过程中的网络请求
  3. const header = {
  4. // 授权参数即为token
  5. Authorization: token
  6. }
  7. // 请求体参数
  8. const order_price = this.data.totalPrice //总价格
  9. const consignee_addr = this.data.address.all //详细收获地址
  10. const cart = this.data.cart
  11. let goods = [] //订单数组,从购物车中提取出几个所需要的属性组成的数组
  12. goods = cart.forEach(v => {
  13. goods_id: v.goods_id
  14. goods_number: v.num
  15. goods_price: v.goods_price
  16. })
  17. // 将所需要的订单参数存入orderParams
  18. const orderParams = {
  19. order_price,
  20. consignee_addr,
  21. goods
  22. }
  • 获取订单编号
  1. // 获取订单编号
  2. const {order_number} = await request({
  3. url: '/my/orders/create',
  4. method: 'POST',
  5. // 将之前获得的订单参数传入
  6. data: orderParams,
  7. header
  8. })
  9. console.log(order_number)
  10. }

预支付

  • 根据订单编号获取到支付参数对象pay
  1. const {pay} = await request({
  2. url: '/my/orders/req_unifiedorder',
  3. method: "POST",
  4. header,
  5. // 传入订单编号
  6. data: {
  7. order_number
  8. }
  9. })
  10. console.log('pay')

发起微信支付

  • 将支付参数pay传入到requestPayment中即可
  1. await requestPayment(pay)

收尾工作

  • 跳转到订单页面,同时删除购物车中以购买的商品
  1. await showToast('支付成功')
  2. // 删除缓存中已经被选中的商品
  3. let newCart = wx.getStorageSync('cart')
  4. newCart = newCart.filter(v => !v.checked)
  5. wx.setStorageSync('cart', newCart)
  6. // 此时跳转到订单页面
  7. wx.navigateTo({
  8. url: '/pages/order/order',
  9. })

微信小程序支付功能完整流程的更多相关文章

  1. 微信小程序支付功能前端流程

    只是分享一下小程序支付功能的前端流程和代码, 仅供参考(使用的是uni app). handleCreate () { /** 第一步:前台将商品数据发送到后台,后台创建订单入库并返回订单id等信息 ...

  2. 微信小程序支付功能 C# .NET开发

    微信小程序支付功能的开发的时候坑比较多,不过对于钱的事谨慎也是好事.网上关于小程序支付的实例很多,但是大多多少有些问题,C#开发的更少.此篇文档的目的是讲开发过程中遇到的问题做一个备注,也方便其他开发 ...

  3. 微信小程序支付及退款流程详解

    微信小程序的支付和退款流程 近期在做微信小程序时,涉及到了小程序的支付和退款流程,所以也大概的将这方面的东西看了一个遍,就在这篇博客里总结一下. 首先说明一下,微信小程序支付的主要逻辑集中在后端,前端 ...

  4. 实战:微信小程序支付开发具体流程

    来源:授权地址作者:会编码的熊 该文章纪录了我在开发小程序支付过程中的具体流程 1. 申请微信支付 小程序认证后进入微信支付申请小程序的微信支付 填写企业信息对公账户并上传凭证后,微信支付会打一笔随机 ...

  5. Python实现微信小程序支付功能

    由于最近自己在做小程序的支付,就在这里简单介绍一下讲一下用python做小程序支付这个流程.当然在进行开发之前还是建议读一下具体的流程,清楚支付的过程. 1.支付交互流程 当然具体的参数配置可以参考官 ...

  6. 微信小程序支付功能讲解(1)

    前言:虽然小程序做过很多,但是一直觉得微信支付功能很是神秘,现在终于有机会接触心里还是有点小激动的,经过一番折腾发现支付也不过如此,在此记录下支付功能的实现过程 小程序的官方文档介绍到发起微信支付即调 ...

  7. 微信小程序支付功能讲解(2)

    小程序支付 业务流程时序图 官方文档 步骤: 1. Openid 在小程序初次加载的时候就已经获取(详情见 小程序登录) 2. 生成商户订单 1.商品信息由小程序端提供 2.提供支付统一下单接口所需参 ...

  8. 微信小程序支付功能讲解

    前言:虽然小程序做过很多,但是一直觉得微信支付功能很是神秘,现在终于有机会接触心里还是有点小激动的,经过一番折腾发现支付也不过如此,在此记录下支付功能的实现过程 小程序的官方文档介绍到发起微信支付即调 ...

  9. 微信小程序 支付功能(前端)的实现

    只提供微信小程序端代码: var app = getApp(); Page({ data: {}, onLoad: function (options) { // 页面初始化 options为页面跳转 ...

随机推荐

  1. 攻防世界 reverse Replace

    Replace 湖湘杯2018 查壳upx,手动脱壳,修复IAT,去掉重定向便可以运行. ida查看,流程清晰.关键函数check_E51090. int __cdecl main(int argc, ...

  2. Java 学习记录

    •Eclipse相关 Eclipse常用设置 解决 Eclipse 项目中有红色感叹号的详细方法(图文) JRE System Library [JavaSE-1.8](unbound) •Java ...

  3. Linux常用命令-基础部分

    Linux介绍 Linux是一款开源的操作系统,免费,开源,安全,高效,处理高并发非常强悍,很多企业级开发项目都部署在Linux/UNIX上. 创始人:Linus Torvalds 林纳斯 Linux ...

  4. BUAA防脱发第一抗连——团队介绍

    项目 内容 这个作业属于哪个课程 2021学年春季软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-团队介绍 我在这个课程的目标是 锻炼在大规模开发中的团队协作能力 这个作业在哪个具体方面帮助我 ...

  5. 两种纯CSS方式实现hover图片pop-out弹出效果

    实现原理 主要图形的组成元素由背景和前景图两个元素,以下示例代码中,背景元素使用伪元素 figure::before 表示, 前景元素使用 figure img 表示,当鼠标 hover 悬浮至 fi ...

  6. Deployment常用命令

    // 查询详细信息,获取升级速度 kubectl describe deployments // 暂停升级 kubectl rollout pause deployment/deploymentngi ...

  7. IP Networks UVA - 1590

     Alex is administrator of IP networks. His clients have a bunch of individual IP addresses and he de ...

  8. Faiss源码剖析:类结构分析

    摘要:在下文中,我将尝试通过Faiss源码中各种类结构的设计来梳理Faiss中的各种概念以及它们之间的关系. 本文分享自华为云社区<Faiss源码剖析(一):类结构分析>,原文作者:HW0 ...

  9. canvas性能优化总结

    canvas的主要功能就是用来绘制内容,有时候为了给用户流畅的视觉感受,需要绘制的频率要求很高,这样对绘制的性能就有要求,那么怎么才能写出高性能的绘制代码呢. 尽可能少调用api 例如我们绘制一段线条 ...

  10. 软件调研——GoodNotes 5与Notability

    项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 作业要求 我在这个课程的目标是 积累软件开发经验,提高工程能力 这个作业在哪个具体方面帮助我实现目标 深入调 ...