微信小程序支付功能完整流程记录(前端)

 更新时间:2023年02月18日 10:36:43   作者:雨滴2000  
微信小程序的商户系统一般是以接口的形式开发的,小程序通过调用与后端约定好的接口进行参数的传递以及数据的接收,下面这篇文章主要给大家介绍了关于微信小程序支付功能(前端)的相关资料,需要的朋友可以参考下

微信小程序中,常见付款给商家的场景,下面列出企业小程序中,从0起步完整微信支付流程。

一,注册微信支付商户号(由上级或法人注册)

接入微信支付 - 微信商户平台

此商户号,需要由主管及更上级领导进行注册,会成为公司收款账户(不是由前端程序员注册!!!不是由前端程序员注册!!!不是由前端程序员注册!!!)

注册非常简单,重点是需要提供企业资料,一般程序员没有权限获取这些材料,所以需要由上级注册

企业注册需要材料:营业执照对公银行账户信息法人身份证

二,注册小程序账号(由上级或者领导注册)

注册流程简单,企业一般注册为企业小程序,非个人,需要上传营业执照等。

小程序

三,登录商户号绑定小程序

登录之前注册好的商户账号,将当前小程序ID绑定至此商户,表明此小程序可以调用此商户支付相关接口。

微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式

四,后端工程师书写接口

返回核心数据如下:

"appId": "xxxx",
        "nonceStr": "xxxx",
        "packageValue": "prepay_id=xxxxx",
        "paySign": "xxxxxx",
        "signType": "MD5",
        "timeStamp": "xxxxxx"

这个接口是你们公司后端程序员自己写的接口,由后端工程师书写,JAVA,PHP,C++,NODE,.NET等...不是前端写!不是前端写!不是前端写!如果没有此接口就与后端工程师沟通,让他书写。

五,前端工程师调用接口

1. 获取openid(当前用户真实id)

openid为当前用户真实id,无法直接用任何接口获得,需要先调用微信login接口登录,获取登录凭证code,在通过此code(登录凭证,5分钟有效),向微信服务器换取用户openid。

原生小程序登录:

wx.login({
  success (res) {
    if (res.code) {
     // code: 用户登录凭证(有效期五分钟)
     // 使用 code 可以换取 openid、unionid、session_key 等核心信息
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

uniapp登录:

uni.login({
  provider: 'weixin',
  success (res) {
    if (res.code) {
     //code: 用户登录凭证(有效期五分钟)
     //使用 code 可以换取 openid、unionid、session_key 等核心信息
    } else {
      console.log('登录失败!' + res.errMsg)
    }
  }
})

发送请求调用微信官方接口,用code凭证换取用户openid(真实用户id)

原生小程序:wx.request     uniapp: uni.request, 流程无差别

uni.request({
  url: `https://api.weixin.qq.com/sns/jscode2session`, //微信官方接口
  data: {
    appid: '小程序appId',
    secret: '小程序密钥,在小程序appId下一行,放一块在',
    js_code: '刚才获取的code', 
    grant_type: 'authorization_code' //固定值
  },
  success: (res) => {
    //获取openid:用户真实唯一id
    console.log(res.data.openid);
  }
})

2. 调用公司后端接口,获取支付核心数据

// 调用后端接口
uni.request({
  url: '你们公司的后端接口地址,获取支付核心数据',
  method: 'POST',
  data: { 接口需要什么参数就传给接口,包含扣款金额,订单id等 },
  success(obj) {
    console.log(obj)
  }
})

此接口必须返回以下6个核心数据,都是由后台计算生成。

"appId": "xxxx",
        "nonceStr": "xxxx",
        "packageValue": "prepay_id=xxxxx",
        "paySign": "xxxxxx",
        "signType": "MD5",
        "timeStamp": "xxxxxx"

3. 调用微信官方支付接口,弹出支付界面

uni.request({
  url: '你们公司的后端接口地址,获取支付核心数据',
  method: 'POST',
  data: { 接口需要什么参数就传给接口,包含扣款金额,订单id等 },
  success(obj) {
 
    //调用微信官方支付接口弹出付款界面,输入密码扣款
    wx.requestPayment({
      timeStamp: obj.xxxx.timeStamp,  //后端返回的时间戳
      nonceStr:  obj.xxxx.nonceStr,   //后端返回的随机字符串
      package:  obj.xxxx.packageValue, //后端返回的prepay_id
      signType: 'MD5', //后端签名算法,根据后端来,后端MD5这里即为MD5
      paySign:  obj.xxxx.paySign,  //后端返回的签名
      success (res) {
        console.log('用户支付扣款成功', res)
      },
      fail (res) { 
        console.log('用户支付扣款失败', res)
      }
     })
 
  }
})

调用后,弹出付款界面,模拟器需要扫码支付。

点击真机调试会直接弹出微信付款界面。

六,总结

  • 前端调用uni.login/wx.login调用微信接口,获取code,code相当于临时身份证
  • 前端调公司后台获取openid的接口,获取openid
  • 前端调公司后台预支付接口,传递openid、商品id、商品单价、商品数量,获取那5个参数。【时间戳timeStamp,随机字符串nonceStr,预支付id package,签名算法signType,签名paySign】
  • 前端调用uni/wx.requestPayment调用微信支付方法,传递5个参数,获取支付结果(成功或失败)

到此这篇关于微信小程序支付功能完整流程的文章就介绍到这了,更多相关微信小程序支付流程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript之浏览器对象_动力节点Java学院整理

    JavaScript之浏览器对象_动力节点Java学院整理

    JavaScript可以获取浏览器提供的很多对象,并进行操作。下面通过本文给大家介绍JavaScript之浏览器对象的相关知识,一起看看吧
    2017-07-07
  • jQuery和JavaScript节点插入元素的方法对比

    jQuery和JavaScript节点插入元素的方法对比

    本文主要介绍jQuery与JavaScript节点的插入方法,以及他们的具体代码实现方法,大家可以对比下他们之间的不同,希望对大家编写代码有所帮助
    2016-11-11
  • javascript遇到html5的一些表单属性

    javascript遇到html5的一些表单属性

    这篇文章主要介绍了javascript遇到html5的一些表单属性的相关资料,需要的朋友可以参考下
    2015-07-07
  • 在uniapp中实现中英文切换的方法

    在uniapp中实现中英文切换的方法

    最近使用uniapp做了个APP,由于客户是巴西的,所以使用中文已经满足不了客户需求了,本打算直接使用英文开发算了,老板非要做成可以中英文切换的,没办法只能开干,需要的朋友可以参考下
    2023-11-11
  • JavaScript正则表达式和级联效果

    JavaScript正则表达式和级联效果

    正则表达式(regular expression)是一种字符串匹配的模式,用来检查一个字符串中是否包含指定模式的字符串。下面通过本文给大家分享JavaScript_正则表达式和级联效果,感兴趣的朋友一起看看吧
    2017-09-09
  • js setTimeout 参数传递使用介绍

    js setTimeout 参数传递使用介绍

    setTimeout的参数传递问题想必大家有所纠结,window.settimeout()方法要调用带参数的函数有两种方法,下面为大家详细介绍下,感兴趣的朋友可以参考下
    2013-08-08
  • JavaScript中undefined和is not defined的区别与异常处理

    JavaScript中undefined和is not defined的区别与异常处理

    这篇文章主要给大家介绍了关于JavaScript中undefined和is not defined的区别与异常处理的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-03-03
  • laydate时间日历插件使用方法详解

    laydate时间日历插件使用方法详解

    这篇文章主要为大家详细介绍了laydate时间日历插件的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • 如何让每个Http请求都自动带上token

    如何让每个Http请求都自动带上token

    这篇文章主要介绍了如何让每个Http请求都自动带上token问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • JS实现点击拉拽轮播图pc端移动端适配

    JS实现点击拉拽轮播图pc端移动端适配

    本文通过实例代码给大家介绍了JS点击拉拽轮播图pc端移动端适配 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09

最新评论