|
@@ -31,6 +31,7 @@ import java.nio.charset.StandardCharsets;
|
|
import java.util.Enumeration;
|
|
import java.util.Enumeration;
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
+import java.util.Objects;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
import java.util.regex.Pattern;
|
|
|
|
|
|
@@ -194,41 +195,45 @@ public class AliPayService extends PayBaseService {
|
|
}
|
|
}
|
|
Matcher matcher = pattern.matcher(body);
|
|
Matcher matcher = pattern.matcher(body);
|
|
//解析短链
|
|
//解析短链
|
|
- if (matcher.find()) {
|
|
|
|
- String url = matcher.group();
|
|
|
|
- url = url.substring(8, url.length() - 2);
|
|
|
|
- Matcher paraMatcher = param.matcher(body);
|
|
|
|
- if (paraMatcher.find()) {
|
|
|
|
- String paramData = paraMatcher.group();
|
|
|
|
- paramData = paramData.substring(7, paramData.length() - 2);
|
|
|
|
- paramData = paramData.replace(""", "\"");
|
|
|
|
- String mobileClientUrl = HttpUtil.postDataUrl(url, "biz_content=" + paramData, null);
|
|
|
|
- String aliPayContentBody = HttpUtil.postData(mobileClientUrl, "");
|
|
|
|
- Matcher mobileClientMatcher = mobileClientParam.matcher(aliPayContentBody);
|
|
|
|
- String deepLinkAndroid = "alipays://platformapi/startApp?appId=20000125&orderSuffix=";
|
|
|
|
- String deepLinkIos = "alipay://alipayclient/?";
|
|
|
|
- if (mobileClientMatcher.find()) {
|
|
|
|
- String pageData = mobileClientMatcher.group() + "}";
|
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(pageData);
|
|
|
|
- Object invokeAliPayData = jsonObject.get("invokeAlipayData");
|
|
|
|
- String dataString = JSONObject.parseObject(invokeAliPayData.toString()).get("dataString").toString();
|
|
|
|
- deepLinkAndroid += URLEncoder.encode(dataString, Constants.UTF8);
|
|
|
|
- deepLinkIos += URLEncoder.encode(pageData, Constants.UTF8);
|
|
|
|
- if (product.getDeviceSystem().contains(OsEnum.SYSTEM_ANDROID.getOs())) {
|
|
|
|
- result.put("appLink", deepLinkAndroid);
|
|
|
|
- } else {
|
|
|
|
- result.put("appLink", deepLinkIos);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- return ResultMap.ok(product.getPayDevice(), result.get("appLink"), product.getOutTradeNo());
|
|
|
|
|
|
+ String deepLink = this.getDeepLink(matcher, body, product.getDeviceSystem());
|
|
|
|
+ //返回结果
|
|
|
|
+ return ResultMap.ok(product.getPayDevice(), deepLink, product.getOutTradeNo());
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
log.error("支付宝h5支付失败,meg : {}", e.getMessage());
|
|
log.error("支付宝h5支付失败,meg : {}", e.getMessage());
|
|
return ResultMap.error(HttpStatusEnum.FAIL.getMsg());
|
|
return ResultMap.error(HttpStatusEnum.FAIL.getMsg());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ private String getDeepLink(Matcher matcher, String body, String deviceSystem) throws Exception {
|
|
|
|
+ if (!matcher.find()) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ Matcher paraMatcher = param.matcher(body);
|
|
|
|
+ if (!paraMatcher.find()) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ String url = matcher.group();
|
|
|
|
+ url = url.substring(8, url.length() - 2);
|
|
|
|
+ String paramData = paraMatcher.group();
|
|
|
|
+ paramData = paramData.substring(7, paramData.length() - 2);
|
|
|
|
+ paramData = paramData.replace(""", "\"");
|
|
|
|
+ String mobileClientUrl = HttpUtil.postDataUrl(url, "biz_content=" + paramData, null);
|
|
|
|
+ String aliPayContentBody = HttpUtil.postData(mobileClientUrl, "");
|
|
|
|
+ Matcher mobileClientMatcher = mobileClientParam.matcher(aliPayContentBody);
|
|
|
|
+ if (!mobileClientMatcher.find()) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ String deepLinkAndroid = "alipays://platformapi/startApp?appId=20000125&orderSuffix=";
|
|
|
|
+ String deepLinkIos = "alipay://alipayclient/?";
|
|
|
|
+ String pageData = mobileClientMatcher.group() + "}";
|
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(pageData);
|
|
|
|
+ Object invokeAliPayData = jsonObject.get("invokeAlipayData");
|
|
|
|
+ String dataString = JSONObject.parseObject(invokeAliPayData.toString()).get("dataString").toString();
|
|
|
|
+ deepLinkAndroid += URLEncoder.encode(dataString, Constants.UTF8);
|
|
|
|
+ deepLinkIos += URLEncoder.encode(pageData, Constants.UTF8);
|
|
|
|
+ return Objects.equals(deviceSystem, OsEnum.SYSTEM_ANDROID.getOs()) ? deepLinkAndroid : deepLinkIos;
|
|
|
|
+ }
|
|
|
|
+
|
|
private ResultMap pcPay(ProductPayParamBO product) {
|
|
private ResultMap pcPay(ProductPayParamBO product) {
|
|
try {
|
|
try {
|
|
log.info("pc端支付生成,请求参数 bo:{}", product);
|
|
log.info("pc端支付生成,请求参数 bo:{}", product);
|