支付宝初始化
初始化客户端
AliPayApiConfig aliPayApiConfig = AliPayApiConfig.builder()
.setAppId(aliPayBean.getAppId())
.setAppCertPath(aliPayBean.getAppCertPath())
.setAliPayCertPath(aliPayBean.getAliPayCertPath())
.setAliPayRootCertPath(aliPayBean.getAliPayRootCertPath())
.setCharset("UTF-8")
.setPrivateKey(aliPayBean.getPrivateKey())
.setAliPayPublicKey(aliPayBean.getPublicKey())
.setServiceUrl(aliPayBean.getServerUrl())
.setSignType("RSA2")
// 普通公钥方式
//.build();
// 证书模式
.buildByCert();
// 或者
.setAppId(aliPayBean.getAppId())
.setAliPayPublicKey(aliPayBean.getPublicKey())
.setCharset("UTF-8")
.setPrivateKey(aliPayBean.getPrivateKey())
.setServiceUrl(aliPayBean.getServerUrl())
.setSignType("RSA2")
.build(); // 普通公钥方式
.build(appCertPath, aliPayCertPath, aliPayRootCertPath) // 2.3.0 公钥证书方式
AliPayApiConfigKit.setThreadLocalAppId(aliPayBean.getAppId()); // 2.1.2 之后的版本,可以不用单独设置
AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
当然支付接口中也不用每次都设置 AliPayApiConfig 可以通过 AliPayApiConfigKit.getApiConfig
来获取 AliPayApiConfig
注意
2.1.2 之后的版本,可以不用单独设置 AliPayApiConfigKit.setThreadLocalAppId(aliPayBean.getAppId());
多应用无缝切换
IJPay 中默认是使用当前线程中的 appId 对应的配置,如果要切换应用可以调用 AliPayApiConfigKit.setThreadLocalAppId
来设置当前线程中的
appId 实现应用的切换进而达到多应用的支持。
注意
调用 AliPayApiConfigKit.setThreadLocalAppId
之前需要确保缓存中存在此 appId 对应的配置 AliPayApiConfig ,如果没有可以通过
AliPayApiConfigKit.putApiConfig(aliPayApiConfig)
或者 AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig)
来添加,后者同时设置了当前线程中的 appId
代码示例
多应用支持,JFinal 完整版示例代码
/**
* @Email javendev@126.com
* @author Javen
*/
public class AliPayApiInterceptor implements Interceptor {
AlipayService alipayService = new AlipayService();
AppService appService = new AppService();
AjaxResult ajax = new AjaxResult();
@Override
public void intercept(Invocation inv) {
Controller controller = inv.getController();
String appId = controller.getPara("appId");
if (StrKit.isBlank(appId)) {
controller.renderJson(ajax.addError("应用的编号不能为空"));
return;
}
//判断应用是否存在
App app = appService.getAppByAppId(appId, 1);
AliPayApiConfig aliPayApiConfig = null;
if (app !=null) {
// 通过应用的appId查询支付宝的配置
Alipay alipay = alipayService.getAlipayByAppId(appId);
if (alipay != null) {
try {
aliPayApiConfig = AliPayApiConfigKit.getApiConfig(alipay.getAppId());
} catch (Exception e) {
LogKit.error("实例化AliPayApiConfig...");
// 如果Map中没有当前支付宝的实例就初始化并添加到Map中
aliPayApiConfig = AliPayApiConfig.New()
.setAppId(alipay.getAppId())
.setAlipayPublicKey(alipay.getPublicKey())
.setCharset(IJPayConsts.CHARSET)
.setPrivateKey(alipay.getPrivateKey())
.setServiceUrl(alipay.getServerUrl())
.setSignType(IJPayConsts.SIGN_TYPE)
.build();
}
}
}
if (aliPayApiConfig != null) {
AliPayApiConfigKit.setThreadLocalAppId(aliPayApiConfig.getAppId());// 2.1.2 之后的版本,可以不用单独设置
AliPayApiConfigKit.setThreadLocalAliPayApiConfig(aliPayApiConfig);
controller.setAttr("app", app);
inv.invoke();
} else {
LogKit.error("aliPayApiConfig is null");
controller.renderJson(ajax.addError("此应用暂未配置支付宝支付的参数"));
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
← IJPay 中的支付宝支付 扩展接口 →