很久以来,一直想写一篇微信支付有关的总结文档;一方面是总结自己的一些心得,另一方面也可以帮助别人,但是因种种原因未能完全理解透彻微信支付的几大支付方式,今天有幸做一些总结上的文章,也趁此机会,将一年多以来的相关经验分享一下。
概述
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. 商户后台根据订单信息,调用微信统一下单接口;