文章目录
一、微信支付环境搭建
- 微信支付必须开通两个账号:
微信小程序账号
与微信商户平台账号
- 涉及到支付功能只能是公司,个人是不能玩支付功能,即个人的微信小程序号是不能开通微信支付功能的
- 支付在线文档:https://pay.weixin.qq.com/wiki/doc/api/index.html
1 企业微信小程序的开通
- 要认证:认证需要缴费
- 获取
appid
:小程序的身份标识 - 生成
secret
:生成后需要保存后
- 开通支付功能
- 关联商户号
2. 企业商户号的开通
- 要认证
- 获取商户号:
mch_id
- 设置商户API秘钥:
mch_key
- APPID授权
- 配置支付接口
3 小程序号与商户号关联
二、微信小程序的支付流程
1 JSAPI
支付流程
-
微信小程序
JSAPI支付
的在线文档:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4
-
一个简单的流程如下
-
在实际项目开发中分为
小程序开发
与后台服务器的开发
2 微信小程序获取openid
- 微信小程序的支付需要使用到
openid
,获取openid
有两种方式微信小程序
携带code登录开发者服务器
,开发者服务器
请求微信服务器
获取到openid
,再将openid
响应给微信小程序- 直接使用微信小程序的云开发功能获取到
openid
- 使用上述的第一种方式拿到
openid
,流程如下:
- 微信小程序的登录代码
wx.login({
// 1. 微信小程序 → 微信服务器: 拿到临时凭证 code
success: res => {
// 2. 微信服务器 → 微信小程序: 返回结果
if(res.code) {
wx.request({
// 3. 微信小程序 → 开发者服务器: 目的: 使用code换取openid
url: 'http://ycom.free.idcfengye.com/wechat/requestOpenId',
data: {
// 请求参数
code:res.code
},
success: res=>{
// 4. 开发者服务器 → 微信小程序: 返回结果
if(res.data.openid) {
wx.setStorage({
// 5. 将开发者服务器返回的opneid存储起来, 之后的支付需要用到openid
key: 'openid',
data: res.data.openid
})
}
}
})
}
}
});
- 开发者服务器后代代码
/**
* 小程序请求openid
* 获取 openid 微信小程序的身份标识
* 1. 小程序发送请求给开发者服务器
* 2. 开发者服务器发送请求给微信服务器
* 3. 微信服务器响应开发者服务器的请求
* 4. 开发者服务器响应微信小程序的请求
* 5. 微信小程序拿到了openid
*
* @param code 临时code, 小程序传过来的
* @return 给小程序返回openid
*/
@GetMapping("/requestOpenId")
@ResponseBody
private Object requestOpenId(String code) {
CloseableHttpClient httpclient = null;
CloseableHttpResponse response = null;
try {
httpclient = HttpClients.createDefault();
URI uri = new URIBuilder("https://api.weixin.qq.com/sns/jscode2session")
.