|
@@ -18,6 +18,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.web.client.RestTemplate;
|
|
|
+import reactor.util.function.Tuple2;
|
|
|
+import reactor.util.function.Tuples;
|
|
|
|
|
|
import javax.crypto.Mac;
|
|
|
import javax.crypto.spec.SecretKeySpec;
|
|
@@ -87,33 +89,23 @@ public class MiPayService extends PayBaseService {
|
|
|
String sessionKey = userDTO.getSessionKey();
|
|
|
//获取米大师钱包余额
|
|
|
Long balance = this.midasGetBalance(openId, sessionKey);
|
|
|
- //返回参数
|
|
|
+ //返回充值参数
|
|
|
Map<String, Object> payParamMap = new HashMap<>(9);
|
|
|
- //余额充足, 直接扣除
|
|
|
- if (balance >= orderInfo.getAmount().longValue()) {
|
|
|
- String billNo = this.midasPay(openId, sessionKey, orderInfo.getAmount(), orderInfo.getOrderId());
|
|
|
- payParamMap.put("status", "0");
|
|
|
- payParamMap.put("billNo", billNo);
|
|
|
- //支付成功
|
|
|
- this.paySuccess(product.getOutTradeNo(), orderInfo.getAmount().toString(), config.getAppId());
|
|
|
- } else {
|
|
|
- //余额不足, 返回订单id, 前端调充值接口, 充值完后再继续支付
|
|
|
- payParamMap.put("currencyType", "CNY");
|
|
|
- payParamMap.put("mode", "game");
|
|
|
- payParamMap.put("zoneId", "1");
|
|
|
- payParamMap.put("offerId", config.getOfferId());
|
|
|
- payParamMap.put("env", String.valueOf(this.isSand));
|
|
|
- payParamMap.put("buyQuantity", orderInfo.getAmount().intValue());
|
|
|
- payParamMap.put("status", "1");
|
|
|
- payParamMap.put("balance", String.valueOf(balance));
|
|
|
- payParamMap.put("orderId", product.getOutTradeNo());
|
|
|
- payParamMap.put("platform", "android");
|
|
|
- //更新订单商户信息
|
|
|
- orderService.update(new LambdaUpdateWrapper<Order>()
|
|
|
- .set(Order::getMerchantNo, config.getOfferId())
|
|
|
- .set(Order::getStatus, OrderStateEnum.WAIT_PAY.getCode())
|
|
|
- .eq(Order::getOrderId, product.getOutTradeNo()));
|
|
|
- }
|
|
|
+ payParamMap.put("currencyType", "CNY");
|
|
|
+ payParamMap.put("mode", "game");
|
|
|
+ payParamMap.put("zoneId", "1");
|
|
|
+ payParamMap.put("offerId", config.getOfferId());
|
|
|
+ payParamMap.put("env", String.valueOf(this.isSand));
|
|
|
+ payParamMap.put("buyQuantity", orderInfo.getAmount().intValue());
|
|
|
+ payParamMap.put("status", "1");
|
|
|
+ payParamMap.put("balance", String.valueOf(balance));
|
|
|
+ payParamMap.put("orderId", product.getOutTradeNo());
|
|
|
+ payParamMap.put("platform", "android");
|
|
|
+ //更新订单商户信息
|
|
|
+ orderService.update(new LambdaUpdateWrapper<Order>()
|
|
|
+ .set(Order::getMerchantNo, config.getOfferId())
|
|
|
+ .set(Order::getStatus, OrderStateEnum.WAIT_PAY.getCode())
|
|
|
+ .eq(Order::getOrderId, product.getOutTradeNo()));
|
|
|
log.error("米大师支付返回参数 payParamMap : {}", JsonUtil.toString(payParamMap));
|
|
|
return payParamMap;
|
|
|
}
|
|
@@ -144,7 +136,7 @@ public class MiPayService extends PayBaseService {
|
|
|
return Long.valueOf(resultMap.get("balance"));
|
|
|
}
|
|
|
|
|
|
- private String midasPay(String openId, String sessionKey, BigDecimal amount, String orderId) {
|
|
|
+ private Tuple2<Long, String> midasPay(String openId, String sessionKey, BigDecimal amount, String orderId) {
|
|
|
//接口参数
|
|
|
Map<String, Object> postBodyMap = new HashMap<>(7);
|
|
|
postBodyMap.put("openid", openId);
|
|
@@ -169,7 +161,8 @@ public class MiPayService extends PayBaseService {
|
|
|
//调接口返回
|
|
|
String url = URIUtil.fillUrlParams(MiPayService.MI_PAY_HOST + MiPayService.PAY_URL, headParamMap, Boolean.FALSE);
|
|
|
Map<String, String> resultMap = this.miPayApi(url, postBody);
|
|
|
- return resultMap.get("bill_no");
|
|
|
+ //返回扣款参数
|
|
|
+ return Tuples.of(Long.valueOf(resultMap.get("balance")), resultMap.get("bill_no"));
|
|
|
}
|
|
|
|
|
|
private Map<String, String> miPayApi(String url, String postBody) {
|
|
@@ -264,13 +257,13 @@ public class MiPayService extends PayBaseService {
|
|
|
throw new BaseException("米大师游戏币不足, 无法扣除!");
|
|
|
}
|
|
|
//余额充足, 直接扣除
|
|
|
- String billNo = this.midasPay(openId, sessionKey, platformOrderDTO.getAmount(), platformOrderDTO.getOrderId());
|
|
|
+ Tuple2<Long, String> tuple2 = this.midasPay(openId, sessionKey, platformOrderDTO.getAmount(), platformOrderDTO.getOrderId());
|
|
|
//支付成功
|
|
|
- this.paySuccess(platformOrderDTO.getOrderId(), platformOrderDTO.getAmount().toString(), config.getAppId());
|
|
|
+ this.paySuccess(platformOrderDTO.getOrderId(), platformOrderDTO.getAmount().toString(), tuple2.getT2());
|
|
|
//返回参数
|
|
|
Map<String, Object> payParamMap = new HashMap<>(2);
|
|
|
payParamMap.put("status", "0");
|
|
|
- payParamMap.put("billNo", billNo);
|
|
|
+ payParamMap.put("billNo", tuple2.getT2());
|
|
|
return payParamMap;
|
|
|
}
|
|
|
|