Browse Source

ats微信支付部分接口支付结果查询

master
chenchaod 3 weeks ago
parent
commit
0ee04663e2

+ 31
- 0
gly-base-core/src/main/java/cn/com/taiji/core/entity/dict/pay/TradeState.java View File

@@ -0,0 +1,31 @@
package cn.com.taiji.core.entity.dict.pay;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
* @Author:ChenChao
* @Date:2025/5/14 16:56
* @Filename:TradeState
* @description: 交易状态
*/
@AllArgsConstructor
@Getter
public enum TradeState {

SUCCESS("支付成功"),

REFUND("转入退款"),

NOTPAY("未支付"),

CLOSED("已关闭"),

REVOKED("已撤销(仅付款码支付会返回)"),

USERPAYING("用户支付中(仅付款码支付会返回)"),

PAYERROR("支付失败(仅付款码支付会返回)"),
;
private String name;
}

+ 15
- 6
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/AtsCreatPayOrderV3Request.java View File

@@ -24,7 +24,7 @@ public class AtsCreatPayOrderV3Request extends AbstractAtsRequest<AtsCreatPayOrd
super(AtsServiceCmd.CREATEPAYORDERV3);
}
/**
* 1单独下单url
* 1单独下单url-普通商户下单
* 2服务商下单
* 3合并下单url
* 目前只提供单独下单和服务商下单
@@ -37,7 +37,7 @@ public class AtsCreatPayOrderV3Request extends AbstractAtsRequest<AtsCreatPayOrd
private TradeType tradeType;//交易方式

protected String appid;//应用ID
protected String mchid;//直连商户号

protected String spAppid;//服务商应用ID
protected String spMchId;//服务商商户号
@@ -85,8 +85,13 @@ public class AtsCreatPayOrderV3Request extends AbstractAtsRequest<AtsCreatPayOrd
//=================================组装到H5场景信息H5Info h5Info,然后h5Info组装到场景信息SceneInfo sceneInfo;
private String type;//场景类型,示例值:iOS, Android, Wap

@NotBlank
protected String mchid;//直连商户号
@NotBlank
private String apiV3Key; // API V3密钥
@NotBlank
private String privateKey;// 你的商户私钥
@NotBlank
private String serialNo;// 商户证书序列号


@@ -94,15 +99,19 @@ public class AtsCreatPayOrderV3Request extends AbstractAtsRequest<AtsCreatPayOrd

if (createType == 1){
builder.validFieldNotBlank("appid", appid);
builder.validFieldNotBlank("mchid", mchid);
builder.validFieldNotBlank("openid", openid);
// builder.validFieldNotBlank("mchid", mchid);
if (TradeType.JSAPI.equals(tradeType)) {
builder.validFieldNotBlank("openid", openid);
}
}
if (createType == 2){
builder.validFieldNotBlank("spAppid", spAppid);
builder.validFieldNotBlank("spMchId", spMchId);
builder.validFieldNotBlank("subMchId", subMchId);
builder.validField("notBlank","spOpenid/subOpenid",
!hasText(spOpenid) && !hasText(subOpenid),null,"服务商用户标识和子商户应用用户标识不能都为空");
if (TradeType.JSAPI.equals(tradeType)) {
builder.validField("notBlank", "spOpenid/subOpenid",
!hasText(spOpenid) && !hasText(subOpenid), null, "服务商用户标识和子商户应用用户标识不能都为空");
}
}
if (TradeType.MWEB.equals(tradeType)){
builder.validFieldNotBlank("payerClientIp",payerClientIp);

+ 55
- 0
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/AtsQueryPayResultRequest.java View File

@@ -0,0 +1,55 @@
package cn.com.taiji.core.model.comm.protocol.ats;

import cn.com.taiji.core.entity.dict.pay.TradeType;
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;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
* @Author:ChenChao
* @Date:2025/5/14 16:30
* @Filename:AtsQueryPayResultRequest
* @description: 支付结果查询请求
*/
@Getter
@Setter
public class AtsQueryPayResultRequest extends AbstractAtsRequest<AtsQueryPayResultResponse>{


public AtsQueryPayResultRequest() {
super(AtsServiceCmd.QUERYPAYRESULT);
}

/**
* 1单独下单url-普通商户下单
* 2服务商下单
* 3合并下单url
* 目前只提供单独下单和服务商下单
*/
@IntegerConstant(values = "1,2")
@NotNull
private Integer createType;

@NotBlank
private String externalOrderNo; //支付单号

@NotNull
private TradeType tradeType;//交易方式

@NotBlank
protected String mchid;//直连商户号
@NotBlank
private String apiV3Key; // API V3密钥
@NotBlank
private String privateKey;// 你的商户私钥
@NotBlank
private String serialNo;// 商户证书序列号
@Override
protected void validate(ErrorMsgBuilder builder) {

}
}

+ 49
- 0
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/AtsQueryPayResultResponse.java View File

@@ -0,0 +1,49 @@
package cn.com.taiji.core.model.comm.protocol.ats;


import cn.com.taiji.core.entity.dict.pay.TradeState;
import cn.com.taiji.core.entity.dict.pay.TradeType;
import lombok.Getter;
import lombok.Setter;

/**
* @Author:ChenChao
* @Date:2025/5/14 16:30
* @Filename:AtsQueryPayResultRequest
* @description: 支付结果查询响应
*/
@Setter
@Getter
public class AtsQueryPayResultResponse extends AbstractAtsResponse{

private String appid;//公众账号ID 是

private String mchid;//商户号 是

private String outTradeNo;//商户订单号 是

private String transactionId;//微信支付订单号 否

private TradeType tradeType;//交易类型 否

private TradeState tradeState;//交易状态 是

private String tradeStateDesc;//交易状态描述 是

private String bankType;//银行类型 否

private String attach ;//商户数据包 否

private String successTime;//支付完成时间 否

private String openid;//用户标识,用户在商户下单的appid下唯一标识 否

private Integer total;//订单总金额 否

private Integer payerTotal;//用户实际支付金额 否

private String currency;//货币类型 否



}

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

@@ -6,7 +6,8 @@ import cn.com.taiji.core.model.comm.protocol.SignServiceType;

public enum AtsServiceCmd implements SignServiceCommand {
CREATEPAYORDERV2("V2统一下单","creatOrderV2", AtsCreatPayOrderV2Request.class),
CREATEPAYORDERV3("V3统一下单","creatOrderV3", AtsCreatPayOrderV3Request.class), //
CREATEPAYORDERV3("V3统一下单","creatOrderV3", AtsCreatPayOrderV3Request.class),
QUERYPAYRESULT("查询支付结果","queryPayResult", AtsQueryPayResultRequest.class),
;



+ 65
- 0
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/comm/WxPartnerPayV3.java View File

@@ -1,8 +1,12 @@
package cn.com.taiji.ats.manager.comm;

import cn.com.taiji.common.manager.net.http.ServiceHandleException;
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.AtsCreatPayOrderV3Request;
import cn.com.taiji.core.model.comm.protocol.ats.AtsCreatPayOrderV3Response;
import cn.com.taiji.core.model.comm.protocol.ats.AtsQueryPayResultRequest;
import cn.com.taiji.core.model.comm.protocol.ats.AtsQueryPayResultResponse;
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;
@@ -11,6 +15,7 @@ import com.wechat.pay.java.service.partnerpayments.h5.model.H5Info;
import com.wechat.pay.java.service.partnerpayments.jsapi.JsapiServiceExtension;
import com.wechat.pay.java.service.partnerpayments.jsapi.model.*;
import com.wechat.pay.java.service.partnerpayments.nativepay.NativePayService;
import com.wechat.pay.java.service.payments.model.Transaction;
import org.springframework.stereotype.Service;


@@ -183,4 +188,64 @@ public class WxPartnerPayV3 {
return orderV3Response;
}

// //NATIVE支付结果查询
// private AtsQueryPayResultResponse getNativePayResult(AtsQueryPayResultRequest 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.setMchid(req.getMchid());
// com.wechat.pay.java.service.partnerpayments.nativepay.model.Transaction transaction = service.queryOrderByOutTradeNo(request);
// return getPayResult(transaction);
// }
//
// //APP支付结果查询
// private AtsQueryPayResultResponse getAppPayResult(AtsQueryPayResultRequest 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();
// request.setMchid(req.getMchid());
// request.setOutTradeNo(req.getExternalOrderNo());
// com.wechat.pay.java.service.partnerpayments.app.model.Transaction transaction = appService.queryOrderByOutTradeNo(request);
// return getPayResult(transaction);
// }
//
// //JSAPI支付结果查询
// private AtsQueryPayResultResponse getJsapiPayResult(AtsQueryPayResultRequest 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();
// request.setMchid(req.getMchid());
// request.setOutTradeNo(req.getExternalOrderNo());
// com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction transaction = jsapiService.queryOrderByOutTradeNo(request);
// return getPayResult(transaction);
// }
//
// // H5支付订单查询
// private AtsQueryPayResultResponse getH5PayResult(AtsQueryPayResultRequest 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();
// request.setOutTradeNo(req.getExternalOrderNo());
// request.setMchid(req.getMchid());
// com.wechat.pay.java.service.partnerpayments.h5.model.Transaction transaction = h5Service.queryOrderByOutTradeNo(request);
// return getPayResult(transaction);
// }
//
// private AtsQueryPayResultResponse getPayResult(Transaction transaction) {
// AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse());
// if (transaction.getPayer() != null) {
// response.setOpenid(transaction.getPayer().getOpenid());
// }
// if (transaction.getAmount() != null) {
// response.setTotal(transaction.getAmount().getTotal());
// response.setPayerTotal(transaction.getAmount().getPayerTotal());
// response.setCurrency(transaction.getAmount().getCurrency());
// }
// response.setTradeState(TradeState.valueOf(transaction.getTradeState().name()));
// if (transaction.getTradeType() != null) {
// response.setTradeType(TradeType.valueOf(transaction.getTradeType().name()));
// }
// return response;
// }

}

+ 96
- 16
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/comm/WxPayV3.java View File

@@ -1,8 +1,13 @@
package cn.com.taiji.ats.manager.comm;

import cn.com.taiji.common.manager.AbstractManager;
import cn.com.taiji.common.manager.net.http.ServiceHandleException;
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.AtsCreatPayOrderV3Request;
import cn.com.taiji.core.model.comm.protocol.ats.AtsCreatPayOrderV3Response;
import cn.com.taiji.core.model.comm.protocol.ats.AtsQueryPayResultRequest;
import cn.com.taiji.core.model.comm.protocol.ats.AtsQueryPayResultResponse;
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;
@@ -11,11 +16,9 @@ import com.wechat.pay.java.service.payments.h5.H5Service;
import com.wechat.pay.java.service.payments.h5.model.H5Info;
import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension;
import com.wechat.pay.java.service.payments.jsapi.model.Payer;
import com.wechat.pay.java.service.payments.model.Transaction;
import com.wechat.pay.java.service.payments.nativepay.NativePayService;
import com.wechat.pay.java.service.payments.nativepay.model.Amount;
import com.wechat.pay.java.service.payments.nativepay.model.PrepayRequest;
import com.wechat.pay.java.service.payments.nativepay.model.PrepayResponse;
import com.wechat.pay.java.service.payments.nativepay.model.SceneInfo;
import com.wechat.pay.java.service.payments.nativepay.model.*;
import org.springframework.stereotype.Service;

/**
@@ -25,21 +28,21 @@ import org.springframework.stereotype.Service;
* @description: 普通商户微信支付工具类v3
*/
@Service
public class WxPayV3 {
public class WxPayV3 extends AbstractManager {


//配置信息
public static RSAAutoCertificateConfig initConfig(AtsCreatPayOrderV3Request req) {
public static RSAAutoCertificateConfig initConfig(String mchid,String apiV3Key,String privateKey,String serialNo) {
return new RSAAutoCertificateConfig.Builder()
.merchantId(req.getMchid())//商户号
.apiV3Key(req.getApiV3Key())//商户APIV3密钥
.privateKey(req.getPrivateKey())//商户API私钥
.merchantSerialNumber(req.getSerialNo())//商户证书序列号
.merchantId(mchid)//商户号
.apiV3Key(apiV3Key)//商户APIV3密钥
.privateKey(privateKey)//商户API私钥
.merchantSerialNumber(serialNo)//商户证书序列号
.build();
}
// 响应
// 下单响应
public AtsCreatPayOrderV3Response getPrepayResponse(AtsCreatPayOrderV3Request req) throws ServiceHandleException {
RSAAutoCertificateConfig config = initConfig(req);
RSAAutoCertificateConfig config = initConfig(req.getMchid(), req.getApiV3Key(), req.getPrivateKey(), req.getSerialNo());
switch (req.getTradeType()) {
case NATIVE:
return getPrepayNativeResponse(req, config);
@@ -54,7 +57,23 @@ public class WxPayV3 {
}
}

//NATIVE
//支付结果查询
public AtsQueryPayResultResponse queryPayResult(AtsQueryPayResultRequest req) throws ServiceHandleException {
RSAAutoCertificateConfig config = initConfig(req.getMchid(), req.getApiV3Key(), req.getPrivateKey(), req.getSerialNo());
switch (req.getTradeType()){
case NATIVE:
return getNativePayResult(req, config);
case APP:
return getAppPayResult(req, config);
case JSAPI:
return getJsapiPayResult(req, config);
case MWEB:
return getH5PayResult(req,config);
default:
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("支付类型不匹配");
}
}
//NATIVE下单
public AtsCreatPayOrderV3Response getPrepayNativeResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) {
NativePayService service = new NativePayService.Builder().config(config).build();
PrepayRequest request = new PrepayRequest();
@@ -80,7 +99,7 @@ public class WxPayV3 {
return orderV3Response;
}

//APP
//APP下单
private AtsCreatPayOrderV3Response getPrepayAppResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) {
AppServiceExtension appService = new AppServiceExtension.Builder().config(config).build();
com.wechat.pay.java.service.payments.app.model.PrepayRequest request = new com.wechat.pay.java.service.payments.app.model.PrepayRequest();
@@ -114,7 +133,7 @@ public class WxPayV3 {
return orderV3Response;
}

//JSAPI
//JSAPI下单
private AtsCreatPayOrderV3Response getPrepayJsapiResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) {
JsapiServiceExtension jsapiService = new JsapiServiceExtension.Builder().config(config).build();
com.wechat.pay.java.service.payments.jsapi.model.PrepayRequest request = new com.wechat.pay.java.service.payments.jsapi.model.PrepayRequest();
@@ -149,7 +168,8 @@ public class WxPayV3 {
orderV3Response.setExternalOrderNo(req.getOutTradeNo());
return orderV3Response;
}
//MWEB

//MWEB下单
private AtsCreatPayOrderV3Response getPrepayMwebResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) {
H5Service h5Service = new H5Service.Builder().config(config).build();
com.wechat.pay.java.service.payments.h5.model.PrepayRequest request = new com.wechat.pay.java.service.payments.h5.model.PrepayRequest();
@@ -177,5 +197,65 @@ public class WxPayV3 {
return orderV3Response;
}

//NATIVE支付结果查询
private AtsQueryPayResultResponse getNativePayResult(AtsQueryPayResultRequest req, RSAAutoCertificateConfig config) {
NativePayService service = new NativePayService.Builder().config(config).build();
QueryOrderByOutTradeNoRequest request = new QueryOrderByOutTradeNoRequest();
request.setOutTradeNo(req.getExternalOrderNo());
request.setMchid(req.getMchid());
Transaction transaction = service.queryOrderByOutTradeNo(request);
return getPayResult(transaction);
}

//APP支付结果查询
private AtsQueryPayResultResponse getAppPayResult(AtsQueryPayResultRequest 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();
request.setMchid(req.getMchid());
request.setOutTradeNo(req.getExternalOrderNo());
Transaction transaction = appService.queryOrderByOutTradeNo(request);
return getPayResult(transaction);
}

//JSAPI支付结果查询
private AtsQueryPayResultResponse getJsapiPayResult(AtsQueryPayResultRequest 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();
request.setMchid(req.getMchid());
request.setOutTradeNo(req.getExternalOrderNo());
Transaction transaction = jsapiService.queryOrderByOutTradeNo(request);
return getPayResult(transaction);
}

// H5支付订单查询
private AtsQueryPayResultResponse getH5PayResult(AtsQueryPayResultRequest 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();
request.setOutTradeNo(req.getExternalOrderNo());
request.setMchid(req.getMchid());
Transaction transaction = h5Service.queryOrderByOutTradeNo(request);
return getPayResult(transaction);
}

private AtsQueryPayResultResponse getPayResult(Transaction transaction) {
AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse());
if (transaction.getPayer() != null) {
response.setOpenid(transaction.getPayer().getOpenid());
}
if (transaction.getAmount() != null) {
response.setTotal(transaction.getAmount().getTotal());
response.setPayerTotal(transaction.getAmount().getPayerTotal());
response.setCurrency(transaction.getAmount().getCurrency());
}
response.setTradeState(TradeState.valueOf(transaction.getTradeState().name()));
if (transaction.getTradeType() != null) {
response.setTradeType(TradeType.valueOf(transaction.getTradeType().name()));
}
return response;
}


}

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

@@ -2,13 +2,11 @@ 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.core.model.comm.protocol.AbstractSignTypeRequest;
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.ats.AtsCreatPayOrderV2Request;
import cn.com.taiji.core.model.comm.protocol.ats.AtsCreatPayOrderV3Request;
import cn.com.taiji.core.model.comm.protocol.ats.AtsServiceCmd;
import cn.com.taiji.core.model.comm.protocol.ats.AtsServiceType;
import cn.com.taiji.core.model.comm.protocol.ats.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.zgglyun.common.model.AbstractHttpRequestInfo;
@@ -35,6 +33,8 @@ public class WinXinServiceHandler extends AbstractAtsServiceHandler<AtsServiceCm
private CreatePayOrderV2Manager createPayOrderV2Manager;
@Autowired
private CreatePayOrderV3Manager createPayOrderV3Manager;
@Autowired
private QueryPayResultManager queryPayResultManager;

@Override
protected <T extends AbstractSignTypeRequest<?>> AbstractSignTypeResponse handleInternal(T request,
@@ -45,6 +45,8 @@ public class WinXinServiceHandler extends AbstractAtsServiceHandler<AtsServiceCm
return createPayOrderV2Manager.serviceHandle((AtsCreatPayOrderV2Request) request);
case CREATEPAYORDERV3:
return createPayOrderV3Manager.serviceHandle((AtsCreatPayOrderV3Request) request);
case QUERYPAYRESULT:
return queryPayResultManager.serviceHandle((AtsQueryPayResultRequest) request);
default:
throw FileProtocolSystemError.NOT_SUPPORT.toHandleException(jsonReq.getIfCode());
}

+ 1
- 1
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/weixin/CreatePayOrderV3Manager.java View File

@@ -26,7 +26,7 @@ import java.util.Base64;
* @Filename:CreatePayOrderV3Manager
* @description:
*/
@Service("createPayOrderV3Manager")
@Service
public class CreatePayOrderV3Manager extends AbstractManager {
@Autowired
private WxPayService wxPayService;

+ 27
- 0
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/weixin/QueryPayResultManager.java View File

@@ -0,0 +1,27 @@
package cn.com.taiji.ats.manager.weixin;

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.AtsQueryPayResultRequest;
import cn.com.taiji.core.model.comm.protocol.ats.AtsQueryPayResultResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
* @Author:ChenChao
* @Date:2025/5/14 17:10
* @Filename:QueryPayResultManager
* @description: 支付结果查询
*/
@Service
public class QueryPayResultManager extends AbstractManager {
@Autowired
private WxPayV3 wxPayV3;
public AtsQueryPayResultResponse serviceHandle(AtsQueryPayResultRequest req) throws ServiceHandleException {
//格式
req.validate();
return wxPayV3.queryPayResult(req);

}
}

+ 119
- 0
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/web/TestController.java View File

@@ -0,0 +1,119 @@
package cn.com.taiji.ats.web;

import cn.com.taiji.ats.manager.weixin.CreatePayOrderV3Manager;
import cn.com.taiji.ats.manager.weixin.CreatePayOrderV3Manager2;
import cn.com.taiji.ats.manager.weixin.QueryPayResultManager;
import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.core.entity.dict.pay.TradeType;
import cn.com.taiji.core.model.comm.protocol.ats.AtsCreatPayOrderV3Request;
import cn.com.taiji.core.model.comm.protocol.ats.AtsCreatPayOrderV3Response;

import cn.com.taiji.core.model.comm.protocol.ats.AtsQueryPayResultRequest;
import cn.com.taiji.core.model.comm.protocol.ats.AtsQueryPayResultResponse;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.net.InetAddress;
import java.util.HashMap;
import java.util.Map;

import static com.zgglyun.common.model.SignOperation.logger;

/**
* @Author:ChenChao
* @Date:2025/5/12 20:50
* @Filename:TestController
* @description:
*/
@RestController
public class TestController {

@Autowired
private CreatePayOrderV3Manager2 createPayOrderV3Manager2;
@RequestMapping(value = "/common/test", method = {RequestMethod.GET})
public AtsCreatPayOrderV3Response test(@RequestBody AtsCreatPayOrderV3Request request) {
// request.setApiV3Key("fe24336ea45045adb707dc2c2310416a");
// request.setAppid("wxa2d9acdd1054e69b");
// request.setMchid("1608930045");//1535705621
// request.setPrivateKey("MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCvuFuIL0h5RfI0wNYoWhVPXdKYEYhCDsYK8prRjG8rO97x6BbcOtmESa1rsLa1vgRCgsJEBOcWEq53xikstFstNlr9UBrruoNNt0kP9Wv/X/h8lVO+WygydoynClLtBV19HB2ld/zdBy9ppD47jdQz9dPgGadwi0GxlVIRkBvWb/8SFYJGEsL8Uh3MFSjTZ6uED3H7QnCRuFIHsD5gPhu7y9fZpDTnUZQm2iBt1fOfk8ki5mIZjnb2ZCNxl6ol/6jz5nMEI+E5JXQK0aRfxtkKSYgNNi2P4kMQgHHH/YK2xsiy9SSkyIAdGPwjzK5VCMtar5bHROasCThW6sejgh8JAgMBAAECggEBAKwf5mksB83jWjGagyzbsOwhd1xGMDakyhGHO2fwLCUpbGWBdoMbkl4m3Z0TaKX2D64m76w5MTNJ8WSZ01NbB8Tt7YscoIIwHNZPp13ehX+NvpYqn/Fi0ak8vuIRFtHd44ndtJyVQDgyBZtxqxQjBa4wKu7lskJn5l3RaqaRhvMw+h5yG94584UITU51739oM2luNcVYAYaEQJUed5c3VHbuvkG6d5fQS5x9gP1id6WyhXF/tHY8fkhYQfDW1CucGErYEzu97fwt6n84+xd9UjhzkAm1SLEpd1+KkSuxduYCwW9JY6RIL/qK2+utM6cbAirHcozMhedPBaoxrdARyEECgYEA1b10f2mDYz80Rq9DxyxDk8xbT3kj5OSVaTUt0C9+LFfusedmqGugrGjjCHx/NF1mNbR6NKIwtvcqAqZI2gXqKpMjhx4jfnw/ubfbxUK7wDW84hMOwGKga6bOvWzUH6EGXJmJEeO8RC65ZqqcROnYgCnuD5vgvStrNuhjtEX8zS0CgYEA0naCHtrAFPKmOq9AogbA3YFeGPSPzaPkwF1eN+8RNR6XV1xsoZv+GFunYTX2fmaFpUfVCFstPY+jfgY2Xy50c4T8KXBPLW/KN6XQEvPrbVktFUNle5pSknO4Pdyolk5jOM7nMEHOX9/IX4Q5C0YXc+QCMExuBm0vXVJL9e2wWs0CgYEAzZmFc35KjXBh19CF0RRKGOTNvL/ZgDdFZcNqw0S8COm4yNa/kCifkNj/8szXC8cAJ47osrKFS6qrdYsArwBbhQKufS3HlMbuAbbTJ4gO1FCc1ZbhbLwydfsqCVqjHZ2mYfKqwFOhaLDNVO2ujjenM3mh7s/RugYHBvU521IrYC0CgYAP700WzPUyINUZKF+6ZMyBeOQI+6tPpJMTRX52ubER1oka4jKPYeIxMe9QWueY1mZUB0ZH5a9dM9zrE8lWF4xVmsIE2S4FgKtM308LwFAY7WGOdJXgb+TEleJjPKu/BZxZlsDGVJUtiSIAqWAwTFRGQAMyaPcDoYyugiaiLibmGQKBgAoEqrGCfpiP2H64KkZWhE0Nh4pDdz6yWu15RXEJOjlE/PB/JgonoZFcLK+bd6aR86ij7Q0yO/UKCokhH68sjEgj3px+XVHouFIr9eDnj3leTRedchVTxfqhxcXQkLxqY4/AISYjB6koOU7SP9tm/Ad4wbUAz9ocEbVl6zehN0mW");
// request.setSerialNo("4ac875f8eeab3e7e4f10ce9d33e78c2c318e51e8");
request.setTradeType(TradeType.NATIVE);
// request.setCreateType(1);
request.setDescription("测试");
request.setOutTradeNo("123456789");
request.setNotifyUrl("https://skx.mynatapp.cc/qtucpaymgt/wxv3/notify/");
request.setTotal(1);
request.setCurrency("CNY");
request.setOpenid("oQj1Z5QX3YLzRl5Z0JJYlXQ_1HY8");
AtsCreatPayOrderV3Response orderV3Response = null;
try {
orderV3Response = createPayOrderV3Manager2.serviceHandle(request);
logger.info(orderV3Response.toJson());
} catch (ServiceHandleException e) {

logger.error(e.getMessage());
}
System.out.println("234567");
return orderV3Response;
}

@Autowired
private QueryPayResultManager queryPayResultManager;
@RequestMapping(value = "/common/test2", method = {RequestMethod.GET})
public AtsQueryPayResultResponse test(@RequestBody AtsQueryPayResultRequest request) {

request.setTradeType(TradeType.NATIVE);
request.setExternalOrderNo("123456789");
AtsQueryPayResultResponse orderV3Response = null;
try {
orderV3Response = queryPayResultManager.serviceHandle(request);
logger.info(orderV3Response.toJson());
} catch (ServiceHandleException e) {

logger.error(e.getMessage());
}
System.out.println("234567");
return orderV3Response;
}

@GetMapping("qrCode")
public void qrcode(HttpServletResponse response) throws Exception {
String data = "weixin://wxpay/bizpayurl?pr=OeLKIGGz1";
BufferedImage image = createImage(data,200,200);
ImageIO.write(image, "png", response.getOutputStream());
}

public static BufferedImage createImage(String data, int width, int height) {
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 设置字符编码
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 错误纠正级别
hints.put(EncodeHintType.MARGIN, 1); // 二维码边距
MultiFormatWriter writer = new MultiFormatWriter();
BitMatrix bitMatrix = null;
try {
bitMatrix = writer.encode(data, BarcodeFormat.QR_CODE, width, height, hints);
} catch (WriterException e) {
throw new RuntimeException(e);
}
// 创建BufferedImage对象来表示QR码
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x, y, bitMatrix.get(x, y) ? Color.BLACK.getRGB() : Color.WHITE.getRGB());
}
}
return image;

}
}

Loading…
Cancel
Save