微信Native支付流程

一、微信Native支付流程分析

微信支付平台
商户后台系统先调用微信支付的统一下单接口,微信后台系统返回链接参数code_url,商户后台系统将code_url值生成二维码图片,用户使用微信客户端扫码后发起支付。注意:code_url有效期为2小时,过期后扫码不能再发起支付。
在这里插入图片描述

业务流程说明:

(1)商户后台系统根据用户选购的商品生成订单。

(2)用户确认支付后调用微信支付【统一下单API】生成预支付交易;

(3)微信支付系统收到请求后生成预支付交易单,并返回交易会话的二维码链接code_url。

(4)商户后台系统根据返回的code_url生成二维码。

(5)用户打开微信“扫一扫”扫描二维码,微信客户端将扫码内容发送到微信支付系统。

(6)微信支付系统收到客户端请求,验证链接有效性后发起用户支付,要求用户授权。

(7)用户在微信客户端输入密码,确认支付后,微信客户端提交授权。

(8)微信支付系统根据用户授权完成支付交易。

(9)微信支付系统完成支付交易后给微信客户端返回交易结果,并将交易结果通过短信、微信消息提示用户。微信客户端展示支付交易结果页面。

(10)微信支付系统通过发送异步消息通知商户后台系统支付结果。商户后台系统需回复接收情况,通知微信后台系统不再发送该单的支付通知。

(11)未收到支付通知的情况,商户后台系统调用【查询订单API】。

(12)商户确认订单已支付后给用户发货。

二、了解统一下单接口

统一下单接口文档

注意属性表

后台项目添加常用属性标的配置文件,这些配置均由 不需要更改,直接使用接口,如果自己想配置,先申请公司,然后申请微信支付功能。

// admin-app/config/index.js
module.exports = {
   
  // 统一下单接口地址
  unifiedorder: 'https://api.mch.weixin.qq.com/pay/unifiedorder',
  // 公众账号ID
  appid: 'wx100749d4612ea385',
  // 商户号
  mch_id: '1448624302',
  // 支付结果的回调地址
  notify_url: 'https://walter666.cn/wxpay/notify',
  // 拼接API密钥
  key: 'T8NHKqOfKWtqZPnQm8K77PtQtaRXluU8'
}

三、后台接口根据用户选购的商品生成订单

根据统一下单接口添加必须的属性,前端只需要 产品的描述 + 产品的订单id + 交易的金额。

1.熟悉必须的属性表

属性 作用 备注
appid 公众号id 从配置中获取
mch_id 商户号 从配置中获取
nonce_str 随机字符串 随机字符串,长度要求在32位以内。推荐随机数生成算法
sign 签名 通过签名算法计算得出的签名值,详见签名生成算法
body 商品描述 商品简单描述,该字段请按照规范传递,具体请见参数规定
out_trade_no 商户订单号 商户系统内部订单号,要求32个字符内,只能是数字、大小写字母_-以及* 且在同一个商户号下唯一。
total_fee 标价金额 订单总金额,单位为分
notify_url 通知地址 从配置中获取
trade_type 交易类型 JSAPI -JSAPI支付NATIVE -Native支付APP -APP支付

2.生成随机字符串

微信支付API接口协议中包含字段nonce_str,主要保证签名不可预测。我们推荐生成随机数算法如下:调用随机数函数生成,将得到的值转换为字符串。

项目根目录下创建utils文件夹,在其下创建 tools.js

  • 安装随机字符串模块

cnpm i randomstring -S

// admin-app/utils/tools.js
var randomstring = require('randomstring')
exports.getNoncestr = () => {
   
    return randomstring.generate(32)
}

3.生产签名

签名生成的通用步骤如下:
第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。

特别注意以下重要规则:
◆ 参数名ASCII码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名;
◆ 参数名区分大小写;
◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段

第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。
◆ key设置路径:微信商户平台(pay.weixin.qq.com)–>账户设置–>API安全–>密钥设置

1.整合数据

在接口文件中先行准备数据
在这里插入图片描述

2.封装生成签名

// admin-app/utils/tools.js
var randomstring = require('randomstring');
var crypto = 
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值