@NotNull | @NotNull | ||||
private TradeType tradeType;//交易方式 | private TradeType tradeType;//交易方式 | ||||
protected String appid;//应用ID | |||||
@NotBlank | |||||
protected String appid;//应用ID spAppid;服务商应用ID | |||||
protected String spAppid;//服务商应用ID | |||||
protected String spMchId;//服务商商户号 | |||||
protected String subAppid;//子商户应用ID | protected String subAppid;//子商户应用ID | ||||
protected String subMchId;//子商户商户号 | protected String subMchId;//子商户商户号 | ||||
@NotBlank | @NotBlank | ||||
private String description;//商品描述 | private String description;//商品描述 | ||||
@NotBlank | @NotBlank | ||||
private String type;//场景类型,示例值:iOS, Android, Wap | private String type;//场景类型,示例值:iOS, Android, Wap | ||||
@NotBlank | @NotBlank | ||||
protected String mchid;//直连商户号 | |||||
protected String mchid;//直连商户号 spMchId服务商商户号 | |||||
@NotBlank | @NotBlank | ||||
private String apiV3Key; // API V3密钥 | private String apiV3Key; // API V3密钥 | ||||
@NotBlank | @NotBlank | ||||
public void validate(ErrorMsgBuilder builder) { | public void validate(ErrorMsgBuilder builder) { | ||||
if (createType == 1){ | if (createType == 1){ | ||||
builder.validFieldNotBlank("appid", appid); | |||||
// builder.validFieldNotBlank("mchid", mchid); | // builder.validFieldNotBlank("mchid", mchid); | ||||
if (TradeType.JSAPI.equals(tradeType)) { | if (TradeType.JSAPI.equals(tradeType)) { | ||||
builder.validFieldNotBlank("openid", openid); | builder.validFieldNotBlank("openid", openid); | ||||
} | } | ||||
} | } | ||||
if (createType == 2){ | if (createType == 2){ | ||||
builder.validFieldNotBlank("spAppid", spAppid); | |||||
builder.validFieldNotBlank("spMchId", spMchId); | |||||
builder.validFieldNotBlank("subMchId", subMchId); | builder.validFieldNotBlank("subMchId", subMchId); | ||||
if (TradeType.JSAPI.equals(tradeType)) { | if (TradeType.JSAPI.equals(tradeType)) { | ||||
builder.validField("notBlank", "spOpenid/subOpenid", | builder.validField("notBlank", "spOpenid/subOpenid", |
* @Filename:AtsCreatPayOrder | * @Filename:AtsCreatPayOrder | ||||
* @description: | * @description: | ||||
*/ | */ | ||||
//@Getter | |||||
//@Setter | |||||
@Data | @Data | ||||
public class AtsCreatPayOrderV3Response extends AbstractAtsResponse { | public class AtsCreatPayOrderV3Response extends AbstractAtsResponse { | ||||
/** 外部订单号 */ | /** 外部订单号 */ | ||||
private String externalOrderNo; | private String externalOrderNo; | ||||
// // APP,JSAPI参数 | |||||
// private String appId; //支付渠道应用ID | |||||
// private String partnerId;//商户号 | |||||
// private String prepayId;//预支付交易会话ID | |||||
// private String wxPackage;//订单详情扩展字符串 | |||||
// private String noncestr;//随机字符串 | |||||
// private String timestamp;//时间戳 | |||||
// private String sign;//签名 | |||||
// //JSAPI参数 | |||||
// private String signType;//签名方式 | |||||
// // H5参数 | |||||
// private String h5Url; | |||||
// private String form;// 支付宝响应表单 | |||||
// // Native参数 | |||||
// private String codeUrl; | |||||
// private String tranPackage;// 支付宝预下单请求生成的二维码码串 | |||||
//JSAPI支付参数 | //JSAPI支付参数 | ||||
private String signType; | private String signType; | ||||
private String paySign; | private String paySign; | ||||
//app | //app | ||||
// private String appid; | |||||
// private String noncestr; | |||||
// private String timestamp; | |||||
private String partnerId;//商户号 | private String partnerId;//商户号 | ||||
private String prepayId;//预支付交易会话ID | private String prepayId;//预支付交易会话ID | ||||
private String sign; | private String sign; | ||||
private String timeStamp; | private String timeStamp; | ||||
private String nonceStr; | private String nonceStr; | ||||
private String packageValue;//订单详情扩展字符串 | private String packageValue;//订单详情扩展字符串 | ||||
//h5参数 | //h5参数 | ||||
private String h5Url; | private String h5Url; | ||||
// Native参数 | // Native参数 |
private TradeType tradeType;//交易方式 | private TradeType tradeType;//交易方式 | ||||
@NotBlank | @NotBlank | ||||
protected String mchid;//直连商户号 | |||||
protected String mchid;//直连商户号 spMchid;服务商户号 | |||||
@NotBlank | @NotBlank | ||||
private String apiV3Key; // API V3密钥 | private String apiV3Key; // API V3密钥 | ||||
@NotBlank | @NotBlank | ||||
@NotBlank | @NotBlank | ||||
private String serialNo;// 商户证书序列号 | private String serialNo;// 商户证书序列号 | ||||
private String spMchid;//服务商户号 | |||||
private String subMchid;//子商户号 | private String subMchid;//子商户号 | ||||
@Override | @Override | ||||
protected void validate(ErrorMsgBuilder builder) { | protected void validate(ErrorMsgBuilder builder) { | ||||
if (createType == 2){ | if (createType == 2){ | ||||
builder.validFieldNotBlank("spMchid", spMchid); | |||||
builder.validFieldNotBlank("subMchid", subMchid); | builder.validFieldNotBlank("subMchid", subMchid); | ||||
} | } | ||||
* + 服务商 | * + 服务商 | ||||
*/ | */ | ||||
private String appid;//公众账号ID -是 | |||||
private String appid;//公众账号ID - spAppid+是 | |||||
private String mchid;//商户号 -是 | |||||
private String mchid;//商户号 - spMchid+是 | |||||
private String outTradeNo;//商户订单号 是 | private String outTradeNo;//商户订单号 是 | ||||
private String currency;//货币类型 否 | private String currency;//货币类型 否 | ||||
//==========================================服务商 | //==========================================服务商 | ||||
private String spAppid;//服务商APPID +是 | |||||
private String spMchid;//服务商商户号 +是 | |||||
private String subAppid;//子商户APPID +否 | private String subAppid;//子商户APPID +否 | ||||
private String subMchid;//子商户号 +是 | private String subMchid;//子商户号 +是 | ||||
private String spOpenid;// 用户服务商标识 +否 | private String spOpenid;// 用户服务商标识 +否 |
private AtsCreatPayOrderV3Response getPrepayNativeResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) { | private AtsCreatPayOrderV3Response getPrepayNativeResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) { | ||||
NativePayService nativeService = new NativePayService.Builder().config(config).build(); | NativePayService nativeService = new NativePayService.Builder().config(config).build(); | ||||
com.wechat.pay.java.service.partnerpayments.nativepay.model.PrepayRequest request = new com.wechat.pay.java.service.partnerpayments.nativepay.model.PrepayRequest(); | com.wechat.pay.java.service.partnerpayments.nativepay.model.PrepayRequest request = new com.wechat.pay.java.service.partnerpayments.nativepay.model.PrepayRequest(); | ||||
request.setSpAppid(req.getSpAppid()); | |||||
request.setSpMchid(req.getSpMchId()); | |||||
request.setSpAppid(req.getAppid()); | |||||
request.setSpMchid(req.getMchid()); | |||||
request.setSubAppid(req.getSubAppid()); | request.setSubAppid(req.getSubAppid()); | ||||
request.setSubMchid(req.getSubMchId()); | request.setSubMchid(req.getSubMchId()); | ||||
request.setDescription(req.getDescription()); | request.setDescription(req.getDescription()); | ||||
private AtsCreatPayOrderV3Response getPrepayAppResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) { | private AtsCreatPayOrderV3Response getPrepayAppResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) { | ||||
AppServiceExtension appService = new AppServiceExtension.Builder().config(config).build(); | AppServiceExtension appService = new AppServiceExtension.Builder().config(config).build(); | ||||
com.wechat.pay.java.service.partnerpayments.app.model.PrepayRequest request = new com.wechat.pay.java.service.partnerpayments.app.model.PrepayRequest(); | com.wechat.pay.java.service.partnerpayments.app.model.PrepayRequest request = new com.wechat.pay.java.service.partnerpayments.app.model.PrepayRequest(); | ||||
request.setSpAppid(req.getSpAppid()); | |||||
request.setSpMchid(req.getSpMchId()); | |||||
request.setSpAppid(req.getAppid()); | |||||
request.setSpMchid(req.getMchid()); | |||||
request.setSubAppid(req.getSubAppid()); | request.setSubAppid(req.getSubAppid()); | ||||
request.setSubMchid(req.getSubMchId()); | request.setSubMchid(req.getSubMchId()); | ||||
request.setDescription(req.getDescription()); | request.setDescription(req.getDescription()); | ||||
sceneInfo.setPayerClientIp(req.getPayerClientIp()); | sceneInfo.setPayerClientIp(req.getPayerClientIp()); | ||||
request.setSceneInfo(sceneInfo); | request.setSceneInfo(sceneInfo); | ||||
} | } | ||||
com.wechat.pay.java.service.partnerpayments.app.model.PrepayWithRequestPaymentResponse prepay = appService.prepayWithRequestPayment(request, req.getSpAppid()); | |||||
com.wechat.pay.java.service.partnerpayments.app.model.PrepayWithRequestPaymentResponse prepay = appService.prepayWithRequestPayment(request, req.getAppid()); | |||||
AtsCreatPayOrderV3Response orderV3Response = new AtsCreatPayOrderV3Response(); | AtsCreatPayOrderV3Response orderV3Response = new AtsCreatPayOrderV3Response(); | ||||
orderV3Response.setAppId(prepay.getAppid()); | orderV3Response.setAppId(prepay.getAppid()); | ||||
orderV3Response.setPartnerId(prepay.getPartnerId()); | orderV3Response.setPartnerId(prepay.getPartnerId()); | ||||
private AtsCreatPayOrderV3Response getPrepayJsapiResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) { | private AtsCreatPayOrderV3Response getPrepayJsapiResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) { | ||||
JsapiServiceExtension jsapiService = new JsapiServiceExtension.Builder().config(config).build(); | JsapiServiceExtension jsapiService = new JsapiServiceExtension.Builder().config(config).build(); | ||||
PrepayRequest request = new PrepayRequest(); | PrepayRequest request = new PrepayRequest(); | ||||
request.setSpAppid(req.getSpAppid()); | |||||
request.setSpMchid(req.getSpMchId()); | |||||
request.setSpAppid(req.getAppid()); | |||||
request.setSpMchid(req.getMchid()); | |||||
request.setSubAppid(req.getSubAppid()); | request.setSubAppid(req.getSubAppid()); | ||||
request.setSubMchid(req.getSubMchId()); | request.setSubMchid(req.getSubMchId()); | ||||
request.setDescription(req.getDescription()); | request.setDescription(req.getDescription()); | ||||
} | } | ||||
request.setAttach(req.getAttach()); | request.setAttach(req.getAttach()); | ||||
//请求 | //请求 | ||||
PrepayWithRequestPaymentResponse prepay = jsapiService.prepayWithRequestPayment(request, req.getSpAppid()); | |||||
PrepayWithRequestPaymentResponse prepay = jsapiService.prepayWithRequestPayment(request, req.getAppid()); | |||||
AtsCreatPayOrderV3Response orderV3Response = new AtsCreatPayOrderV3Response(); | AtsCreatPayOrderV3Response orderV3Response = new AtsCreatPayOrderV3Response(); | ||||
orderV3Response.setAppId(prepay.getAppId()); | orderV3Response.setAppId(prepay.getAppId()); | ||||
orderV3Response.setTimeStamp(prepay.getTimeStamp()); | orderV3Response.setTimeStamp(prepay.getTimeStamp()); | ||||
private AtsCreatPayOrderV3Response getPrepayMwebResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) { | private AtsCreatPayOrderV3Response getPrepayMwebResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) { | ||||
H5Service h5Service = new H5Service.Builder().config(config).build(); | H5Service h5Service = new H5Service.Builder().config(config).build(); | ||||
com.wechat.pay.java.service.partnerpayments.h5.model.PrepayRequest request = new com.wechat.pay.java.service.partnerpayments.h5.model.PrepayRequest(); | com.wechat.pay.java.service.partnerpayments.h5.model.PrepayRequest request = new com.wechat.pay.java.service.partnerpayments.h5.model.PrepayRequest(); | ||||
request.setSpAppid(req.getSpAppid()); | |||||
request.setSpMchid(req.getSpMchId()); | |||||
request.setSpAppid(req.getAppid()); | |||||
request.setSpMchid(req.getMchid()); | |||||
request.setSubAppid(req.getSubAppid()); | request.setSubAppid(req.getSubAppid()); | ||||
request.setSubMchid(req.getSubMchId()); | request.setSubMchid(req.getSubMchId()); | ||||
request.setDescription(req.getDescription()); | request.setDescription(req.getDescription()); | ||||
com.wechat.pay.java.service.partnerpayments.nativepay.NativePayService service = new com.wechat.pay.java.service.partnerpayments.nativepay.NativePayService.Builder().config(config).build(); | com.wechat.pay.java.service.partnerpayments.nativepay.NativePayService service = new com.wechat.pay.java.service.partnerpayments.nativepay.NativePayService.Builder().config(config).build(); | ||||
com.wechat.pay.java.service.partnerpayments.nativepay.model.QueryOrderByOutTradeNoRequest request = new com.wechat.pay.java.service.partnerpayments.nativepay.model.QueryOrderByOutTradeNoRequest(); | com.wechat.pay.java.service.partnerpayments.nativepay.model.QueryOrderByOutTradeNoRequest request = new com.wechat.pay.java.service.partnerpayments.nativepay.model.QueryOrderByOutTradeNoRequest(); | ||||
request.setOutTradeNo(req.getExternalOrderNo()); | request.setOutTradeNo(req.getExternalOrderNo()); | ||||
request.setSpMchid(req.getSpMchid()); | |||||
request.setSpMchid(req.getMchid()); | |||||
request.setSubMchid(req.getSubMchid()); | request.setSubMchid(req.getSubMchid()); | ||||
com.wechat.pay.java.service.partnerpayments.nativepay.model.Transaction transaction = service.queryOrderByOutTradeNo(request); | com.wechat.pay.java.service.partnerpayments.nativepay.model.Transaction transaction = service.queryOrderByOutTradeNo(request); | ||||
AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); | AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); | ||||
response.setAppid(transaction.getSpAppid()); | |||||
response.setMchid(transaction.getSpMchid()); | |||||
if (transaction.getPayer() != null) { | if (transaction.getPayer() != null) { | ||||
response.setSpOpenid(transaction.getPayer().getSpOpenid()); | response.setSpOpenid(transaction.getPayer().getSpOpenid()); | ||||
response.setSubOpenid(transaction.getPayer().getSubOpenid()); | response.setSubOpenid(transaction.getPayer().getSubOpenid()); | ||||
com.wechat.pay.java.service.partnerpayments.app.model.QueryOrderByOutTradeNoRequest request = | com.wechat.pay.java.service.partnerpayments.app.model.QueryOrderByOutTradeNoRequest request = | ||||
new com.wechat.pay.java.service.partnerpayments.app.model.QueryOrderByOutTradeNoRequest(); | new com.wechat.pay.java.service.partnerpayments.app.model.QueryOrderByOutTradeNoRequest(); | ||||
request.setOutTradeNo(req.getExternalOrderNo()); | request.setOutTradeNo(req.getExternalOrderNo()); | ||||
request.setSpMchid(req.getSpMchid()); | |||||
request.setSpMchid(req.getMchid()); | |||||
request.setSubMchid(req.getSubMchid()); | request.setSubMchid(req.getSubMchid()); | ||||
com.wechat.pay.java.service.partnerpayments.app.model.Transaction transaction = appService.queryOrderByOutTradeNo(request); | com.wechat.pay.java.service.partnerpayments.app.model.Transaction transaction = appService.queryOrderByOutTradeNo(request); | ||||
AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); | AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); | ||||
response.setAppid(transaction.getSpAppid()); | |||||
response.setMchid(transaction.getSpMchid()); | |||||
if (transaction.getPayer() != null) { | if (transaction.getPayer() != null) { | ||||
response.setSpOpenid(transaction.getPayer().getSpOpenid()); | response.setSpOpenid(transaction.getPayer().getSpOpenid()); | ||||
response.setSubOpenid(transaction.getPayer().getSubOpenid()); | response.setSubOpenid(transaction.getPayer().getSubOpenid()); | ||||
com.wechat.pay.java.service.partnerpayments.jsapi.model.QueryOrderByOutTradeNoRequest request = | com.wechat.pay.java.service.partnerpayments.jsapi.model.QueryOrderByOutTradeNoRequest request = | ||||
new com.wechat.pay.java.service.partnerpayments.jsapi.model.QueryOrderByOutTradeNoRequest(); | new com.wechat.pay.java.service.partnerpayments.jsapi.model.QueryOrderByOutTradeNoRequest(); | ||||
request.setOutTradeNo(req.getExternalOrderNo()); | request.setOutTradeNo(req.getExternalOrderNo()); | ||||
request.setSpMchid(req.getSpMchid()); | |||||
request.setSpMchid(req.getMchid()); | |||||
request.setSubMchid(req.getSubMchid()); | request.setSubMchid(req.getSubMchid()); | ||||
com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction transaction = jsapiService.queryOrderByOutTradeNo(request); | com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction transaction = jsapiService.queryOrderByOutTradeNo(request); | ||||
AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); | AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); | ||||
response.setAppid(transaction.getSpAppid()); | |||||
response.setMchid(transaction.getSpMchid()); | |||||
if (transaction.getPayer() != null) { | if (transaction.getPayer() != null) { | ||||
response.setSpOpenid(transaction.getPayer().getSpOpenid()); | response.setSpOpenid(transaction.getPayer().getSpOpenid()); | ||||
response.setSubOpenid(transaction.getPayer().getSubOpenid()); | response.setSubOpenid(transaction.getPayer().getSubOpenid()); | ||||
com.wechat.pay.java.service.partnerpayments.h5.model.QueryOrderByOutTradeNoRequest request = | com.wechat.pay.java.service.partnerpayments.h5.model.QueryOrderByOutTradeNoRequest request = | ||||
new com.wechat.pay.java.service.partnerpayments.h5.model.QueryOrderByOutTradeNoRequest(); | new com.wechat.pay.java.service.partnerpayments.h5.model.QueryOrderByOutTradeNoRequest(); | ||||
request.setOutTradeNo(req.getExternalOrderNo()); | request.setOutTradeNo(req.getExternalOrderNo()); | ||||
request.setSpMchid(req.getSpMchid()); | |||||
request.setSpMchid(req.getMchid()); | |||||
request.setSubMchid(req.getSubMchid()); | request.setSubMchid(req.getSubMchid()); | ||||
com.wechat.pay.java.service.partnerpayments.h5.model.Transaction transaction = h5Service.queryOrderByOutTradeNo(request); | com.wechat.pay.java.service.partnerpayments.h5.model.Transaction transaction = h5Service.queryOrderByOutTradeNo(request); | ||||
AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); | AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); | ||||
response.setAppid(transaction.getSpAppid()); | |||||
response.setMchid(transaction.getSpMchid()); | |||||
if (transaction.getPayer() != null) { | if (transaction.getPayer() != null) { | ||||
response.setSpOpenid(transaction.getPayer().getSpOpenid()); | response.setSpOpenid(transaction.getPayer().getSpOpenid()); | ||||
response.setSubOpenid(transaction.getPayer().getSubOpenid()); | response.setSubOpenid(transaction.getPayer().getSubOpenid()); |
package cn.com.taiji.ats.manager.handler; | package cn.com.taiji.ats.manager.handler; | ||||
import cn.com.taiji.ats.manager.weixin.CreatePayOrderV2Manager; | |||||
import cn.com.taiji.ats.manager.weixin.CreatePayOrderV3Manager; | |||||
import cn.com.taiji.ats.manager.weixin.QueryPayResultManager; | |||||
import cn.com.taiji.ats.manager.weixin.VehicleUserStateManager; | |||||
import cn.com.taiji.ats.manager.weixin.WxMpIsSubscribedManager; | |||||
import cn.com.taiji.ats.manager.weixin.*; | |||||
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeRequest; | import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeRequest; | ||||
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeResponse; | import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeResponse; | ||||
import cn.com.taiji.core.model.comm.protocol.SignJsonRequest; | import cn.com.taiji.core.model.comm.protocol.SignJsonRequest; |
package cn.com.taiji.ats.manager.weixin; | package cn.com.taiji.ats.manager.weixin; | ||||
import cn.com.taiji.ats.manager.comm.WxPartnerPayV3; | |||||
import cn.com.taiji.ats.manager.comm.WxPayV3; | |||||
import cn.com.taiji.common.manager.AbstractManager; | import cn.com.taiji.common.manager.AbstractManager; | ||||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | import cn.com.taiji.common.manager.net.http.ServiceHandleException; | ||||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsCreatPayOrderV3Request; | import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsCreatPayOrderV3Request; | ||||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsCreatPayOrderV3Response; | import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsCreatPayOrderV3Response; | ||||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||||
import com.github.binarywang.wxpay.bean.request.WxPayPartnerUnifiedOrderV3Request; | |||||
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.config.WxPayConfig; | |||||
import com.github.binarywang.wxpay.exception.WxPayException; | |||||
import com.github.binarywang.wxpay.service.WxPayService; | |||||
import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
import java.util.Base64; | |||||
/** | /** | ||||
* @Author:ChenChao | * @Author:ChenChao | ||||
*/ | */ | ||||
@Service | @Service | ||||
public class CreatePayOrderV3Manager extends AbstractManager { | public class CreatePayOrderV3Manager extends AbstractManager { | ||||
@Autowired | |||||
private WxPayService wxPayService; | |||||
@Autowired | |||||
private WxPayV3 wxPayV3; | |||||
@Autowired | |||||
private WxPartnerPayV3 wxPartnerPayV3; | |||||
public AtsCreatPayOrderV3Response serviceHandle(AtsCreatPayOrderV3Request req) throws ServiceHandleException { | public AtsCreatPayOrderV3Response serviceHandle(AtsCreatPayOrderV3Request req) throws ServiceHandleException { | ||||
logger.info("微信支付下单{}",req.toJson()); | |||||
//格式校验 | //格式校验 | ||||
req.validate(); | req.validate(); | ||||
//配置信息 | |||||
WxPayConfig wxPayConfig = initConfig(req); | |||||
wxPayService.setConfig(wxPayConfig); | |||||
TradeTypeEnum tradeType= null; | |||||
Object orderV3 = null; | |||||
switch (req.getTradeType()){ | |||||
case NATIVE: | |||||
tradeType = TradeTypeEnum.NATIVE; | |||||
break; | |||||
case JSAPI: | |||||
tradeType = TradeTypeEnum.JSAPI; | |||||
break; | |||||
case MWEB: | |||||
tradeType = TradeTypeEnum.H5; | |||||
break; | |||||
case APP: | |||||
tradeType = TradeTypeEnum.APP; | |||||
break; | |||||
default: | |||||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("不支持的支付类型"); | |||||
} | |||||
AtsCreatPayOrderV3Response orderV3Response = new AtsCreatPayOrderV3Response(); | |||||
if (req.getCreateType() == 1){//单独下单 | |||||
WxPayUnifiedOrderV3Request orderV3Request = getWxPayUnifiedOrderV3Request(req); | |||||
try { | |||||
orderV3 = wxPayService.createOrderV3(tradeType, orderV3Request); | |||||
} catch (WxPayException e) { | |||||
logger.error("微信支付V3统一单独下单失败:{}", e.getMessage()); | |||||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException(e.getMessage()); | |||||
} | |||||
if (req.getCreateType() == 1){ | |||||
return wxPayV3.getPrepayResponse(req); | |||||
}else{ | |||||
return wxPartnerPayV3.getPrepayResponse(req); | |||||
} | } | ||||
else | |||||
if(req.getCreateType() == 2){//商户下单 | |||||
WxPayPartnerUnifiedOrderV3Request serviceOrderV3Request = getWxPayPartnerUnifiedOrderV3Request(req); | |||||
try { | |||||
orderV3 = wxPayService.createPartnerOrderV3(tradeType, serviceOrderV3Request); | |||||
} catch (WxPayException e) { | |||||
logger.error("微信支付V3统一服务商下单失败:{}", e.getMessage()); | |||||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException(e.getMessage()); | |||||
} | |||||
} | |||||
copyProperties(orderV3, orderV3Response); | |||||
if (TradeTypeEnum.APP.equals(tradeType)) { | |||||
WxPayUnifiedOrderV3Result.AppResult appResult = (WxPayUnifiedOrderV3Result.AppResult) orderV3; | |||||
orderV3Response.setAppId(appResult.getAppid()); | |||||
orderV3Response.setTimeStamp(appResult.getTimestamp()); | |||||
orderV3Response.setNonceStr(appResult.getNoncestr()); | |||||
} | |||||
if (TradeTypeEnum.NATIVE.equals(tradeType)) orderV3Response.setCodeUrl(orderV3.toString()); | |||||
if (TradeTypeEnum.H5.equals(tradeType)) orderV3Response.setH5Url(orderV3.toString()); | |||||
orderV3Response.setExternalOrderNo(req.getOutTradeNo()); | |||||
return orderV3Response; | |||||
} | } | ||||
//组装v3单独下单请求微信数据 | |||||
private WxPayUnifiedOrderV3Request getWxPayUnifiedOrderV3Request(AtsCreatPayOrderV3Request req) { | |||||
WxPayUnifiedOrderV3Request orderV3Request = copyProperties(req, new WxPayUnifiedOrderV3Request()); | |||||
WxPayUnifiedOrderV3Request.Amount amount = new WxPayUnifiedOrderV3Request.Amount(); | |||||
amount.setTotal(req.getTotal()); | |||||
amount.setCurrency(req.getCurrency()); | |||||
orderV3Request.setAmount(amount); | |||||
WxPayUnifiedOrderV3Request.Payer payer = new WxPayUnifiedOrderV3Request.Payer(); | |||||
payer.setOpenid(req.getOpenid()); | |||||
orderV3Request.setPayer(payer); | |||||
if (hasText(req.getPayerClientIp())) { | |||||
WxPayUnifiedOrderV3Request.SceneInfo sceneInfo = new WxPayUnifiedOrderV3Request.SceneInfo(); | |||||
sceneInfo.setPayerClientIp(req.getPayerClientIp()); | |||||
sceneInfo.setH5Info(new WxPayUnifiedOrderV3Request.H5Info().setType(req.getType())); | |||||
orderV3Request.setSceneInfo(sceneInfo); | |||||
} | |||||
return orderV3Request; | |||||
} | |||||
//组装v3服务商下单请求微信数据 | |||||
private WxPayPartnerUnifiedOrderV3Request getWxPayPartnerUnifiedOrderV3Request(AtsCreatPayOrderV3Request req) { | |||||
WxPayPartnerUnifiedOrderV3Request serviceOrderV3Request = copyProperties(req, new WxPayPartnerUnifiedOrderV3Request()); | |||||
WxPayPartnerUnifiedOrderV3Request.Amount amount = new WxPayPartnerUnifiedOrderV3Request.Amount(); | |||||
amount.setTotal(req.getTotal()); | |||||
amount.setCurrency(req.getCurrency()); | |||||
serviceOrderV3Request.setAmount(amount); | |||||
WxPayPartnerUnifiedOrderV3Request.Payer payer = new WxPayPartnerUnifiedOrderV3Request.Payer(); | |||||
payer.setSubOpenid(req.getSubOpenid()); | |||||
payer.setSpOpenid(req.getSpOpenid()); | |||||
serviceOrderV3Request.setPayer(payer); | |||||
if (hasText(req.getPayerClientIp())) { | |||||
WxPayPartnerUnifiedOrderV3Request.SceneInfo sceneInfo = new WxPayPartnerUnifiedOrderV3Request.SceneInfo(); | |||||
sceneInfo.setPayerClientIp(req.getPayerClientIp()); | |||||
sceneInfo.setH5Info(new WxPayPartnerUnifiedOrderV3Request.H5Info().setType(req.getType())); | |||||
serviceOrderV3Request.setSceneInfo(sceneInfo); | |||||
} | |||||
return serviceOrderV3Request; | |||||
} | |||||
//配置信息 | |||||
private WxPayConfig initConfig(AtsCreatPayOrderV3Request req) { | |||||
WxPayConfig wxPayConfig = new WxPayConfig(); | |||||
wxPayConfig.setAppId(req.getAppid()); | |||||
wxPayConfig.setMchId(req.getMchid()); | |||||
wxPayConfig.setMchKey(req.getApiV3Key()); | |||||
wxPayConfig.setSubAppId(req.getSubAppid()); | |||||
wxPayConfig.setSubMchId(req.getSubMchId()); | |||||
wxPayConfig.setNotifyUrl(req.getNotifyUrl()); | |||||
wxPayConfig.setApiV3Key(req.getApiV3Key()); | |||||
String s = Base64.getEncoder().encodeToString(req.getPrivateKey().getBytes()); | |||||
wxPayConfig.setPrivateKeyString(s); | |||||
wxPayConfig.setCertSerialNo(req.getSerialNo()); | |||||
if (hasText(req.getApiV3Key())) wxPayConfig.setApiV3Key(req.getApiV3Key()); | |||||
return wxPayConfig; | |||||
} | |||||
} | } |
package cn.com.taiji.ats.manager.weixin; | |||||
import cn.com.taiji.ats.manager.comm.WxPartnerPayV3; | |||||
import cn.com.taiji.ats.manager.comm.WxPayV3; | |||||
import cn.com.taiji.common.manager.AbstractManager; | |||||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsCreatPayOrderV3Request; | |||||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsCreatPayOrderV3Response; | |||||
import org.springframework.beans.factory.annotation.Autowired; | |||||
import org.springframework.stereotype.Service; | |||||
/** | |||||
* @Author:ChenChao | |||||
* @Date:2025/5/12 10:04 | |||||
* @Filename:CreatePayOrderV3Manager | |||||
* @description: | |||||
*/ | |||||
@Service | |||||
public class CreatePayOrderV3Manager2 extends AbstractManager { | |||||
@Autowired | |||||
private WxPayV3 wxPayV3; | |||||
@Autowired | |||||
private WxPartnerPayV3 wxPartnerPayV3; | |||||
public AtsCreatPayOrderV3Response serviceHandle(AtsCreatPayOrderV3Request req) throws ServiceHandleException { | |||||
logger.info("微信支付下单{}",req.toJson()); | |||||
//格式校验 | |||||
req.validate(); | |||||
if (req.getCreateType() == 1){ | |||||
return wxPayV3.getPrepayResponse(req); | |||||
}else{ | |||||
return wxPartnerPayV3.getPrepayResponse(req); | |||||
} | |||||
} | |||||
} |
package cn.com.taiji.ats.web; | package cn.com.taiji.ats.web; | ||||
import cn.com.taiji.ats.manager.weixin.CreatePayOrderV3Manager2; | |||||
import cn.com.taiji.ats.manager.weixin.CreatePayOrderV3Manager; | |||||
import cn.com.taiji.ats.manager.weixin.QueryPayResultManager; | import cn.com.taiji.ats.manager.weixin.QueryPayResultManager; | ||||
import cn.com.taiji.ats.manager.weixin.VehicleUserStateManager; | import cn.com.taiji.ats.manager.weixin.VehicleUserStateManager; | ||||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | import cn.com.taiji.common.manager.net.http.ServiceHandleException; | ||||
import com.google.zxing.common.BitMatrix; | import com.google.zxing.common.BitMatrix; | ||||
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; | import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; | ||||
import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
import org.springframework.stereotype.Controller; | |||||
import org.springframework.web.bind.annotation.*; | import org.springframework.web.bind.annotation.*; | ||||
import javax.imageio.ImageIO; | import javax.imageio.ImageIO; | ||||
import javax.servlet.http.HttpServletResponse; | import javax.servlet.http.HttpServletResponse; | ||||
import java.awt.*; | import java.awt.*; | ||||
import java.awt.image.BufferedImage; | import java.awt.image.BufferedImage; | ||||
import java.net.InetAddress; | |||||
import java.util.HashMap; | import java.util.HashMap; | ||||
import java.util.Map; | import java.util.Map; | ||||
public class TestController { | public class TestController { | ||||
@Autowired | @Autowired | ||||
private CreatePayOrderV3Manager2 createPayOrderV3Manager2; | |||||
private CreatePayOrderV3Manager createPayOrderV3Manager2; | |||||
@RequestMapping(value = "/common/test", method = {RequestMethod.GET}) | @RequestMapping(value = "/common/test", method = {RequestMethod.GET}) | ||||
public AtsCreatPayOrderV3Response test(@RequestBody AtsCreatPayOrderV3Request request) { | public AtsCreatPayOrderV3Response test(@RequestBody AtsCreatPayOrderV3Request request) { | ||||
// request.setApiV3Key("fe24336ea45045adb707dc2c2310416a"); | // request.setApiV3Key("fe24336ea45045adb707dc2c2310416a"); | ||||
} | } | ||||
return atsVehicleUserStateResponse; | return atsVehicleUserStateResponse; | ||||
} | } | ||||
//服务商 codeUrl = weixin://wxpay/bizpayurl?pr=14g4kOez1 | |||||
@GetMapping("qrCode") | @GetMapping("qrCode") | ||||
public void qrcode(HttpServletResponse response) throws Exception { | |||||
public void qrcode(HttpServletResponse response,@RequestBody TestModel model) throws Exception { | |||||
String data = "weixin://wxpay/bizpayurl?pr=OeLKIGGz1"; | String data = "weixin://wxpay/bizpayurl?pr=OeLKIGGz1"; | ||||
BufferedImage image = createImage(data,200,200); | |||||
BufferedImage image = createImage(model.getData(), 200,200); | |||||
ImageIO.write(image, "png", response.getOutputStream()); | ImageIO.write(image, "png", response.getOutputStream()); | ||||
} | } | ||||
package cn.com.taiji.ats.web; | |||||
import lombok.Data; | |||||
/** | |||||
* @Author:ChenChao | |||||
* @Date:2025/5/16 16:27 | |||||
* @Filename:TestModel | |||||
* @description: | |||||
*/ | |||||
@Data | |||||
public class TestModel { | |||||
private String data; | |||||
} |