Browse Source

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

master
chenchaod 3 weeks ago
parent
commit
94970044f6

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

package cn.com.taiji.core.model.comm.protocol.ats.weiXin; 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.ats.AbstractAtsRequest;
import cn.com.taiji.core.model.comm.protocol.constraint.IntegerConstant;
import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder; import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;


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

/** /**
* @Author:ChenChao * @Author:ChenChao
* @Date:2025/5/17 11:30 * @Date:2025/5/17 11:30
public AtsQueryPayResultV2Request() { public AtsQueryPayResultV2Request() {
super(WeiXinServiceCmd.QUERYPAYRESULTV2); 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 @Override
protected void validate(ErrorMsgBuilder builder) { 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 View File

package cn.com.taiji.core.model.comm.protocol.ats.weiXin; 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 cn.com.taiji.core.model.comm.protocol.ats.AbstractAtsResponse;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@Getter @Getter
@Setter @Setter
public class AtsQueryPayResultV2Response extends AbstractAtsResponse { 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 View File

} }


//配置V2信息 //配置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 wxPayConfig = new WxPayConfig();
wxPayConfig.setAppId(appId); wxPayConfig.setAppId(appId);
wxPayConfig.setMchId(mchId); wxPayConfig.setMchId(mchId);
wxPayConfig.setSubAppId(subAppId); wxPayConfig.setSubAppId(subAppId);
wxPayConfig.setSubMchId(subMchId); wxPayConfig.setSubMchId(subMchId);
wxPayConfig.setSignType(HMAC_SHA256); wxPayConfig.setSignType(HMAC_SHA256);
wxPayConfig.setNotifyUrl(notifyUrl);
// wxPayConfig.setNotifyUrl(notifyUrl);
return wxPayConfig; return wxPayConfig;
} }



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

package cn.com.taiji.ats.manager.handler; package cn.com.taiji.ats.manager.handler;


import cn.com.taiji.ats.manager.handler.wx.WxMessageManager; 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.manager.net.http.ServiceHandleException;
import cn.com.taiji.common.model.file.FileProtocolSystemError; 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.AbstractSignTypeRequest;
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeResponse; import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeResponse;
import cn.com.taiji.core.model.comm.protocol.SignJsonRequest; import cn.com.taiji.core.model.comm.protocol.SignJsonRequest;
@Autowired @Autowired
private CreatePayOrderV2Manager createPayOrderV2Manager; private CreatePayOrderV2Manager createPayOrderV2Manager;
@Autowired @Autowired
private QueryPayResultV2Manager queryPayResultV2Manager;
@Autowired
private CreatePayOrderV3Manager createPayOrderV3Manager; private CreatePayOrderV3Manager createPayOrderV3Manager;
@Autowired @Autowired
private QueryPayResultV3Manager queryPayResultV3Manager; private QueryPayResultV3Manager queryPayResultV3Manager;
switch (cmd) { switch (cmd) {
case CREATEPAYORDERV2: case CREATEPAYORDERV2:
return createPayOrderV2Manager.serviceHandle((AtsCreatPayOrderV2Request) request); return createPayOrderV2Manager.serviceHandle((AtsCreatPayOrderV2Request) request);
case QUERYPAYRESULTV2:
return queryPayResultV2Manager.serviceHandle((AtsQueryPayResultV2Request) request);
case CREATEPAYORDERV3: case CREATEPAYORDERV3:
return createPayOrderV3Manager.serviceHandle((AtsCreatPayOrderV3Request) request); return createPayOrderV3Manager.serviceHandle((AtsCreatPayOrderV3Request) request);
case QUERYPAYRESULTV3: case QUERYPAYRESULTV3:

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

private WechatConfig wechatConfig; private WechatConfig wechatConfig;


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

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

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

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

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 View File

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

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

private static final String baseUrl = "https://api.mch.weixin.qq.com/vehicle/partnerpay/querystate"; private static final String baseUrl = "https://api.mch.weixin.qq.com/vehicle/partnerpay/querystate";


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

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

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

Loading…
Cancel
Save