diff --git a/suimangService/src/main/java/com/iformall/service/pay/service/pay/ali/page/AliPagePayAdapterService.java b/suimangService/src/main/java/com/iformall/service/pay/service/pay/ali/page/AliPagePayAdapterService.java index 6bf231b..48b63d3 100644 --- a/suimangService/src/main/java/com/iformall/service/pay/service/pay/ali/page/AliPagePayAdapterService.java +++ b/suimangService/src/main/java/com/iformall/service/pay/service/pay/ali/page/AliPagePayAdapterService.java @@ -43,10 +43,13 @@ public class AliPagePayAdapterService extends BaseAliPayAdapterService implement return null; } + //https://opendocs.alipay.com/open/270/105898 + //https://opendocs.alipay.com/open/270/01didh?ref=api @Override public PayAdapterResult createPay(ProductOrderPay orderPay, WxAppinfo appInfo, WxPayAccount payAccount) throws Exception { - AlipayClient alipayClient = maUtil.getAliPayClient(appInfo, payAccount); + //AlipayClient alipayClient = maUtil.getAliPayClient(appInfo, payAccount); + AlipayClient alipayClient = maUtil.getAliPayCertClient(appInfo, payAccount); AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); //异步接收地址,仅支持http/https,公网可访问 request.setNotifyUrl(payAccount.getNotifyUrl() + "/" + appInfo.getProjectType() +"/aliNotify"); @@ -73,7 +76,8 @@ public class AliPagePayAdapterService extends BaseAliPayAdapterService implement request.setBizContent(bizContent.toString()); try{ - AlipayTradePagePayResponse response = alipayClient.pageExecute(request); + //AlipayTradePagePayResponse response = alipayClient.pageExecute(request); + AlipayTradePagePayResponse response = alipayClient.certificateExecute(request); log.info("ali创建支付返回{}"+ JSON.toJSONString(response)); PayAdapterResult par = new PayAdapterResult(); if(response.isSuccess()){ diff --git a/suimangService/src/main/java/com/iformall/utils/MaUtil.java b/suimangService/src/main/java/com/iformall/utils/MaUtil.java index c8af211..db3a25e 100644 --- a/suimangService/src/main/java/com/iformall/utils/MaUtil.java +++ b/suimangService/src/main/java/com/iformall/utils/MaUtil.java @@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.AlipayConfig; +import com.alipay.api.CertAlipayRequest; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.request.AlipayTradePagePayRequest; import com.alipay.api.response.AlipayTradePagePayResponse; @@ -315,7 +316,7 @@ public class MaUtil { alipayConfig.setAlipayPublicKey(payAccount.getMerchantApiKey()); alipayConfig.setSignType("RSA2"); - String key = appinfo.getAppId(); + String key = appinfo.getAppId()+"_byPublicKey"; AlipayClient alipayClient = alipayClientMap.get(key); if(alipayClient == null){ synchronized("getAliPayClientBlock"+appinfo.getAppId()) { @@ -335,5 +336,42 @@ public class MaUtil { } return alipayClient; } + + public AlipayClient getAliPayCertClient(WxAppinfo appinfo, WxPayAccount payAccount) { + + CertAlipayRequest certAlipayRequest = new CertAlipayRequest(); + certAlipayRequest.setServerUrl("https://openapi.alipay.com/gateway.do"); + certAlipayRequest.setAppId(appinfo.getAppId()); + certAlipayRequest.setPrivateKey(appinfo.getSecret()); + certAlipayRequest.setFormat("json"); + certAlipayRequest.setCharset("UTF-8"); + certAlipayRequest.setSignType("RSA2"); + certAlipayRequest.setCertPath(payAccount.getMerchantCertPath()); + certAlipayRequest.setAlipayPublicCertPath(payAccount.getMerchantKeyPath()); + certAlipayRequest.setRootCertPath(payAccount.getMerchantCertPemPath()); + + String key = appinfo.getAppId()+"_byCert"; + AlipayClient alipayClient = alipayClientMap.get(key); + if(alipayClient == null){ + synchronized("getAliPayClientBlock"+appinfo.getAppId()) { + alipayClient = alipayClientMap.get(key); + if (null == alipayClient) { + try { + alipayClient = new DefaultAlipayClient(certAlipayRequest); + alipayClientMap.put(key, alipayClient); + } catch (AlipayApiException e) { + e.printStackTrace(); + } + } + } + } + if(alipayClient == null){ + throw new MallinkException(ErrorCode.APP_PLAT_ERROR.getCode(),"获取支付配置失败"); + } + + // 提交数据至支付宝时请使用 + //alipayClient.certificateExecute(request); + return alipayClient; + } }