@
应用场景
1,线下支付 2.公众号支付 3,微信小程序 4,pc网站 5,App的微信支付 6,H5的支付
选择不同支付场景,对应不同的API的使用。
付款码 | JSAPI | Native | H5 | APP | |
---|---|---|---|---|---|
线下场所 | √ | √ | |||
公众号 | √ | ||||
小程序 | √ | ||||
PC网站 | √ | √ | |||
移动端网站 | √ | √ | |||
第三方APP | √ |
微信小程序支付功能限制
在IOS端不能用于虚拟支付(充会员,购买音/视频)
微信小程序支付开发准备
准备流程
需要注册账号
个人的是不管用的
- 微信小程序账号(https://mp.wexin.qq.com)
(企业身份) 认证——>获取appid——>生成secret(密钥)——> 开通支付——> 关联商户号 - 微信商户平台账号(https://pay.weixin.qq.com)
(企业身份) 认证——> 获取商户号(mch_id)——> 设置商户API密钥(mck_key)32位(证书)——>
APPID授权 ——>配置支付接口(域名—>外网)
商户密钥自己设置(32位不能有特殊符号)
支付完成会收到微信官网发来的通知,要保证域名(外网可访问的)接受通知,在配置接口配置
微信小程序支付流程
- 用户下单点击支付
- 发启请求到后端服务器
- 后台商户服务器发送给微信后台一个登录操作
- 后台服务器就收微信后台返回的 Openid
- 使用 Openid 在商户后台生成一个商户订单
- 支付类型
- 金额
- 我是谁(openid)
- 商户
- 上述为基本订单参数,微信支付的参数采用为XML格式,所以要转为XML格式(加密,第一次签名)
- 将XML格式的商户订单发送给微信后台,校验参数
- 微信后台生成订单后会返回一个prepay_id给商户后台(也是要加密,第二次签名)
- 用户端接受生成的订单,然后调用WX.pay的api(调用后的操作微信回去做了)
- 支付成功后,微信后台回去修改订单状态,会修改为success
- 并且商户后台服务器要接受微信后台传递过来的支付情况和结果
- 获取success结果的订单后展示就可以做了发送给用户
商户后台逻辑(java)
这里使用的是Spring的项目创建工具
登录功能
后台服务器发送给微信后台服务器的是一个http请求,这里的话要用java
需要依赖httpclient
- 定义常量类,包含小程序appid/secret和商户mch_id和mch_key
public class WechatConstant {
public final static String MCH_ID = "test";
public final static String MCH_KEY = "自己设置的key";
public final static String APPID = "test";
public final static String SECRET = "test";
}
- 在pom.xml引入httpclient的依赖
<dependency>
<groupId>org.apache.httpcomponents/groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
- 创建基于httpclient的http请求工具类HttpRequestUtils
- 小程序端通过wx.login获取一个code
- 后端请求微信小程序登录API,获取openid
- 接受结果并通知微信收到结果
商户后台就收到结果时,要告知微信,否则微信会按一定的时间顺序发送多次通知。
官方支付SDK
微信提供给我们的一些方法
下载链接 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=11_1
下载完后我们会得到一份代码
大概目录简介
IWXPayDomain 动态域名的切换
WXPay封装 主要的类 它封装了我们所有的主要方法包括(加密签名)
WXPayConfig 是一个抽象类,配置一些默认值
WXPayConstants 一些相关的常量 (域名等)
WXPayReport 打印一些信息
WXPayRequest 封装http的工具类
WXPayUtil 封装了一些参数的转换mpa,和生成
WXPayXmlUtil wxpayxml的相关