|
@@ -15,7 +15,6 @@ import com.zanxiang.common.enums.OsEnum;
|
|
import com.zanxiang.common.exception.BaseException;
|
|
import com.zanxiang.common.exception.BaseException;
|
|
import com.zanxiang.module.util.JsonUtil;
|
|
import com.zanxiang.module.util.JsonUtil;
|
|
import com.zanxiang.module.util.URIUtil;
|
|
import com.zanxiang.module.util.URIUtil;
|
|
-import com.zanxiang.module.util.pojo.ResultVO;
|
|
|
|
import com.zanxiang.mybatis.entity.Order;
|
|
import com.zanxiang.mybatis.entity.Order;
|
|
import com.zanxiang.sdk.domain.bo.ProductPayParamBO;
|
|
import com.zanxiang.sdk.domain.bo.ProductPayParamBO;
|
|
import com.zanxiang.sdk.domain.dto.*;
|
|
import com.zanxiang.sdk.domain.dto.*;
|
|
@@ -36,7 +35,6 @@ import org.springframework.web.client.RestTemplate;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import java.net.URL;
|
|
import java.net.URL;
|
|
-import java.nio.charset.StandardCharsets;
|
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
import java.util.regex.Pattern;
|
|
@@ -54,23 +52,12 @@ public class AliPayService extends PayBaseService {
|
|
|
|
|
|
private Pattern param = Pattern.compile("value=\"(.*)\">", Pattern.CASE_INSENSITIVE);
|
|
private Pattern param = Pattern.compile("value=\"(.*)\">", Pattern.CASE_INSENSITIVE);
|
|
|
|
|
|
- /**
|
|
|
|
- * 异步回调地址配置
|
|
|
|
- */
|
|
|
|
- @Value("${payConfig.aliPay.returnUrl}")
|
|
|
|
- private String returnUrlConfig;
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* 同步回调地址配置
|
|
* 同步回调地址配置
|
|
*/
|
|
*/
|
|
@Value("${payConfig.aliPay.notifyUrl}")
|
|
@Value("${payConfig.aliPay.notifyUrl}")
|
|
private String notifyUrlConfig;
|
|
private String notifyUrlConfig;
|
|
|
|
|
|
- /**
|
|
|
|
- * 异步回调地址
|
|
|
|
- */
|
|
|
|
- private String returnUrl;
|
|
|
|
-
|
|
|
|
/**
|
|
/**
|
|
* 同步回调地址
|
|
* 同步回调地址
|
|
*/
|
|
*/
|
|
@@ -100,7 +87,6 @@ public class AliPayService extends PayBaseService {
|
|
//初始化支付配置
|
|
//初始化支付配置
|
|
this.configInit(gamePayWayDTO);
|
|
this.configInit(gamePayWayDTO);
|
|
//回调地址中拼接游戏具体支付方式
|
|
//回调地址中拼接游戏具体支付方式
|
|
- this.returnUrl = this.returnUrlConfig + "?" + "gamePayWayId=" + this.attach.getGamePayWayId();
|
|
|
|
this.notifyUrl = this.notifyUrlConfig + "?" + "gamePayWayId=" + this.attach.getGamePayWayId();
|
|
this.notifyUrl = this.notifyUrlConfig + "?" + "gamePayWayId=" + this.attach.getGamePayWayId();
|
|
//支付方式
|
|
//支付方式
|
|
int payDevice = product.getPayDevice().intValue();
|
|
int payDevice = product.getPayDevice().intValue();
|
|
@@ -119,11 +105,12 @@ public class AliPayService extends PayBaseService {
|
|
default:
|
|
default:
|
|
throw new RuntimeException("未知支付方式");
|
|
throw new RuntimeException("未知支付方式");
|
|
}
|
|
}
|
|
|
|
+ //订单支付添加过期缓存
|
|
|
|
+ this.orderExpire(product.getOutTradeNo());
|
|
//更新订单商户信息
|
|
//更新订单商户信息
|
|
orderService.update(new LambdaUpdateWrapper<Order>()
|
|
orderService.update(new LambdaUpdateWrapper<Order>()
|
|
.set(Order::getMerchantNo, payMerchant.getMerchantNo())
|
|
.set(Order::getMerchantNo, payMerchant.getMerchantNo())
|
|
.set(Order::getMerchantName, payMerchant.getMerchantName())
|
|
.set(Order::getMerchantName, payMerchant.getMerchantName())
|
|
- .set(Order::getStatus, OrderStateEnum.WAIT_PAY.getCode())
|
|
|
|
.eq(Order::getOrderId, product.getOutTradeNo()));
|
|
.eq(Order::getOrderId, product.getOutTradeNo()));
|
|
//返回结果
|
|
//返回结果
|
|
return resultMap;
|
|
return resultMap;
|
|
@@ -134,39 +121,57 @@ public class AliPayService extends PayBaseService {
|
|
|
|
|
|
log.error("支付宝异步回调 ------------>");
|
|
log.error("支付宝异步回调 ------------>");
|
|
|
|
|
|
|
|
+ //解密回调参数
|
|
|
|
+ Map<String, String> params = new HashMap<>(26);
|
|
|
|
+ Enumeration<String> parameterNames = request.getParameterNames();
|
|
|
|
+ while (parameterNames.hasMoreElements()) {
|
|
|
|
+ String parameterName = parameterNames.nextElement();
|
|
|
|
+ params.put(parameterName, request.getParameter(parameterName));
|
|
|
|
+ }
|
|
|
|
+ //订单号orderId
|
|
|
|
+ String orderNo = request.getParameter("out_trade_no");
|
|
|
|
+ //订单支付方式id
|
|
|
|
+ String gamePayWayId = params.get("gamePayWayId");
|
|
|
|
+ //订单支付结果
|
|
|
|
+ String tradeStatus = params.get("trade_status");
|
|
|
|
|
|
- try {
|
|
|
|
- Map<String, String> params = new HashMap<>();
|
|
|
|
- Enumeration<String> parameterNames = request.getParameterNames();
|
|
|
|
- while (parameterNames.hasMoreElements()) {
|
|
|
|
- String parameterName = parameterNames.nextElement();
|
|
|
|
- params.put(parameterName, request.getParameter(parameterName));
|
|
|
|
- }
|
|
|
|
- String orderNo = request.getParameter("out_trade_no");
|
|
|
|
- String gamePayWayId = params.get("gamePayWayId");
|
|
|
|
-
|
|
|
|
- log.error("支付宝异步回调获取到的参数, params : {}", JsonUtil.toString(params));
|
|
|
|
|
|
+ log.error("支付宝异步回调获取到的参数, params : {}", JsonUtil.toString(params));
|
|
|
|
|
|
- //回调地址拼接参数不参加sign验证
|
|
|
|
- params.remove("gamePayWayId");
|
|
|
|
- //初始化配置
|
|
|
|
- configInit(gamePayWayService.getById(Long.valueOf(gamePayWayId)));
|
|
|
|
- Boolean flag = Factory.Payment.Common().verifyNotify(params);
|
|
|
|
- if (flag) {
|
|
|
|
- if (paySuccess(orderNo, params.get("total_amount"), params.get("trade_no"))) {
|
|
|
|
- log.info("支付宝异步回调成功, orderId : {}", orderNo);
|
|
|
|
- return HttpStatusEnum.SUCCESS.getMsg();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- log.error("支付宝异步回调-验证签名失败 request:{}", request);
|
|
|
|
|
|
+ //回调地址拼接参数不参加sign验证
|
|
|
|
+ params.remove("gamePayWayId");
|
|
|
|
+ //初始化配置
|
|
|
|
+ this.configInit(gamePayWayService.getById(Long.valueOf(gamePayWayId)));
|
|
|
|
+ //支付宝签名认证
|
|
|
|
+ Boolean verifyNotify;
|
|
|
|
+ try {
|
|
|
|
+ verifyNotify = Factory.Payment.Common().verifyNotify(params);
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
- e.printStackTrace();
|
|
|
|
|
|
+ log.error("支付宝异步回调-验证签名异常 params : {}, e : {}", JsonUtil.toString(params), e.getMessage());
|
|
|
|
+ return HttpStatusEnum.FAIL.getMsg();
|
|
|
|
+ }
|
|
|
|
+ if (!verifyNotify) {
|
|
|
|
+ log.error("支付宝异步回调-验证签名失败, params : {}", JsonUtil.toString(params));
|
|
|
|
+ return HttpStatusEnum.FAIL.getMsg();
|
|
}
|
|
}
|
|
- return HttpStatusEnum.FAIL.getMsg();
|
|
|
|
|
|
+ //签名验证通过, 判断是否支付成功
|
|
|
|
+ if (Objects.equals("TRADE_SUCCESS", tradeStatus)) {
|
|
|
|
+ this.paySuccess(orderNo, params.get("total_amount"), params.get("trade_no"));
|
|
|
|
+ } else {
|
|
|
|
+ //未支付成功, 订单状态变更为待支付
|
|
|
|
+ orderService.update(new LambdaUpdateWrapper<Order>()
|
|
|
|
+ .set(Order::getStatus, OrderStateEnum.WAIT_PAY.getCode())
|
|
|
|
+ .eq(Order::getOrderId, orderNo));
|
|
|
|
+ }
|
|
|
|
+ return HttpStatusEnum.SUCCESS.getMsg();
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void closeOrder(PlatformOrderDTO platformOrderDTO) {
|
|
public void closeOrder(PlatformOrderDTO platformOrderDTO) {
|
|
|
|
+ //支付宝预下单的订单不需要关闭
|
|
|
|
+ if (Objects.equals(platformOrderDTO.getStatus(), OrderStateEnum.READY_PAY.getCode())) {
|
|
|
|
+ log.error("支付宝预下单订单, 不需要关闭");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
//支付配置
|
|
//支付配置
|
|
GamePayWayDTO gamePayWayDTO = gamePayWayService.getGamePayWay(platformOrderDTO.getGameId(),
|
|
GamePayWayDTO gamePayWayDTO = gamePayWayService.getGamePayWay(platformOrderDTO.getGameId(),
|
|
platformOrderDTO.getPayWayId(), platformOrderDTO.getPayDeviceId());
|
|
platformOrderDTO.getPayWayId(), platformOrderDTO.getPayDeviceId());
|