Sfoglia il codice sorgente

ats微信车主平台v2支付接口开发

master
chenchaod 3 settimane fa
parent
commit
6059bdded7
15 ha cambiato i file con 201 aggiunte e 155 eliminazioni
  1. 62
    43
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsCreatPayOrderV2Request.java
  2. 25
    0
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsQueryPayResultV2Request.java
  3. 16
    0
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsQueryPayResultV2Response.java
  4. 4
    4
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsQueryPayResultV3Request.java
  5. 1
    1
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsQueryPayResultV3Response.java
  6. 2
    1
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WeiXinServiceCmd.java
  7. 3
    1
      gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/valid/ErrorMsgBuilder.java
  8. 26
    0
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/config/WechatConfig.java
  9. 12
    22
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/comm/WxPartnerPayV3.java
  10. 10
    21
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/comm/WxPayV3.java
  11. 4
    8
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/handler/WinXinServiceHandler.java
  12. 9
    42
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/weixin/CreatePayOrderV2Manager.java
  13. 8
    2
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/weixin/CreatePayOrderV3Manager.java
  14. 12
    6
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/weixin/QueryPayResultV3Manager.java
  15. 7
    4
      zhywpt-service-ats/src/main/java/cn/com/taiji/ats/web/TestController.java

+ 62
- 43
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsCreatPayOrderV2Request.java Vedi File

@@ -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值");
}



+ 25
- 0
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsQueryPayResultV2Request.java Vedi File

@@ -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) {

}
}

+ 16
- 0
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsQueryPayResultV2Response.java Vedi File

@@ -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 {
}

gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsQueryPayResultRequest.java → gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsQueryPayResultV3Request.java Vedi File

@@ -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);
}

/**

gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsQueryPayResultResponse.java → gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsQueryPayResultV3Response.java Vedi File

@@ -15,7 +15,7 @@ import lombok.Setter;
*/
@Setter
@Getter
public class AtsQueryPayResultResponse extends AbstractAtsResponse {
public class AtsQueryPayResultV3Response extends AbstractAtsResponse {

/**
* 响应参数

+ 2
- 1
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/WeiXinServiceCmd.java Vedi File

@@ -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),

+ 3
- 1
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/valid/ErrorMsgBuilder.java Vedi File

@@ -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);

+ 26
- 0
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/config/WechatConfig.java Vedi File

@@ -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();
}
}

+ 12
- 22
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/comm/WxPartnerPayV3.java Vedi File

@@ -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) {

+ 10
- 21
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/comm/WxPayV3.java Vedi File

@@ -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());
}

+ 4
- 8
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/handler/WinXinServiceHandler.java Vedi File

@@ -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:

+ 9
- 42
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/weixin/CreatePayOrderV2Manager.java Vedi File

@@ -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;
}
}

+ 8
- 2
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/weixin/CreatePayOrderV3Manager.java Vedi File

@@ -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);
}
}


zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/weixin/QueryPayResultManager.java → zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/weixin/QueryPayResultV3Manager.java Vedi File

@@ -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);
}
}
}

+ 7
- 4
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/web/TestController.java Vedi File

@@ -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";

Loading…
Annulla
Salva