微信小程序下订单支付代码实现

微信小程序下订单支付代码实现目录支付流程具体实现一、前端调用登录获取code二、服务端接收code,服务端调用微信api获取openId三、前端点击去支付时四、服务端请求微信统一下单接口五、前端获取到prePay_id调起支付六、注意支付流程点击去结算时,,前端判断是否登录【未登录跳转到登录页】,登录发送code到服务端,服务端使用code发送请求去获取openId;并返回userId/openId存储在storage;点击去支付时,前端发送请求【订单详细,openId】,服务器用openId去统一下单,下单成功后,获

大家好,又见面了,我是你们的朋友全栈君。

支付流程

  • 点击去结算时,,前端判断是否登录【未登录跳转到登录页】,登录发送code到服务端,服务端使用code发送请求去获取openId;并返回userId/openId存储在storage;

  • 点击去支付时,前端发送请求【订单详细,openId】,服务器用openId去统一下单,下单成功后,获取prePay_id,返回前端

  • 前端拿到 prePay_id 调起支付

在这里插入图片描述

具体实现

一、前端调用登录获取code

wx.login({ 
   
    success: function(res){ 
   
        if(res.code){ 
   
            // 发起请求
            wx.request({ 
   
                url: 'http://test.com/login',
                data: { 
   
                    code: res.code
                },
                success(result) { 
   
                    console.log(result.openId)
                    wx.setStorage('openId', result.openId)
                }
            })
        } else { 
   
            // 登录失败
        }
    }
})

二、服务端接收code,服务端调用微信api获取openId

文档 – auth.code2Session

GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

三、前端点击去支付时

前端点击去支付时,提交【openId,订单明细】到服务端进行下单

// 提交订单
commitOrder() { 
   
        let that = this
        if (!this.isLogin) { 
   
          this.toLogin()
        } else if (!this.currentAddress.addressId) { 
   
          wx.showToast({ 
   
            title: '请先选择地址',
            icon: 'none',
            duration: 1500,
            success() { 
   
              // 选择地址
            }
          })
        } else if(this.isLogin && this.currentAddress.addressId) 
          let details = [];
          (this.shopCartList).map(g => { 
   
            details.push({ 
   
              goodsId: g.goodsId,
              goodsNum: g.cartGoodNum,
              goodsPrice: g.goodsPrice
            })
          })
          let openId = wx.getStorageSync('openId')
          Api.creatOrder({ 
   
            query: { 
   
              addressId: this.currentAddress.addressId,
              openId: openId,
              appId: '',
              details: details,
              goodsMoney: this.totalMoney,
              orderNote: this.orderNote
            }
          }).then(res => { 
   
            if (res.data.code == '0') { 
   
              this.toPay({ 
   
                timeStamp: res.data.data.timeStamp.toString(),
                nonceStr: res.data.data.nonceStr,
                package: res.data.data.package,
                signType: res.data.data.signType,
                paySign: res.data.data.sign,
                orderId: res.data.data.orderId,
              })
            }
          })
        } else { 
   }
      },

四、服务端请求微信统一下单接口

服务端请求微信统一下单接口,下单成功获取到prePay_id值,返回前端

文档-https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_1

商户在小程序中先调用该接口(https://api.mch.weixin.qq.com/pay/unifiedorder)在微信支付服务后台生成预支付交易单,返回正确的预支付交易后,前端调起支付。

五、前端获取到prePay_id 调起支付

pay: function (param) { 
   
    wx.requestPayment({ 
   
      timeStamp: param.timeStamp,
      nonceStr: param.nonceStr,
      package: param.package,
      signType: param.signType,
      paySign: param.paySign,
      success: function (res) { 
   
        // success
        console.log(res)
        wx.navigateBack({ 
   
          delta: 1, // 回退前 delta(默认为1) 页面
          success: function (res) { 
   
            console.log(res)
          },
          fail: function () { 
   
            // fail
          },
          complete: function () { 
   
            // complete
            // 不论成功失败都跳转到订单页面,后台去查询支付结果
              wx.switchTab({ 
   
              	url: 'order',
              	success: function (res) { 
   
              }
            })
          }
        })
      }
    })
  }

六、注意

不能通过 wx.requestPayment 的success回调判断支付成功
支付完不点完成不操作不进成功

文档 – 查询订单

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135073.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • sublime text3 激活码(JetBrains全家桶)

    (sublime text3 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月27日
    99
  • sin的傅里叶变换公式_傅里叶变换的由来及复数下的傅里叶变换公式证明

    sin的傅里叶变换公式_傅里叶变换的由来及复数下的傅里叶变换公式证明1、考虑到一个函数可以展开成一个多项式的和,可惜多项式并不能直观的表示周期函数,由于正余弦函数是周期函数,可以考虑任意一个周期函数能否表示成为一系列正余弦函数的和。假设可以,不失一般性,于是得到:f(t)=A0+∑(n=1,∞)Ansin(nωt+Φn)2、将后面的正弦函数展开:Ansin(nωt+Φn)=AnsinΦncosnωt+AncosΦnsinnωt令a0/2=A0,an…

    2022年7月17日
    17
  • Python 中的几种copy用法「建议收藏」

    Python 中的几种copy用法「建议收藏」不知道在什么时候看到个好帖,觉得好就移过来了,学习学习。。。1.os.systemPythoncodePythoncode3.win32file.CopyFilePythoncodeP

    2022年7月5日
    21
  • pstack使用和原理[通俗易懂]

    pstack使用和原理[通俗易懂]pstack使用和原理http://www.cnblogs.com/mumuxinfei/p/4366708.html前言:  最近小组在组织深入剖析Nginx>>的读书会,里面作者提到了pstack这个工具.之前写JAVA程序,对jstack这个工具,非常的喜欢,觉得很有用.于是想比较下pstack和jstack的异同.   和jstack一样,psta

    2025年11月15日
    3
  • saga分布式事务_本地事务和分布式事务

    saga分布式事务_本地事务和分布式事务在分布式系统中一次操作需要由多个服务协同完成,这种由不同的服务之间通过网络协同完成的事务称为分布式事务。本文详解介绍七种常见分布式事务的原理以及优缺点和适用场景(2PC、3PC、TCC、Saga、本地事务表、MQ事务消息、最大努力通知)

    2025年11月12日
    2
  • resnet18[通俗易懂]

    resnet18[通俗易懂]前言在前篇vgg16之后,无法成功训练vgg16,发现是自己电脑可用的显存太低了,遂放弃。在2015ILSVRC&COCO比赛中,何恺明团队提出的Resnet网络斩获第一,这是一个经典的网络。李沐说过,如果要学习一个CNN网络,一定是残差网络Resnet。与VGG相比,Resnet则更加出色,为后续的研究做下铺垫这是Resnet论文翻译参考链接:https://blog.csdn.net/weixin_42858575/article/details/93305238在之前的神经

    2022年5月26日
    69

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号