微信支付之扫码支付、公众号支付、H5支付、小程序支付相关业务流程分析总结

前言

很久以来,一直想写一篇微信支付有关的总结文档;一方面是总结自己的一些心得,另一方面也可以帮助别人,但是因种种原因未能完全理解透彻微信支付的几大支付方式,今天有幸做一些总结上的文章,也趁此机会,将一年多以来的相关经验分享一下。

概述

1. 扫码支付

商户在pc端展示一个支付二维码,用户使用微信扫一扫功能,扫码后实现付款的支付方式。

2. 公众号支付

商户在微信APP内(微信浏览器)打开H5网页,通过微信支付实现付款的支付方式。

3. H5支付

商户在微信浏览器以外的手机浏览器打开H5网页,通过微信支付实现付款的支付方式。

4. 小程序支付

商户在小程序内,通过微信支付实现付款功能的支付方式。

开发前准备

第一步,登录到商户平台设置相关参数配置

首先到微信商户平台申请一个企业账号,并开通微信支付,设置好相应的公众号支付、扫码支付、H5支付的相关参数配置。

其中,公众号支付需要设置JSAPI支付授权目录,且最多只能设置5个;

扫码支付需要设置扫码回调链接,既用户通过扫码支付完毕后微信回调到商户的页面链接;

H5支付则需要设置安全支付域名即可。

第二步,引入微信官方SDK

微信官方提供了一套Java、.NET、PHP等三个版本的开发SDK;我目前使用的是.NET,因此只需要下载.NTE的SDK即可。

地址:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1

下载完以后,在Visual Studio中打开项目,结构如下:

文件夹example是一些封装好的实例,lib跟business中的内容是SDK的核心部分,因此需要将这两个文件夹原样复制到我们实际的开发项目中:

业务流程

扫码支付

1. 用户下单,选择微信支付;

2. 商户后台根据订单信息,调用微信统一下单接口;

3. 统一下单接口返回预支付信息,商户后台将预支付信息通过技术手段生成二维码图片,并展示在网页中;

4. 用户使用微信扫码进行支付,输入支付密码;

5. 支付完成,微信后台向商户后台发出异步通知;

6. 商户后台接收到微信的异步通知后,获取相关参数,进行对应的业务处理,如修改订单状态,并返回SUCCESS或FAIL的标志以告知微信。

7. 微信向商户后台发送异步通知的同时,会向预先在商户平台设置的回调地址发起跳转,商户需在回调地址中获取相关参数并进行业务处理,一旦得知订单状态是已付款状态,则跳转至相应支付成功界面。

详细说明请看微信支付官方开发文档:

https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1

公众号支付

1. 用户下单,选择微信支付;

2. 商户后台根据订单信息,调用微信统一下单接口;

3. 统一下单接口返回预支付信息,商户后台获取预支付信息,并通过JSAPI发起支付请求,JSAPI调起微信支付;

4. 用户输入支付密码,支付完成;

5. 微信后台向商户后台发出异步通知,同时会在JSAPI发起页面返回支付信息;

6. 商户后台收到微信的异步通知,进行相关业务处理,并返回SUCCESS或FAIL的标志以告知微信。

7. 商户在JSAPI发起页面获取微信回调的信息,请求数据库获取订单状态,并进行支付成功或失败对应的页面跳转。

详细说明请看微信支付官方开发文档:

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1

H5支付

1. 用户下单,选择微信支付;

2. 商户后台根据appid向微信获取code参数,再通过code参数向微信换取openid参数;

3. 商户后台根据订单信息,调用微信统一下单接口;

4. 统一下单接口返回预支付信息,商户后台获取预支付信息中的mweb_url参数,该参数是调起微信支付的URL,商户后台根据实际需要决定是否在该URL中增加支付完成后的回调页面地址,然后跳转至该URL,即可调起微信支付。

5. 用户输入支付密码,支付完成。

6. 微信后台向商户后台发出异步通知,并跳转至支付发起页或回调页;

7. 商户后台在支付发起页或回调页面接收微信回调的信息,请求数据库获取订单状态,并进行支付成功或失败对应的页面跳转。

详细说明请看微信支付官方开发文档:

https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1

小程序支付

1. 用户在小程序内下单,选择微信支付;

2. 商户在小程序中调用小程序登录API,获得参数code;

3. 小程序端向商户后台发起接口调用,并将code及订单相关参数一起发送到商户后台。

4. 商户后台接收小程序发送的code和订单相关参数,并结合appid,secret两个参数,获取openid;

5. 商户后台根据订单信息,调用统一下单接口;

6. 统一下单接口返回预支付信息,商户后台获取预支付信息,并进行再次签名,返回支付参数(5个参数和sign)给小程序;

7. 小程序获得支付参数,发起支付请求;

8. 用户输入支付密码,支付完成;

9. 微信后台向商户后台发出异步通知,同时给小程序回调支付结果;

10.商户后台接收微信发送到异步通知,并进行相关业务处理,并返回SUCCESS或FAIL的标志以告知微信;

11.小程序获取支付回调结果,并向商户后台发起接口请求,获取订单状态;并进行支付成功或失败对应的页面跳转。

详细说明请看微信支付官方开发文档:

https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1

业务流程图

分析和总结

 

扫码支付、公众号支付、H5支付、小程序支付都有一个同步回调地址跟异步通知地址,只是设置方式有所区别 :

1. 扫码支付

同步回调地址在微信商户平台中设置,异步通知地址在统一下单接口的请求参数中设置;

2. 公众号支付

同步回调地址在JSAPI发起支付的回到函数中进行回到,异步通知地址在统一下单接口的请求参数中设置;

3. H5支付

同步回调地址:在统一下单接口的返回参数中有一个参数mweb_url,在mweb_url中以get传参形式新增一个参数redirect_url,redirect_url即是同步回调函数;

异步通知地址:统一下单接口的请求参数中设置;

4. 小程序支付

同步回调地址:在小程序获得支付参数,并通过js调起微信支付以后,js中会有一个回调函数,同步回调地址在该回调函数中添加;

异步通知地址:统一下单接口的请求参数中设置。

其中扫码支付主要用于电脑端;公众号支付跟H5支付主要用于移动端,因此商户在移动端使用微信支付的时候需要判断当前打开的浏览器是否是微信浏览器,并根据结果决定选择公众号支付或H5支付;小程序支付的话主要用于小程序内部,因此比如获取openid,调用统一下单接口等操作均在给小程序提供数据接口服务的接口后台实现。

同步回调地址是作为微信后台跟商户进行页面跳转的渠道,因此同步回调地址是至关重要的,如果不填写,则可能导致支付完成后无法做页面跳转。

异步通知地址是微信后台对商户后台在完成微信支付后进行通知的重要通道,商户后台的异步通知地址必须是可访问的,在接收到微信的通知后,要做相关业务处理,并最终返回SUCCESS或FAIL的标识给微信,以告知微信不要在发送通知。

结尾

这里只是针对微信扫码支付、公众号支付、H5支付、小程序支付等微信的四中支付方式做了一个大概的分析和总结,具体的每一个支付方式的接入方法还请以微信支付开发文档为重要参考;因篇幅有限,代码量大,这里就不贴具体的实现代码了。

参考文档:

微信扫码支付:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1

微信公众号支付:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1

微信H5支付:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1

微信小程序支付:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_3&index=1

如有发现错误及解释不当之处,欢迎大家指正。

转载请注明本文出处:https://www.cnblogs.com/luckyyang/p/9509631.html

原文地址:https://www.cnblogs.com/luckyyang/p/9509631.html

时间: 2024-12-20 14:25:11

微信支付之扫码支付、公众号支付、H5支付、小程序支付相关业务流程分析总结的相关文章

微信扫描二维码关注公众号登录网站

页面: @{ Layout = "~/Views/Shared/_Layout.cshtml";} <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtm

微信公众号模版消息与小程序消息推送不同场景不同应用

1.公众号-插件-模板消息 图1.1 图1.2 图1.3 2.小程序-模板消息 图2.1 图2.2 图2.3 3.区别   1.推送条数不同 公众号的消息推送(以下简称公推)可以采用接口在后台调用接口无限向用户推送消息 小程序的消息推送(一下简称微推)只能允许开发者向用户在7天内推送有限条数的模板消息(引用官方的话)解释过来是:很难实现无限制推送用户消息(但是可以实现) 2.出现位置不同 公推消息形式会在该公众号下,与微信消息等级相同(如图1.2形式) 微推且消息出现在位置如图2.2,在"服务通

微信公众号 跳转到小程序

微信公众号,点击菜单,跳转到小程序 官网链接:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141013 参数说明: { "type":"miniprogram", "name":"点我啊", "url":"http://mp.weixin.qq.com", "appid":"x

微信支付之扫码、APP、小程序支付接入详解

做电商平台的小伙伴都知道,支付服务是必不可少的一部分,今天我们开始就说说支付服务的接入及实现.目前在国内,几乎90%中小公司的支付系统都离不开微信支付和支付宝支付.那么大家要思考了,为什么微信支付和支付宝支付能作为大多数公司接入的首选呢?其实这个问题大多小伙伴应该是很清楚的,说白了就是人家有庞大的用户流量,目前微信在国内的用户已突破10亿,支付宝也接近8亿左右,如此庞大的用户群体,你还会选择其他的第三方支付(微博钱包.财付通.快钱等)吗,作为普通客户,大家都希望能方便快捷,谁会为了在一个平台买点

微信小程序、微信公众号、H5之间相互跳转

转自慕课网 一.小程序和公众号 答案是:可以相互关联. 在微信公众号里可以添加小程序. 图片有点小,我把文字打出来吧: 可关联已有的小程序或快速创建小程序.已关联的小程序可被使用在自定义菜单和模版消息等场景中. 公众号可关联同主体的10个小程序及不同主体的3个小程序.同一个小程序可关联最多50个公众号. 1.公众号跳小程序 比如说 "丰巢快递柜" 公众号关联的小程序:丰巢寄快递. 2.小程序跳公众号 打开"丰巢寄快递",点击右上角的菜单选项,然后点击"关于

[转]微信小程序、微信公众号、H5之间相互跳转

本文转自:https://www.cnblogs.com/colorful-paopao1/p/8608609.html 转自慕课网 一.小程序和公众号 答案是:可以相互关联. 在微信公众号里可以添加小程序. 图片有点小,我把文字打出来吧: 可关联已有的小程序或快速创建小程序.已关联的小程序可被使用在自定义菜单和模版消息等场景中. 公众号可关联同主体的10个小程序及不同主体的3个小程序.同一个小程序可关联最多50个公众号. 1.公众号跳小程序 比如说 “丰巢快递柜” 公众号关联的小程序:丰巢寄快

8. PHP接入微信的三种支付:APP支付、公众号支付、扫码支付

微信的支付逻辑与支付宝的支付有一些差别.为了让客户端忽略这些差别,统一调用.本sdk做了对应处理. # SDK调用 微信支付不同接口需要的参数会有差别.请大家在使用接口时,仔细查看文档. use Payment\ChargeContext; use Payment\Config; use Payment\Common\PayException; // 微信支付,必须设置时区,否则发生错误 date_default_timezone_set('Asia/Shanghai'); // 生成订单号 便

微信支付之扫码支付相关代码(Java)

最近开发网站过程,需要引入支付过程,第三方支付中最火的莫过于支付宝支付和微信支付,下边借助微信支付官网上的文档,写一下接入微信支付之扫码支付的流程 相对支付宝支付而言,微信支付的开发文档写的相当的low,demo写的一点都不简洁,下边写一下微信扫码支付的过程,这一过程中,需要注意的所涉及的实际业务是怎样的,根据实际情况结合业务进行引入,在进入正式开发之前,要申请微信支付的相关内容按照官网的操作进行即可,审核成功后,会得到appId,商户号,商户平台登录账号和密码 登录微信支付官网 https:/

微信支付----PC扫码支付(查询微信支付订单判断是否支付成功)

c#webapi建议前端轮番查询订单状态     #region  查询扫码订单状态         /// <summary>         /// 查询扫码支付状态         /// </summary>         /// <param name="out_trade_no">支付订单号</param>         /// <returns></returns>         [HttpGe