全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  java技术干货  >  详情

开发实操|微信支付流程图文详解

来源:千锋教育
发布人:syq
2023-01-18

推荐

  1. 微信支付介绍

  微信支付是腾讯集团旗下的第三方支付平台。微信支付为各类企业以及小微商户提供专业的收款能力,运营能力,资金结算解决方案,以及安全保障。用户可以使用微信支付来购物、吃饭、旅游、就医、交水电费等。企业、商品、门店、用户已经通过微信连在了一起,让智慧生活,变成了现实。

微信支付流程

  查看各种类型支付的场景

  2. 支付产品介绍

  2.1 JSAPI支付

  JSAPI支付是指商户通过调用微信支付提供的JSAPI接口,在支付场景中调起微信支付模块完成收款。应用场景有:线下场所:调用接口生成二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付公众号场景:用户在微信公众账号内进入商家公众号,打开某个主页面,完成支付PC网站场景:在网站中展示二维码,用户扫描二维码后在微信浏览器中打开页面后完成支付

  示例

  线下场所:

1 (1)

  公众号场景:

2 (1)

  PC网站场景:

3 (1)

  2.2 Native支付

  Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。该模式适用于PC网站、实体店单品或订单、媒体广告支付等场景。

  示例

4 (1)

  2.3 APP支付

  APP支付是指商户通过在移动端应用APP中集成开放SDK调起微信支付模块来完成支付。适用于在移动端APP中集成微信支付功能的场景。

5 (1)

  2.4 付款码支付

  付款码支付是指用户展示微信钱包内的“付款码”给商户系统扫描后直接完成支付,适用于线下场所面对面收银的场景,例如商超、便利店、餐饮、医院、学校、电影院和旅游景区等具有明确经营地址的实体场所。

6 (1)

  2.5 H5支付

  H5支付是指商户在微信客户端外的移动端网页展示商品或服务,用户在前述页面确认使用微信支付时,商户发起本服务呼起微信客户端进行支付。主要用于触屏版的手机浏览器请求微信支付的场景。可以方便的从外部浏览器唤起微信支付。

7 (1)

  开发文档使用H5支付可参考指引:H5支付APIv3开发文档、H5支付APIv2开发文档

  2.6 刷脸支付

  微信刷脸支付适用于线下各个场景,对于不方便拿出手机等支付场景尤为方便。在支持微信刷脸支付的机器上,用户可以选择刷脸完成支付,方便、快捷又安全 。你可以申请官方设备>>或者购买官方设备>>

  示例

8 (1)

  3.微信支付接入指引

  3.1 接入指引

9 (1)

  3.2 申请材料

  个体工商户

  1、营业执照:彩色扫描件或数码照片

  2、对公银行账户/法人对私账户:包含开户行省市信息,开户账号

  3、法人身份证:彩色扫描件或数码照片

  企业

  1、营业执照:彩色扫描件或数码照片

  2、组织机构代码证:彩色扫描件或数码照片,若已三证合一,则无需提供

  3、对公银行账户:包含开户行省市信息,开户账号4、法人身份证:彩色扫描件或数码照片

  党政、机关、事业单位、民办非企业、社会团体、基金会

  1、营业执照:彩色扫描件或数码照片

  2、组织机构代码证:彩色扫描件或数码照片,若已三证合一,则无需提供

  3、对公银行账户:包含开户行省市信息,开户账号4、法人身份证:彩色扫描件或数码照片

  3.3 申请流程

10 (1)

  3.3.1 提供资料

  商户接入微信支付一共三步

  (个体工商户)接入微信支付需要哪些资料?

  (企业)接入微信支付需要哪些资料?

  (政府机关)如何提交接入申请资料?

  (社会组织)如何提交接入申请资料?

  (事业单位)如何提交接入申请资料?

  接入微信:

11 (1)

12 (1)

  3.3.2 签署协议

  我们提交的资料经过1-2个工作日审核后,会将我们之前扫描微信的超级管理员发送签署协议。微信支付申请资料审核通过后,超级管理员需进行签约后,才可获得正式交易权限和商户平台各项产品能力。平台共提供2种签约方式:

  方式一: 手机签约

  1、审核通过后,待签约模版消息会通过“微信支付商家助手”公众号推送给超级管理员。

  2、点击消息进入签约页面,核对商户信息和阅读协议后,点击签署,即可完成签约。

  方式二:电脑签约

  1. 访问微信支付商户平台,使用申请单的超级管理员微信扫码登录。

  2.手机确认后,电脑上会展示签约页面,核对商户信息和阅读协议后,点击签署,即可完成签约。

  另外,因商户的微信支付交易发起依赖于公众号、小程序、移动应用(即APPID)与微信支付商户号(即MCHID)的绑定关系, 所以,还需在签约后登录对应APPID平台完成绑定关系确认。

  3.3.3 绑定场景

  appid 和商户号绑定使用商户微信号登录,进入产品中心--》appID账号管理----》关联AppID新增授权,授权绑定APPID,将我们的开发者AppID进行输入将微信公众号和商户号进行绑定

  1.获取商户号

13 (1)

  2.注册微信公众号

  微信公众号配置

  3.微信商户绑定公众号

14 (1)

15 (1)

16 (1)

  3.3.4 API安全配置

  1. 申请API证书

  2.设置APIv2密钥

  3.设置APIv3密钥

  操作流程:

17 (1)

18 (1)

  3.3.5 签约产品

  签约产品的目的,其实和我们支付宝之前说的支付能力是一样的。就是我们签约了那种支付方式,就具有那种支付的能力,仔细品味其实就是赋予我们一种支付的权限。

19 (1)

  3.3.6 配置回调地址

  配置回调地址的目的是,当微信平台支付完成后,会像我们的地址发送一个请求。我们根据微信发回的请求信息,对我们的业务逻辑进行判定。这里需要注意的:如果是Native支付(二维码支付),一定需要配置支付回调链接。如果是小程序JSAPI的话,配置公司域名即可,或者不配置也行。

20 (1)

  4.微信支付项目

  4.1 需求描述

  针对于微信项目,我们选择使用微信的方式完成订单的支付。具体包括:

  ①项目的结构构建

  ②微信APIV3的介绍

  ③微信支付模块引入项目

  ④Native方式支付

  4.2 Native支付API及流程介绍

  商户Native支付下单接口,微信后台系统返回链接参数code_url,商户后台系统将code_url值生成二维码图片,用户使用微信客户端扫码后发起支付。

  业务流程时序图

  4.2.1 Native下单API

  接口说明

  适用对象:直连商户

  请求方式:POST

  path指该参数为路径参数

  query指该参数需在请求URL传参

  body指该参数需在请求JSON传参

  请求参数

21

  请求示例

  JSON

22

  返回参数

23

  返回示例

  正常示例

24

  错误码公共错误码

25

  4.5 Native支付

  商户端发起支付请求,微信端创建支付订单并生成支付二维码链接,微信端将支付二维码返回给商户端,商户端显示支付二维码,用户使用微信客户端扫码后发起支付

  4.5.1 下单的控制器

26

  4.5.2 下单Service服务

  WxPayService接口

  public interface WxPayService {

  //本地下单

  Map<string, object=""> nativePay() throws IOException;

  //查询状态

  Order queryAndUpdate(String orderNo);

  }

  WxPayServiceImpl实现

27

  更新订单的codeUrl

  修改OrderService接口

28

  OrderServiceImpl实现

29

  4.5.3 下单前台实现

  下单前台(展示二维码)

  1.main.html 下单页面引入二维码js

  思路描述: 前台点击支付-->发送ajax请求到后台(创建订单,设置codeUrl)--->返回codeUrl-->回调函数中生成二维码---> 创建一个定时查询后台订单状的方法(每5秒发送一次请求,目的是微信支付成功后,后台会更新订单的状态)--->前台定时器不断查询,得到订单状态后可以关闭二维码。

30

31

  4.5.4 异步通知接收

  1.编写解析请求工具类

  添加工具类HttpUtils 处理微信发送到应用请求

  该用具解析微信发给我们的请求

32

  2.编写验签的工具类

  因此我们获取到验签的类WechatPay2ValidatorForRequest

  controller包中创建该类

33

  3.开启nattap内网穿透

  在application.yml中配置异步通知地址

  # 注意:每次重新启动ngrok,都需要根据实际情况修改这个配置 notify-domain: xxxxx编写通知的WxPayController中的方法

34

  这里的通知设计到验签操作:

35

  4.5.5 支付报文解密

  下面详细描述对通知数据进行解密的流程:

  1.用商户平台上设置的APIv3密钥【微信商户平台—>账户设置—>API安全—>设置APIv3密钥】,记为key;

  2.针对resource.algorithm中描述的算法(目前为AEAD_AES_256_GCM),取得对应的参数nonce和associated_data;

  3.使用key、nonce和associated_data,对数据密文resource.ciphertext进行解密,得到JSON形式的资源对象;

  注:AEAD_AES_256_GCM算法的接口细节,请参考rfc5116。微信支付使用的密钥key长度为32个字节,随机串nonce长度12个字节, associated_data长度小于16个字节并可能为空字符串。

  WxPayService接口

36

  WxPayServiceImpl

37

  通过解密数据,得到tradeNo,我们可以根据tradeNo得到order,从而修改订单的状态

  WxPayController 中对于nativeNotify方法进行更新。

38

相关文章

java两个日期比较相差多少天

2023-06-27

javasubstring截取字符串的用法?

2023-06-25

find命令查找文件

2023-06-16

如何添加Java环境变量

2023-06-08

随机函数rand怎么使用

2023-04-20

什么是单体架构?单体架构有什么优缺点

2023-04-11
在线咨询 免费试学 教程领取