@@ -3,6 +3,7 @@ package cn.com.taiji.core.model.comm.protocol.ats.weiXin; | |||
import cn.com.taiji.core.entity.dict.pay.TradeType; | |||
import cn.com.taiji.core.model.comm.protocol.ats.AbstractAtsRequest; | |||
import cn.com.taiji.core.model.comm.protocol.constraint.IntegerConstant; | |||
import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
@@ -23,17 +24,50 @@ public class AtsCreatPayOrderV2Request extends AbstractAtsRequest<AtsCreatPayOrd | |||
public AtsCreatPayOrderV2Request() { | |||
super(WeiXinServiceCmd.CREATEPAYORDERV2); | |||
} | |||
/** | |||
* 1单独下单url-普通商户下单 | |||
* 2服务商下单 | |||
* 3合并下单url | |||
* 目前只提供单独下单和服务商下单 | |||
*/ | |||
@IntegerConstant(values = "1,2") | |||
@NotNull | |||
private Integer createType; | |||
/** 商品名称 */ | |||
@NotBlank | |||
private String goodsName; | |||
private String body; | |||
/** 外部订单号 */ | |||
@NotBlank | |||
private String externalOrderNo; | |||
private String outTradeNo; | |||
/** 支付金额(分) */ | |||
@NotNull | |||
private Integer fee; | |||
private Integer totalFee; | |||
/** | |||
* <pre> | |||
* 字段名:终端IP. | |||
* 变量名:spbill_create_ip | |||
* 是否必填:是 | |||
* 类型:String(16) | |||
* 示例值:123.12.12.123 | |||
* 描述:APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。 | |||
* </pre> | |||
*/ | |||
@NotBlank | |||
private String spbillCreateIp; | |||
/** | |||
* <pre> | |||
* 字段名:通知地址. | |||
* 变量名:notify_url | |||
* 是否必填:是 | |||
* 类型:String(256) | |||
* 示例值:http://www.weixin.qq.com/wxpay/pay.php | |||
* 描述:接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。 | |||
* </pre> | |||
*/ | |||
@NotBlank | |||
private String notifyUrl; | |||
@NotNull | |||
private TradeType tradeType; | |||
@@ -63,30 +97,8 @@ public class AtsCreatPayOrderV2Request extends AbstractAtsRequest<AtsCreatPayOrd | |||
* </pre> | |||
*/ | |||
private String subOpenid; | |||
/** | |||
* <pre> | |||
* 字段名:终端IP. | |||
* 变量名:spbill_create_ip | |||
* 是否必填:是 | |||
* 类型:String(16) | |||
* 示例值:123.12.12.123 | |||
* 描述:APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。 | |||
* </pre> | |||
*/ | |||
@NotBlank | |||
private String spbillCreateIp; | |||
/** | |||
* <pre> | |||
* 字段名:通知地址. | |||
* 变量名:notify_url | |||
* 是否必填:是 | |||
* 类型:String(256) | |||
* 示例值:http://www.weixin.qq.com/wxpay/pay.php | |||
* 描述:接收微信支付异步通知回调地址,通知url必须为直接可访问的url,不能携带参数。 | |||
* </pre> | |||
*/ | |||
@NotBlank | |||
private String notifyUrl; | |||
/** | |||
* <pre> | |||
@@ -106,33 +118,40 @@ public class AtsCreatPayOrderV2Request extends AbstractAtsRequest<AtsCreatPayOrd | |||
* </pre> | |||
*/ | |||
private String sceneInfo; | |||
private String attach; //附加数据 | |||
/** 订单附加信息 支付宝会设置在body中 微信会设置在attach中 */ | |||
private String additionalInfo; | |||
private String productId;//商品ID | |||
//======================================= | |||
@NotBlank | |||
private String appId; | |||
private String subAppId; | |||
@NotBlank | |||
private String mchId; | |||
private String subAppId; | |||
private String subMchId; | |||
@NotBlank | |||
private String mchKey; | |||
private String nonceStr;//nonce_str 随机字符串 | |||
private String signType;//sign_type | |||
private String sign; | |||
private String apiV3Key;//apiV3 秘钥值 | |||
public void validate(ErrorMsgBuilder builder) { | |||
if (TradeType.MWEB.equals(tradeType)) { | |||
builder.validFieldNotBlank("sceneInfo", sceneInfo); | |||
} | |||
if (TradeType.JSAPI.equals(tradeType)){ | |||
builder.validField("notBlank","openid/subOpenid", | |||
!hasText(openid) && !hasText(subOpenid),null,"用户标识和子标识不能都为空"); | |||
if (createType == 2){ | |||
builder.validFieldNotBlank("subMchId", subMchId); | |||
if (TradeType.JSAPI.equals(tradeType)){ | |||
builder.validField("notBlank","openid/subOpenid", | |||
!hasText(openid) && !hasText(subOpenid),null,"用户标识和子标识不能都为空"); | |||
} | |||
if (hasText(subOpenid)) { | |||
builder.validFieldNotBlank("subAppId", subAppId); | |||
} | |||
} | |||
if (hasText(subOpenid)) { | |||
builder.validFieldNotBlank("subAppId", subAppId); | |||
if (createType == 1 && TradeType.JSAPI.equals(tradeType)){ | |||
builder.validFieldNotBlank("openid", openid); | |||
} | |||
builder.validNotBlank("sceneInfo",TradeType.MWEB.equals(tradeType), | |||
sceneInfo,"当tradeType是'MWEB'时,需指定非空的tradeType值"); | |||
builder.validNotBlank("productId",TradeType.NATIVE.equals(tradeType), | |||
productId,"当tradeType是'NATIVE'时,需指定非空的productId值"); | |||
} | |||
@@ -0,0 +1,25 @@ | |||
package cn.com.taiji.core.model.comm.protocol.ats.weiXin; | |||
import cn.com.taiji.core.model.comm.protocol.ats.AbstractAtsRequest; | |||
import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
/** | |||
* @Author:ChenChao | |||
* @Date:2025/5/17 11:30 | |||
* @Filename:AtsQueryPayResultV2Request | |||
* @description: V3支付结果查询请求 | |||
*/ | |||
@Getter | |||
@Setter | |||
public class AtsQueryPayResultV2Request extends AbstractAtsRequest<AtsQueryPayResultV2Response> { | |||
public AtsQueryPayResultV2Request() { | |||
super(WeiXinServiceCmd.QUERYPAYRESULTV2); | |||
} | |||
@Override | |||
protected void validate(ErrorMsgBuilder builder) { | |||
} | |||
} |
@@ -0,0 +1,16 @@ | |||
package cn.com.taiji.core.model.comm.protocol.ats.weiXin; | |||
import cn.com.taiji.core.model.comm.protocol.ats.AbstractAtsResponse; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
/** | |||
* @Author:ChenChao | |||
* @Date:2025/5/17 11:31 | |||
* @Filename:AtsQueryPayResultV2Response | |||
* @description: | |||
*/ | |||
@Getter | |||
@Setter | |||
public class AtsQueryPayResultV2Response extends AbstractAtsResponse { | |||
} |
@@ -14,15 +14,15 @@ import javax.validation.constraints.NotNull; | |||
* @Author:ChenChao | |||
* @Date:2025/5/14 16:30 | |||
* @Filename:AtsQueryPayResultRequest | |||
* @description: 支付结果查询请求 | |||
* @description: V3支付结果查询请求 | |||
*/ | |||
@Getter | |||
@Setter | |||
public class AtsQueryPayResultRequest extends AbstractAtsRequest<AtsQueryPayResultResponse> { | |||
public class AtsQueryPayResultV3Request extends AbstractAtsRequest<AtsQueryPayResultV3Response> { | |||
public AtsQueryPayResultRequest() { | |||
super(WeiXinServiceCmd.QUERYPAYRESULT); | |||
public AtsQueryPayResultV3Request() { | |||
super(WeiXinServiceCmd.QUERYPAYRESULTV3); | |||
} | |||
/** |
@@ -15,7 +15,7 @@ import lombok.Setter; | |||
*/ | |||
@Setter | |||
@Getter | |||
public class AtsQueryPayResultResponse extends AbstractAtsResponse { | |||
public class AtsQueryPayResultV3Response extends AbstractAtsResponse { | |||
/** | |||
* 响应参数 |
@@ -7,8 +7,9 @@ import cn.com.taiji.core.model.comm.protocol.ats.AtsServiceType; | |||
public enum WeiXinServiceCmd implements SignServiceCommand { | |||
CREATEPAYORDERV2("V2统一下单","creatOrderV2", AtsCreatPayOrderV2Request.class), | |||
QUERYPAYRESULTV2("查询V2支付结果","queryPayResultV2", AtsQueryPayResultV2Request.class), | |||
CREATEPAYORDERV3("V3统一下单","creatOrderV3", AtsCreatPayOrderV3Request.class), | |||
QUERYPAYRESULT("查询支付结果","queryPayResult", AtsQueryPayResultRequest.class), | |||
QUERYPAYRESULTV3("查询V3支付结果","queryPayResultV3", AtsQueryPayResultV3Request.class), | |||
VEHICLEUSERSTATE("微信车主状态查询及获取签约参数","vehicleUserState", AtsVehicleUserStateRequest.class), | |||
MPSENDMESSAGE("微信公众号发送订阅信息","mpSendMessage", WxMpSendMessageRequest.class), | |||
MPISSUBSCRIBED("微信公众号是否订阅","isSubscribed", WxMpIsSubscribedRequest.class), |
@@ -42,7 +42,9 @@ public class ErrorMsgBuilder extends BaseModel { | |||
public <E extends BaseModel> void validFieldTrue(String fieldName, Boolean value, String msg) { | |||
this.validField(NOT_TRUE, fieldName, value != null && !value, value + "", msg); | |||
} | |||
public <E extends BaseModel> void validNotBlank(String fieldName,Boolean condition, String value, String msg) { | |||
this.validField(NOT_BLANK, fieldName, condition&&!StringTools.hasText(value), value, msg); | |||
} | |||
public void validField(String id, String fieldName, Boolean errorCondition, String value, String msg) { | |||
if (errorCondition) { | |||
append(id, fieldName, value, msg); |
@@ -1,9 +1,12 @@ | |||
package cn.com.taiji.ats.config; | |||
import com.github.binarywang.wxpay.config.WxPayConfig; | |||
import com.github.binarywang.wxpay.service.WxPayService; | |||
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl; | |||
import com.wechat.pay.java.core.RSAAutoCertificateConfig; | |||
import org.springframework.context.annotation.Bean; | |||
import org.springframework.context.annotation.Configuration; | |||
import static com.github.binarywang.wxpay.constant.WxPayConstants.SignType.HMAC_SHA256; | |||
@Configuration | |||
public class WechatConfig { | |||
@@ -12,4 +15,27 @@ public class WechatConfig { | |||
public WxPayService wxPayService(){ | |||
return new WxPayServiceImpl(); | |||
} | |||
//配置V2信息 | |||
public WxPayConfig initV2Config(String appId,String mchId,String mchKey,String subAppId,String subMchId,String notifyUrl) { | |||
WxPayConfig wxPayConfig = new WxPayConfig(); | |||
wxPayConfig.setAppId(appId); | |||
wxPayConfig.setMchId(mchId); | |||
wxPayConfig.setMchKey(mchKey); | |||
wxPayConfig.setSubAppId(subAppId); | |||
wxPayConfig.setSubMchId(subMchId); | |||
wxPayConfig.setSignType(HMAC_SHA256); | |||
wxPayConfig.setNotifyUrl(notifyUrl); | |||
return wxPayConfig; | |||
} | |||
//配置V3信息 | |||
public RSAAutoCertificateConfig initV3Config(String mchid, String apiV3Key, String privateKey, String serialNo) { | |||
return new RSAAutoCertificateConfig.Builder() | |||
.merchantId(mchid)//商户号 | |||
.apiV3Key(apiV3Key)//商户APIV3密钥 | |||
.privateKey(privateKey)//商户API私钥 | |||
.merchantSerialNumber(serialNo)//商户证书序列号 | |||
.build(); | |||
} | |||
} |
@@ -8,6 +8,8 @@ import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsCreatPayOrderV3Reques | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsCreatPayOrderV3Response; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsQueryPayResultRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsQueryPayResultResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsQueryPayResultV3Request; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsQueryPayResultV3Response; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import com.wechat.pay.java.core.RSAAutoCertificateConfig; | |||
import com.wechat.pay.java.service.partnerpayments.app.AppServiceExtension; | |||
@@ -28,20 +30,9 @@ import org.springframework.stereotype.Service; | |||
@Service | |||
public class WxPartnerPayV3 extends AbstractManager { | |||
//配置信息 | |||
public static RSAAutoCertificateConfig initConfig(String mchid,String apiV3Key,String privateKey,String serialNo) { | |||
return new RSAAutoCertificateConfig.Builder() | |||
.merchantId(mchid)//商户号 | |||
.apiV3Key(apiV3Key)//商户APIV3密钥 | |||
.privateKey(privateKey)//商户API私钥 | |||
.merchantSerialNumber(serialNo)//商户证书序列号 | |||
.build(); | |||
} | |||
// 响应 | |||
public AtsCreatPayOrderV3Response getPrepayResponse(AtsCreatPayOrderV3Request req) throws ServiceHandleException { | |||
RSAAutoCertificateConfig config = initConfig(req.getMchid(), req.getApiV3Key(), req.getPrivateKey(), req.getSerialNo()); | |||
public AtsCreatPayOrderV3Response getPrepayResponse(AtsCreatPayOrderV3Request req,RSAAutoCertificateConfig config) throws ServiceHandleException { | |||
switch (req.getTradeType()) { | |||
case NATIVE: | |||
return getPrepayNativeResponse(req, config); | |||
@@ -57,8 +48,7 @@ public class WxPartnerPayV3 extends AbstractManager { | |||
} | |||
//支付结果查询 | |||
public AtsQueryPayResultResponse queryPayResult(AtsQueryPayResultRequest req) throws ServiceHandleException { | |||
RSAAutoCertificateConfig config = initConfig(req.getMchid(), req.getApiV3Key(), req.getPrivateKey(), req.getSerialNo()); | |||
public AtsQueryPayResultV3Response queryPayResult(AtsQueryPayResultV3Request req, RSAAutoCertificateConfig config) throws ServiceHandleException { | |||
switch (req.getTradeType()){ | |||
case NATIVE: | |||
return getNativePayResult(req, config); | |||
@@ -207,14 +197,14 @@ public class WxPartnerPayV3 extends AbstractManager { | |||
} | |||
//NATIVE支付结果查询 | |||
private AtsQueryPayResultResponse getNativePayResult(AtsQueryPayResultRequest req, RSAAutoCertificateConfig config) { | |||
private AtsQueryPayResultV3Response getNativePayResult(AtsQueryPayResultV3Request req, RSAAutoCertificateConfig config) { | |||
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(); | |||
request.setOutTradeNo(req.getExternalOrderNo()); | |||
request.setSpMchid(req.getMchid()); | |||
request.setSubMchid(req.getSubMchid()); | |||
com.wechat.pay.java.service.partnerpayments.nativepay.model.Transaction transaction = service.queryOrderByOutTradeNo(request); | |||
AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); | |||
AtsQueryPayResultV3Response response = copyProperties(transaction, new AtsQueryPayResultV3Response()); | |||
response.setAppid(transaction.getSpAppid()); | |||
response.setMchid(transaction.getSpMchid()); | |||
if (transaction.getPayer() != null) { | |||
@@ -234,7 +224,7 @@ public class WxPartnerPayV3 extends AbstractManager { | |||
} | |||
//APP支付结果查询 | |||
private AtsQueryPayResultResponse getAppPayResult(AtsQueryPayResultRequest req, RSAAutoCertificateConfig config) { | |||
private AtsQueryPayResultV3Response getAppPayResult(AtsQueryPayResultV3Request req, RSAAutoCertificateConfig config) { | |||
com.wechat.pay.java.service.partnerpayments.app.AppServiceExtension appService = new com.wechat.pay.java.service.partnerpayments.app.AppServiceExtension.Builder().config(config).build(); | |||
com.wechat.pay.java.service.partnerpayments.app.model.QueryOrderByOutTradeNoRequest request = | |||
new com.wechat.pay.java.service.partnerpayments.app.model.QueryOrderByOutTradeNoRequest(); | |||
@@ -242,7 +232,7 @@ public class WxPartnerPayV3 extends AbstractManager { | |||
request.setSpMchid(req.getMchid()); | |||
request.setSubMchid(req.getSubMchid()); | |||
com.wechat.pay.java.service.partnerpayments.app.model.Transaction transaction = appService.queryOrderByOutTradeNo(request); | |||
AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); | |||
AtsQueryPayResultV3Response response = copyProperties(transaction, new AtsQueryPayResultV3Response()); | |||
response.setAppid(transaction.getSpAppid()); | |||
response.setMchid(transaction.getSpMchid()); | |||
if (transaction.getPayer() != null) { | |||
@@ -262,7 +252,7 @@ public class WxPartnerPayV3 extends AbstractManager { | |||
} | |||
//JSAPI支付结果查询 | |||
private AtsQueryPayResultResponse getJsapiPayResult(AtsQueryPayResultRequest req, RSAAutoCertificateConfig config) { | |||
private AtsQueryPayResultV3Response getJsapiPayResult(AtsQueryPayResultV3Request req, RSAAutoCertificateConfig config) { | |||
com.wechat.pay.java.service.partnerpayments.jsapi.JsapiServiceExtension jsapiService = new com.wechat.pay.java.service.partnerpayments.jsapi.JsapiServiceExtension.Builder().config(config).build(); | |||
com.wechat.pay.java.service.partnerpayments.jsapi.model.QueryOrderByOutTradeNoRequest request = | |||
new com.wechat.pay.java.service.partnerpayments.jsapi.model.QueryOrderByOutTradeNoRequest(); | |||
@@ -270,7 +260,7 @@ public class WxPartnerPayV3 extends AbstractManager { | |||
request.setSpMchid(req.getMchid()); | |||
request.setSubMchid(req.getSubMchid()); | |||
com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction transaction = jsapiService.queryOrderByOutTradeNo(request); | |||
AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); | |||
AtsQueryPayResultV3Response response = copyProperties(transaction, new AtsQueryPayResultV3Response()); | |||
response.setAppid(transaction.getSpAppid()); | |||
response.setMchid(transaction.getSpMchid()); | |||
if (transaction.getPayer() != null) { | |||
@@ -290,7 +280,7 @@ public class WxPartnerPayV3 extends AbstractManager { | |||
} | |||
// H5支付订单查询 | |||
private AtsQueryPayResultResponse getH5PayResult(AtsQueryPayResultRequest req, RSAAutoCertificateConfig config) { | |||
private AtsQueryPayResultV3Response getH5PayResult(AtsQueryPayResultV3Request req, RSAAutoCertificateConfig config) { | |||
com.wechat.pay.java.service.partnerpayments.h5.H5Service h5Service = new com.wechat.pay.java.service.partnerpayments.h5.H5Service.Builder().config(config).build(); | |||
com.wechat.pay.java.service.partnerpayments.h5.model.QueryOrderByOutTradeNoRequest request = | |||
new com.wechat.pay.java.service.partnerpayments.h5.model.QueryOrderByOutTradeNoRequest(); | |||
@@ -298,7 +288,7 @@ public class WxPartnerPayV3 extends AbstractManager { | |||
request.setSpMchid(req.getMchid()); | |||
request.setSubMchid(req.getSubMchid()); | |||
com.wechat.pay.java.service.partnerpayments.h5.model.Transaction transaction = h5Service.queryOrderByOutTradeNo(request); | |||
AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); | |||
AtsQueryPayResultV3Response response = copyProperties(transaction, new AtsQueryPayResultV3Response()); | |||
response.setAppid(transaction.getSpAppid()); | |||
response.setMchid(transaction.getSpMchid()); | |||
if (transaction.getPayer() != null) { |
@@ -6,8 +6,8 @@ import cn.com.taiji.core.entity.dict.pay.TradeState; | |||
import cn.com.taiji.core.entity.dict.pay.TradeType; | |||
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.AtsQueryPayResultRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsQueryPayResultResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsQueryPayResultV3Request; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsQueryPayResultV3Response; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import com.wechat.pay.java.core.RSAAutoCertificateConfig; | |||
import com.wechat.pay.java.service.payments.app.AppServiceExtension; | |||
@@ -31,18 +31,8 @@ import org.springframework.stereotype.Service; | |||
public class WxPayV3 extends AbstractManager { | |||
//配置信息 | |||
public static RSAAutoCertificateConfig initConfig(String mchid,String apiV3Key,String privateKey,String serialNo) { | |||
return new RSAAutoCertificateConfig.Builder() | |||
.merchantId(mchid)//商户号 | |||
.apiV3Key(apiV3Key)//商户APIV3密钥 | |||
.privateKey(privateKey)//商户API私钥 | |||
.merchantSerialNumber(serialNo)//商户证书序列号 | |||
.build(); | |||
} | |||
// 下单响应 | |||
public AtsCreatPayOrderV3Response getPrepayResponse(AtsCreatPayOrderV3Request req) throws ServiceHandleException { | |||
RSAAutoCertificateConfig config = initConfig(req.getMchid(), req.getApiV3Key(), req.getPrivateKey(), req.getSerialNo()); | |||
public AtsCreatPayOrderV3Response getPrepayResponse(AtsCreatPayOrderV3Request req,RSAAutoCertificateConfig config) throws ServiceHandleException { | |||
switch (req.getTradeType()) { | |||
case NATIVE: | |||
return getPrepayNativeResponse(req, config); | |||
@@ -58,8 +48,7 @@ public class WxPayV3 extends AbstractManager { | |||
} | |||
//支付结果查询 | |||
public AtsQueryPayResultResponse queryPayResult(AtsQueryPayResultRequest req) throws ServiceHandleException { | |||
RSAAutoCertificateConfig config = initConfig(req.getMchid(), req.getApiV3Key(), req.getPrivateKey(), req.getSerialNo()); | |||
public AtsQueryPayResultV3Response queryPayResult(AtsQueryPayResultV3Request req, RSAAutoCertificateConfig config) throws ServiceHandleException { | |||
switch (req.getTradeType()){ | |||
case NATIVE: | |||
return getNativePayResult(req, config); | |||
@@ -198,7 +187,7 @@ public class WxPayV3 extends AbstractManager { | |||
} | |||
//NATIVE支付结果查询 | |||
private AtsQueryPayResultResponse getNativePayResult(AtsQueryPayResultRequest req, RSAAutoCertificateConfig config) { | |||
private AtsQueryPayResultV3Response getNativePayResult(AtsQueryPayResultV3Request req, RSAAutoCertificateConfig config) { | |||
NativePayService service = new NativePayService.Builder().config(config).build(); | |||
QueryOrderByOutTradeNoRequest request = new QueryOrderByOutTradeNoRequest(); | |||
request.setOutTradeNo(req.getExternalOrderNo()); | |||
@@ -208,7 +197,7 @@ public class WxPayV3 extends AbstractManager { | |||
} | |||
//APP支付结果查询 | |||
private AtsQueryPayResultResponse getAppPayResult(AtsQueryPayResultRequest req, RSAAutoCertificateConfig config) { | |||
private AtsQueryPayResultV3Response getAppPayResult(AtsQueryPayResultV3Request req, RSAAutoCertificateConfig config) { | |||
AppServiceExtension appService = new AppServiceExtension.Builder().config(config).build(); | |||
com.wechat.pay.java.service.payments.app.model.QueryOrderByOutTradeNoRequest request = | |||
new com.wechat.pay.java.service.payments.app.model.QueryOrderByOutTradeNoRequest(); | |||
@@ -219,7 +208,7 @@ public class WxPayV3 extends AbstractManager { | |||
} | |||
//JSAPI支付结果查询 | |||
private AtsQueryPayResultResponse getJsapiPayResult(AtsQueryPayResultRequest req, RSAAutoCertificateConfig config) { | |||
private AtsQueryPayResultV3Response getJsapiPayResult(AtsQueryPayResultV3Request req, RSAAutoCertificateConfig config) { | |||
JsapiServiceExtension jsapiService = new JsapiServiceExtension.Builder().config(config).build(); | |||
com.wechat.pay.java.service.payments.jsapi.model.QueryOrderByOutTradeNoRequest request = | |||
new com.wechat.pay.java.service.payments.jsapi.model.QueryOrderByOutTradeNoRequest(); | |||
@@ -230,7 +219,7 @@ public class WxPayV3 extends AbstractManager { | |||
} | |||
// H5支付订单查询 | |||
private AtsQueryPayResultResponse getH5PayResult(AtsQueryPayResultRequest req, RSAAutoCertificateConfig config) { | |||
private AtsQueryPayResultV3Response getH5PayResult(AtsQueryPayResultV3Request req, RSAAutoCertificateConfig config) { | |||
H5Service h5Service = new H5Service.Builder().config(config).build(); | |||
com.wechat.pay.java.service.payments.h5.model.QueryOrderByOutTradeNoRequest request = | |||
new com.wechat.pay.java.service.payments.h5.model.QueryOrderByOutTradeNoRequest(); | |||
@@ -240,8 +229,8 @@ public class WxPayV3 extends AbstractManager { | |||
return getPayResult(transaction); | |||
} | |||
private AtsQueryPayResultResponse getPayResult(Transaction transaction) { | |||
AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); | |||
private AtsQueryPayResultV3Response getPayResult(Transaction transaction) { | |||
AtsQueryPayResultV3Response response = copyProperties(transaction, new AtsQueryPayResultV3Response()); | |||
if (transaction.getPayer() != null) { | |||
response.setOpenid(transaction.getPayer().getOpenid()); | |||
} |
@@ -3,9 +3,7 @@ package cn.com.taiji.ats.manager.handler; | |||
import cn.com.taiji.ats.manager.handler.wx.WxMessageManager; | |||
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.model.FormatException; | |||
import cn.com.taiji.common.manager.ManagerException; | |||
import cn.com.taiji.ats.manager.weixin.QueryPayResultV3Manager; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.common.model.file.FileProtocolSystemError; | |||
import cn.com.taiji.ats.manager.weixin.VehicleUserStateManager; | |||
@@ -18,8 +16,6 @@ import com.zgglyun.common.model.AbstractHttpRequestInfo; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import java.io.IOException; | |||
/** | |||
* | |||
@@ -41,7 +37,7 @@ public class WinXinServiceHandler extends AbstractAtsServiceHandler<WeiXinServic | |||
@Autowired | |||
private CreatePayOrderV3Manager createPayOrderV3Manager; | |||
@Autowired | |||
private QueryPayResultManager queryPayResultManager; | |||
private QueryPayResultV3Manager queryPayResultV3Manager; | |||
@Autowired | |||
private WxMessageManager wxMessageManager; | |||
@Autowired | |||
@@ -56,8 +52,8 @@ public class WinXinServiceHandler extends AbstractAtsServiceHandler<WeiXinServic | |||
return createPayOrderV2Manager.serviceHandle((AtsCreatPayOrderV2Request) request); | |||
case CREATEPAYORDERV3: | |||
return createPayOrderV3Manager.serviceHandle((AtsCreatPayOrderV3Request) request); | |||
case QUERYPAYRESULT: | |||
return queryPayResultManager.serviceHandle((AtsQueryPayResultRequest) request); | |||
case QUERYPAYRESULTV3: | |||
return queryPayResultV3Manager.serviceHandle((AtsQueryPayResultV3Request) request); | |||
case MPISSUBSCRIBED: | |||
return wxMessageManager.isSubscribed((WxMpIsSubscribedRequest) request); | |||
case MPSENDMESSAGE: |
@@ -1,5 +1,6 @@ | |||
package cn.com.taiji.ats.manager.weixin; | |||
import cn.com.taiji.ats.config.WechatConfig; | |||
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.AtsCreatPayOrderV2Request; | |||
@@ -7,12 +8,12 @@ import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsCreatPayOrderV2Respon | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest; | |||
import com.github.binarywang.wxpay.config.WxPayConfig; | |||
import com.github.binarywang.wxpay.constant.WxPayConstants; | |||
import com.github.binarywang.wxpay.service.WxPayService; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
import javax.validation.constraints.NotBlank; | |||
import static com.github.binarywang.wxpay.constant.WxPayConstants.SignType.HMAC_SHA256; | |||
/** | |||
* @Author:ChenChao | |||
@@ -26,39 +27,20 @@ public class CreatePayOrderV2Manager extends AbstractManager { | |||
@Autowired | |||
private WxPayService wxPayService; | |||
// @Override | |||
// protected void formatValidateInternal(ErrorMsgBuilder builder, AtsCreatPayOrderRequest req, Map<String, Object> dataStream) throws ServiceHandleException { | |||
// req.relatedValid(builder); | |||
// } | |||
@Autowired | |||
private WechatConfig wechatConfig; | |||
// @Override | |||
public AtsCreatPayOrderV2Response serviceHandle(AtsCreatPayOrderV2Request req) throws ServiceHandleException{ | |||
//格式校验 | |||
req.validate(); | |||
// req.relatedValid(builder); | |||
logger.info("微信支付下单请求参数:{}", req.toJson()); | |||
//初始化配置信息 | |||
WxPayConfig wxPayConfig = initConfig(req); | |||
WxPayConfig wxPayConfig = wechatConfig.initV2Config(req.getAppId(), req.getMchId(), req.getMchKey(), | |||
req.getSubAppId(), req.getSubMchId(), req.getNotifyUrl()); | |||
//配置信息 | |||
wxPayService.setConfig(wxPayConfig); | |||
WxPayUnifiedOrderRequest wxRequest = copyProperties(req, new WxPayUnifiedOrderRequest()); | |||
switch (req.getTradeType()){ | |||
case NATIVE: | |||
wxRequest.setTradeType(WxPayConstants.TradeType.NATIVE); | |||
break; | |||
case JSAPI: | |||
wxRequest.setTradeType(WxPayConstants.TradeType.JSAPI); | |||
break; | |||
case MWEB: | |||
wxRequest.setTradeType(WxPayConstants.TradeType.MWEB); | |||
break; | |||
case APP: | |||
wxRequest.setTradeType(WxPayConstants.TradeType.APP); | |||
break; | |||
default: | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("不支持的支付类型"); | |||
} | |||
wxRequest.setTradeType(req.getTradeType().name()); | |||
//请求微信 | |||
Object order = null; | |||
try { | |||
@@ -68,22 +50,7 @@ public class CreatePayOrderV2Manager extends AbstractManager { | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException(e.getMessage()); | |||
} | |||
AtsCreatPayOrderV2Response response = copyProperties(order, new AtsCreatPayOrderV2Response()); | |||
response.setExternalOrderNo(req.getExternalOrderNo()); | |||
response.setExternalOrderNo(req.getOutTradeNo()); | |||
return response; | |||
} | |||
//配置信息 | |||
private WxPayConfig initConfig(AtsCreatPayOrderV2Request req) { | |||
WxPayConfig wxPayConfig = new WxPayConfig(); | |||
wxPayConfig.setAppId(req.getAppId()); | |||
wxPayConfig.setMchId(req.getMchId()); | |||
wxPayConfig.setMchKey(req.getMchKey()); | |||
wxPayConfig.setSubAppId(req.getSubAppId()); | |||
wxPayConfig.setSubMchId(req.getSubMchId()); | |||
wxPayConfig.setSignType(req.getSignType()); | |||
wxPayConfig.setNotifyUrl(req.getNotifyUrl()); | |||
if (hasText(req.getApiV3Key())) wxPayConfig.setApiV3Key(req.getApiV3Key()); | |||
return wxPayConfig; | |||
} | |||
} |
@@ -1,11 +1,13 @@ | |||
package cn.com.taiji.ats.manager.weixin; | |||
import cn.com.taiji.ats.config.WechatConfig; | |||
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 com.wechat.pay.java.core.RSAAutoCertificateConfig; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
@@ -23,14 +25,18 @@ public class CreatePayOrderV3Manager extends AbstractManager { | |||
private WxPayV3 wxPayV3; | |||
@Autowired | |||
private WxPartnerPayV3 wxPartnerPayV3; | |||
@Autowired | |||
private WechatConfig wechatConfig; | |||
public AtsCreatPayOrderV3Response serviceHandle(AtsCreatPayOrderV3Request req) throws ServiceHandleException { | |||
logger.info("微信支付下单{}",req.toJson()); | |||
//格式校验 | |||
req.validate(); | |||
//初始化配置信息 | |||
RSAAutoCertificateConfig config = wechatConfig.initV3Config(req.getMchid(), req.getApiV3Key(), req.getPrivateKey(), req.getSerialNo()); | |||
if (req.getCreateType() == 1){ | |||
return wxPayV3.getPrepayResponse(req); | |||
return wxPayV3.getPrepayResponse(req, config); | |||
}else{ | |||
return wxPartnerPayV3.getPrepayResponse(req); | |||
return wxPartnerPayV3.getPrepayResponse(req,config); | |||
} | |||
} | |||
@@ -1,11 +1,13 @@ | |||
package cn.com.taiji.ats.manager.weixin; | |||
import cn.com.taiji.ats.config.WechatConfig; | |||
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.AtsQueryPayResultRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsQueryPayResultResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsQueryPayResultV3Request; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsQueryPayResultV3Response; | |||
import com.wechat.pay.java.core.RSAAutoCertificateConfig; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
@@ -16,18 +18,22 @@ import org.springframework.stereotype.Service; | |||
* @description: 支付结果查询 | |||
*/ | |||
@Service | |||
public class QueryPayResultManager extends AbstractManager { | |||
public class QueryPayResultV3Manager extends AbstractManager { | |||
@Autowired | |||
private WxPayV3 wxPayV3; | |||
@Autowired | |||
private WxPartnerPayV3 wxPartnerPayV3; | |||
public AtsQueryPayResultResponse serviceHandle(AtsQueryPayResultRequest req) throws ServiceHandleException { | |||
@Autowired | |||
private WechatConfig wechatConfig; | |||
public AtsQueryPayResultV3Response serviceHandle(AtsQueryPayResultV3Request req) throws ServiceHandleException { | |||
//格式 | |||
req.validate(); | |||
//配置支付信息 | |||
RSAAutoCertificateConfig config = wechatConfig.initV3Config(req.getMchid(), req.getApiV3Key(), req.getPrivateKey(), req.getSerialNo()); | |||
if (req.getCreateType() == 1){ | |||
return wxPayV3.queryPayResult(req); | |||
return wxPayV3.queryPayResult(req,config); | |||
}else { | |||
return wxPartnerPayV3.queryPayResult(req); | |||
return wxPartnerPayV3.queryPayResult(req,config); | |||
} | |||
} | |||
} |
@@ -1,7 +1,7 @@ | |||
package cn.com.taiji.ats.web; | |||
import cn.com.taiji.ats.manager.weixin.CreatePayOrderV3Manager; | |||
import cn.com.taiji.ats.manager.weixin.QueryPayResultManager; | |||
import cn.com.taiji.ats.manager.weixin.QueryPayResultV3Manager; | |||
import cn.com.taiji.ats.manager.weixin.VehicleUserStateManager; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.entity.dict.pay.TradeType; | |||
@@ -34,7 +34,7 @@ import static com.zgglyun.common.model.SignOperation.logger; | |||
public class TestController { | |||
@Autowired | |||
private CreatePayOrderV3Manager createPayOrderV3Manager2; | |||
private CreatePayOrderV3Manager createPayOrderV3Manager; | |||
@RequestMapping(value = "/common/test", method = {RequestMethod.GET}) | |||
public AtsCreatPayOrderV3Response test(@RequestBody AtsCreatPayOrderV3Request request) { | |||
// request.setApiV3Key("fe24336ea45045adb707dc2c2310416a"); | |||
@@ -52,7 +52,7 @@ public class TestController { | |||
request.setOpenid("oQj1Z5QX3YLzRl5Z0JJYlXQ_1HY8"); | |||
AtsCreatPayOrderV3Response orderV3Response = null; | |||
try { | |||
orderV3Response = createPayOrderV3Manager2.serviceHandle(request); | |||
orderV3Response = createPayOrderV3Manager.serviceHandle(request); | |||
logger.info(orderV3Response.toJson()); | |||
} catch (ServiceHandleException e) { | |||
@@ -63,7 +63,7 @@ public class TestController { | |||
} | |||
@Autowired | |||
private QueryPayResultManager queryPayResultManager; | |||
private QueryPayResultV3Manager queryPayResultManager; | |||
@RequestMapping(value = "/common/test2", method = {RequestMethod.GET}) | |||
public AtsQueryPayResultResponse test(@RequestBody AtsQueryPayResultRequest request) { | |||
@@ -81,6 +81,8 @@ public class TestController { | |||
return orderV3Response; | |||
} | |||
@Autowired | |||
private VehicleUserStateManager vehicleUserStateManager; | |||
@RequestMapping(value = "/common/test3", method = {RequestMethod.GET}) | |||
@@ -96,6 +98,7 @@ public class TestController { | |||
return atsVehicleUserStateResponse; | |||
} | |||
//服务商 codeUrl = weixin://wxpay/bizpayurl?pr=14g4kOez1 | |||
//v2 普通商户 codeUrl = weixin://wxpay/bizpayurl?pr=SNBYt2Kz3 | |||
@GetMapping("qrCode") | |||
public void qrcode(HttpServletResponse response,@RequestBody TestModel model) throws Exception { | |||
String data = "weixin://wxpay/bizpayurl?pr=OeLKIGGz1"; |