|
@@ -6,6 +6,7 @@ import com.alipay.api.domain.AlipayTradePrecreateModel;
|
|
|
import com.alipay.api.request.AlipayTradePrecreateRequest;
|
|
import com.alipay.api.request.AlipayTradePrecreateRequest;
|
|
|
import com.alipay.api.response.AlipayTradePrecreateResponse;
|
|
import com.alipay.api.response.AlipayTradePrecreateResponse;
|
|
|
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request;
|
|
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request;
|
|
|
|
|
+import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderV3Result;
|
|
|
import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
|
|
import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
|
|
|
import com.github.binarywang.wxpay.service.WxPayService;
|
|
import com.github.binarywang.wxpay.service.WxPayService;
|
|
|
import com.xuekairui.common.BusinessException;
|
|
import com.xuekairui.common.BusinessException;
|
|
@@ -135,6 +136,7 @@ public class PaymentOrderService {
|
|
|
orderNo, userId, plan.getPlanName(), plan.getPrice(), channel.getDisplayName());
|
|
orderNo, userId, plan.getPlanName(), plan.getPrice(), channel.getDisplayName());
|
|
|
|
|
|
|
|
return OrderResponse.builder()
|
|
return OrderResponse.builder()
|
|
|
|
|
+ .type(miniAppPayParams != null ? "MINIAPP_PAY" : "QR_CODE")
|
|
|
.orderNo(orderNo)
|
|
.orderNo(orderNo)
|
|
|
.planName(plan.getPlanName())
|
|
.planName(plan.getPlanName())
|
|
|
.amount(order.getAmount())
|
|
.amount(order.getAmount())
|
|
@@ -192,6 +194,7 @@ public class PaymentOrderService {
|
|
|
log.info("切换支付渠道: orderNo={} 新渠道={}", orderNo, newChannel.getDisplayName());
|
|
log.info("切换支付渠道: orderNo={} 新渠道={}", orderNo, newChannel.getDisplayName());
|
|
|
|
|
|
|
|
return OrderResponse.builder()
|
|
return OrderResponse.builder()
|
|
|
|
|
+ .type(miniAppPayParams != null ? "MINIAPP_PAY" : "QR_CODE")
|
|
|
.orderNo(order.getOrderNo())
|
|
.orderNo(order.getOrderNo())
|
|
|
.planName(plan.getPlanName())
|
|
.planName(plan.getPlanName())
|
|
|
.amount(order.getAmount())
|
|
.amount(order.getAmount())
|
|
@@ -725,6 +728,10 @@ public class PaymentOrderService {
|
|
|
payer.setOpenid(openid);
|
|
payer.setOpenid(openid);
|
|
|
request.setPayer(payer);
|
|
request.setPayer(payer);
|
|
|
|
|
|
|
|
|
|
+ // JSAPI 下单 appId 必须为小程序自身的 appId(与 openid 的归属一致)
|
|
|
|
|
+ String jsapiAppId = resolveJsapiAppId(wc);
|
|
|
|
|
+ request.setAppid(jsapiAppId);
|
|
|
|
|
+
|
|
|
// 过期时间(RFC3339格式)
|
|
// 过期时间(RFC3339格式)
|
|
|
String timeExpire = java.time.format.DateTimeFormatter
|
|
String timeExpire = java.time.format.DateTimeFormatter
|
|
|
.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX")
|
|
.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX")
|
|
@@ -732,13 +739,14 @@ public class PaymentOrderService {
|
|
|
.plusMinutes(paymentProperties.getOrderExpireMinutes()));
|
|
.plusMinutes(paymentProperties.getOrderExpireMinutes()));
|
|
|
request.setTimeExpire(timeExpire);
|
|
request.setTimeExpire(timeExpire);
|
|
|
|
|
|
|
|
- // JSAPI 返回 prepay_id
|
|
|
|
|
- String prepayId = wxPayService.createOrderV3(TradeTypeEnum.JSAPI, request);
|
|
|
|
|
|
|
+ // JSAPI 下单:使用 unifiedOrderV3 直接获取 WxPayUnifiedOrderV3Result(含 prepay_id)
|
|
|
|
|
+ // 不能用 createOrderV3(泛型方法返回 JsapiResult,不继承 WxPayUnifiedOrderV3Result)
|
|
|
|
|
+ WxPayUnifiedOrderV3Result unifiedOrderResult =
|
|
|
|
|
+ wxPayService.unifiedOrderV3(TradeTypeEnum.JSAPI, request);
|
|
|
|
|
+ String prepayId = unifiedOrderResult.getPrepayId();
|
|
|
log.info("微信JSAPI预下单成功: orderNo={}, amount={}, prepayId={}", orderNo, amount, prepayId);
|
|
log.info("微信JSAPI预下单成功: orderNo={}, amount={}, prepayId={}", orderNo, amount, prepayId);
|
|
|
|
|
|
|
|
// 对支付参数进行签名,供小程序 wx.requestPayment 使用
|
|
// 对支付参数进行签名,供小程序 wx.requestPayment 使用
|
|
|
- // JSAPI 签名 appId 优先用 payment.miniapp.app-id,未配置时回退到 payment.wechat.app-id
|
|
|
|
|
- String jsapiAppId = resolveJsapiAppId(wc);
|
|
|
|
|
return buildMiniAppPayParams(jsapiAppId, prepayId, wxPayService);
|
|
return buildMiniAppPayParams(jsapiAppId, prepayId, wxPayService);
|
|
|
} catch (BusinessException e) {
|
|
} catch (BusinessException e) {
|
|
|
throw e;
|
|
throw e;
|
|
@@ -866,6 +874,7 @@ public class PaymentOrderService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return OrderResponse.builder()
|
|
return OrderResponse.builder()
|
|
|
|
|
+ .type(PaymentChannel.WECHAT_MINIAPP.name().equals(order.getChannel()) ? "MINIAPP_PAY" : "QR_CODE")
|
|
|
.orderNo(order.getOrderNo())
|
|
.orderNo(order.getOrderNo())
|
|
|
.planName(plan != null ? plan.getPlanName() : null)
|
|
.planName(plan != null ? plan.getPlanName() : null)
|
|
|
.amount(order.getAmount())
|
|
.amount(order.getAmount())
|