Преглед на файлове

ats微信车主平台v2支付结果查询接口开发

master
chenchaod преди 3 седмици
родител
ревизия
94970044f6

+ 28
- 0
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsQueryPayResultV2Request.java Целия файл

@@ -1,10 +1,14 @@
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.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/17 11:30
@@ -18,8 +22,32 @@ public class AtsQueryPayResultV2Request extends AbstractAtsRequest<AtsQueryPayRe
public AtsQueryPayResultV2Request() {
super(WeiXinServiceCmd.QUERYPAYRESULTV2);
}

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

@NotBlank
private String outTradeNo; //商户订单号
@NotBlank
private String appId;//服务商的APPID
@NotBlank
private String mchId;
private String subAppId;
private String subMchId;
@NotBlank
private String mchKey;
@Override
protected void validate(ErrorMsgBuilder builder) {

if (createType == 2){
builder.validFieldNotBlank("subMchId", subMchId);
}
}
}

+ 32
- 0
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsQueryPayResultV2Response.java Целия файл

@@ -1,5 +1,7 @@
package cn.com.taiji.core.model.comm.protocol.ats.weiXin;

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.AbstractAtsResponse;
import lombok.Getter;
import lombok.Setter;
@@ -13,4 +15,34 @@ import lombok.Setter;
@Getter
@Setter
public class AtsQueryPayResultV2Response extends AbstractAtsResponse {

private String openid; //是

private String subOpenid; //否

private TradeType tradetype;//交易类型 否

private TradeState tradeState;//交易状态 是

private String bankType; //付款银行 是

private String detail;//商品详情 否

private Integer totalFee;//标价金额 单位分 是

private String feeType;//标价币种,默认CNY //否

private Integer settlementTotalFee;//应结订单金额 否

private Integer cashFee;//现金支付金额 是

private String cashFeeType;//现金支付货币类型 否

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

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

private String timeEnd;//支付完成时间 是

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

+ 2
- 2
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/config/WechatConfig.java Целия файл

@@ -17,7 +17,7 @@ public class WechatConfig {
}

//配置V2信息
public WxPayConfig initV2Config(String appId,String mchId,String mchKey,String subAppId,String subMchId,String notifyUrl) {
public WxPayConfig initV2Config(String appId,String mchId,String mchKey,String subAppId,String subMchId) {
WxPayConfig wxPayConfig = new WxPayConfig();
wxPayConfig.setAppId(appId);
wxPayConfig.setMchId(mchId);
@@ -25,7 +25,7 @@ public class WechatConfig {
wxPayConfig.setSubAppId(subAppId);
wxPayConfig.setSubMchId(subMchId);
wxPayConfig.setSignType(HMAC_SHA256);
wxPayConfig.setNotifyUrl(notifyUrl);
// wxPayConfig.setNotifyUrl(notifyUrl);
return wxPayConfig;
}


+ 5
- 4
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/handler/WinXinServiceHandler.java Целия файл

@@ -1,12 +1,9 @@
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.QueryPayResultV3Manager;
import cn.com.taiji.ats.manager.weixin.*;
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;
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;
@@ -35,6 +32,8 @@ public class WinXinServiceHandler extends AbstractAtsServiceHandler<WeiXinServic
@Autowired
private CreatePayOrderV2Manager createPayOrderV2Manager;
@Autowired
private QueryPayResultV2Manager queryPayResultV2Manager;
@Autowired
private CreatePayOrderV3Manager createPayOrderV3Manager;
@Autowired
private QueryPayResultV3Manager queryPayResultV3Manager;
@@ -50,6 +49,8 @@ public class WinXinServiceHandler extends AbstractAtsServiceHandler<WeiXinServic
switch (cmd) {
case CREATEPAYORDERV2:
return createPayOrderV2Manager.serviceHandle((AtsCreatPayOrderV2Request) request);
case QUERYPAYRESULTV2:
return queryPayResultV2Manager.serviceHandle((AtsQueryPayResultV2Request) request);
case CREATEPAYORDERV3:
return createPayOrderV3Manager.serviceHandle((AtsCreatPayOrderV3Request) request);
case QUERYPAYRESULTV3:

+ 2
- 2
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/weixin/CreatePayOrderV2Manager.java Целия файл

@@ -31,12 +31,12 @@ public class CreatePayOrderV2Manager extends AbstractManager {
private WechatConfig wechatConfig;

public AtsCreatPayOrderV2Response serviceHandle(AtsCreatPayOrderV2Request req) throws ServiceHandleException{
logger.info("微信支付V2下单请求参数{}",req.toJson());
//格式校验
req.validate();
logger.info("微信支付下单请求参数:{}", req.toJson());
//初始化配置信息
WxPayConfig wxPayConfig = wechatConfig.initV2Config(req.getAppId(), req.getMchId(), req.getMchKey(),
req.getSubAppId(), req.getSubMchId(), req.getNotifyUrl());
req.getSubAppId(), req.getSubMchId());
//配置信息
wxPayService.setConfig(wxPayConfig);
WxPayUnifiedOrderRequest wxRequest = copyProperties(req, new WxPayUnifiedOrderRequest());

+ 1
- 1
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/weixin/CreatePayOrderV3Manager.java Целия файл

@@ -28,7 +28,7 @@ public class CreatePayOrderV3Manager extends AbstractManager {
@Autowired
private WechatConfig wechatConfig;
public AtsCreatPayOrderV3Response serviceHandle(AtsCreatPayOrderV3Request req) throws ServiceHandleException {
logger.info("微信支付下单{}",req.toJson());
logger.info("微信支付V3下单请求参数{}",req.toJson());
//格式校验
req.validate();
//初始化配置信息

+ 53
- 0
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/weixin/QueryPayResultV2Manager.java Целия файл

@@ -0,0 +1,53 @@
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.entity.dict.pay.TradeState;
import cn.com.taiji.core.entity.dict.pay.TradeType;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsQueryPayResultV2Request;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsQueryPayResultV2Response;
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError;
import com.github.binarywang.wxpay.bean.request.WxPayOrderQueryRequest;
import com.github.binarywang.wxpay.bean.result.WxPayOrderQueryResult;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.WxPayService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
* @Author:ChenChao
* @Date:2025/5/17 11:48
* @Filename:QueryPayResultV2Manager
* @description:
*/
@Service
public class QueryPayResultV2Manager extends AbstractManager {
@Autowired
private WxPayService wxPayService;

@Autowired
private WechatConfig wechatConfig;

public AtsQueryPayResultV2Response serviceHandle(AtsQueryPayResultV2Request req) throws ServiceHandleException {
logger.info("微信支付V2查询支付结果请求参数{}",req.toJson());
WxPayConfig wxPayConfig = wechatConfig.initV2Config(req.getAppId(), req.getMchId(), req.getMchKey(), req.getSubAppId(), req.getSubMchId());
wxPayService.setConfig(wxPayConfig);
WxPayOrderQueryRequest request = copyProperties(req, new WxPayOrderQueryRequest());
WxPayOrderQueryResult wxPayOrderQueryResult = null;
try {
wxPayOrderQueryResult = wxPayService.queryOrder(request);
} catch (WxPayException e) {
logger.error("微信支付结果V2查询失败:{}", e.getMessage());
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException(e.getMessage());
}
AtsQueryPayResultV2Response response = copyProperties(wxPayOrderQueryResult, new AtsQueryPayResultV2Response());
response.setTradeState(TradeState.valueOf(wxPayOrderQueryResult.getTradeState()));
if (hasText(wxPayOrderQueryResult.getTradeType())) {
response.setTradetype(TradeType.valueOf(wxPayOrderQueryResult.getTradeType()));
}
return response;

}
}

+ 1
- 0
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/weixin/QueryPayResultV3Manager.java Целия файл

@@ -26,6 +26,7 @@ public class QueryPayResultV3Manager extends AbstractManager {
@Autowired
private WechatConfig wechatConfig;
public AtsQueryPayResultV3Response serviceHandle(AtsQueryPayResultV3Request req) throws ServiceHandleException {
logger.info("微信支付V3查询支付结果请求参数{}",req.toJson());
//格式
req.validate();
//配置支付信息

+ 1
- 0
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/weixin/VehicleUserStateManager.java Целия файл

@@ -27,6 +27,7 @@ public class VehicleUserStateManager extends AbstractManager {
private static final String baseUrl = "https://api.mch.weixin.qq.com/vehicle/partnerpay/querystate";

public AtsVehicleUserStateResponse serviceHandle(AtsVehicleUserStateRequest request) throws ServiceHandleException {
logger.info("微信支付车主签约状态查询请求参数{}",request.toJson());
//生成xml字符串
String reqXml = getXmlString(request);
String resXml = postData(baseUrl, reqXml, "text/xml");

+ 1
- 0
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/web/TestController.java Целия файл

@@ -99,6 +99,7 @@ public class TestController {
}
//服务商 codeUrl = weixin://wxpay/bizpayurl?pr=14g4kOez1
//v2 普通商户 codeUrl = weixin://wxpay/bizpayurl?pr=SNBYt2Kz3
//V2 普通商户weixin://wxpay/bizpayurl?pr=Ne0lOJSz3
@GetMapping("qrCode")
public void qrcode(HttpServletResponse response,@RequestBody TestModel model) throws Exception {
String data = "weixin://wxpay/bizpayurl?pr=OeLKIGGz1";

Loading…
Отказ
Запис