瀏覽代碼

ats微信车主平台v3支付和查询接口完善

master
chenchaod 3 週之前
父節點
當前提交
27aecb294d

+ 3
- 9
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsCreatPayOrderV3Request.java 查看文件

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


protected String appid;//应用ID
@NotBlank
protected String appid;//应用ID spAppid;服务商应用ID


protected String spAppid;//服务商应用ID
protected String spMchId;//服务商商户号
protected String subAppid;//子商户应用ID protected String subAppid;//子商户应用ID
protected String subMchId;//子商户商户号 protected String subMchId;//子商户商户号



@NotBlank @NotBlank
private String description;//商品描述 private String description;//商品描述
@NotBlank @NotBlank
private String type;//场景类型,示例值:iOS, Android, Wap private String type;//场景类型,示例值:iOS, Android, Wap


@NotBlank @NotBlank
protected String mchid;//直连商户号
protected String mchid;//直连商户号 spMchId服务商商户号
@NotBlank @NotBlank
private String apiV3Key; // API V3密钥 private String apiV3Key; // API V3密钥
@NotBlank @NotBlank
public void validate(ErrorMsgBuilder builder) { public void validate(ErrorMsgBuilder builder) {


if (createType == 1){ if (createType == 1){
builder.validFieldNotBlank("appid", appid);
// builder.validFieldNotBlank("mchid", mchid); // builder.validFieldNotBlank("mchid", mchid);
if (TradeType.JSAPI.equals(tradeType)) { if (TradeType.JSAPI.equals(tradeType)) {
builder.validFieldNotBlank("openid", openid); builder.validFieldNotBlank("openid", openid);
} }
} }
if (createType == 2){ if (createType == 2){
builder.validFieldNotBlank("spAppid", spAppid);
builder.validFieldNotBlank("spMchId", spMchId);
builder.validFieldNotBlank("subMchId", subMchId); builder.validFieldNotBlank("subMchId", subMchId);
if (TradeType.JSAPI.equals(tradeType)) { if (TradeType.JSAPI.equals(tradeType)) {
builder.validField("notBlank", "spOpenid/subOpenid", builder.validField("notBlank", "spOpenid/subOpenid",

+ 0
- 23
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsCreatPayOrderV3Response.java 查看文件

* @Filename:AtsCreatPayOrder * @Filename:AtsCreatPayOrder
* @description: * @description:
*/ */
//@Getter
//@Setter
@Data @Data
public class AtsCreatPayOrderV3Response extends AbstractAtsResponse { public class AtsCreatPayOrderV3Response extends AbstractAtsResponse {


/** 外部订单号 */ /** 外部订单号 */
private String externalOrderNo; private String externalOrderNo;
// // APP,JSAPI参数
// private String appId; //支付渠道应用ID
// private String partnerId;//商户号
// private String prepayId;//预支付交易会话ID
// private String wxPackage;//订单详情扩展字符串
// private String noncestr;//随机字符串
// private String timestamp;//时间戳
// private String sign;//签名
// //JSAPI参数
// private String signType;//签名方式
// // H5参数
// private String h5Url;
// private String form;// 支付宝响应表单
// // Native参数
// private String codeUrl;
// private String tranPackage;// 支付宝预下单请求生成的二维码码串

//JSAPI支付参数 //JSAPI支付参数
private String signType; private String signType;
private String paySign; private String paySign;
//app //app
// private String appid;
// private String noncestr;
// private String timestamp;
private String partnerId;//商户号 private String partnerId;//商户号
private String prepayId;//预支付交易会话ID private String prepayId;//预支付交易会话ID
private String sign; private String sign;
private String timeStamp; private String timeStamp;
private String nonceStr; private String nonceStr;
private String packageValue;//订单详情扩展字符串 private String packageValue;//订单详情扩展字符串

//h5参数 //h5参数
private String h5Url; private String h5Url;
// Native参数 // Native参数

+ 1
- 3
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsQueryPayResultRequest.java 查看文件

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


@NotBlank @NotBlank
protected String mchid;//直连商户号
protected String mchid;//直连商户号 spMchid;服务商户号
@NotBlank @NotBlank
private String apiV3Key; // API V3密钥 private String apiV3Key; // API V3密钥
@NotBlank @NotBlank
@NotBlank @NotBlank
private String serialNo;// 商户证书序列号 private String serialNo;// 商户证书序列号


private String spMchid;//服务商户号
private String subMchid;//子商户号 private String subMchid;//子商户号
@Override @Override
protected void validate(ErrorMsgBuilder builder) { protected void validate(ErrorMsgBuilder builder) {


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



+ 2
- 4
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ats/weiXin/AtsQueryPayResultResponse.java 查看文件

* + 服务商 * + 服务商
*/ */


private String appid;//公众账号ID -是
private String appid;//公众账号ID - spAppid+


private String mchid;//商户号 -是
private String mchid;//商户号 - spMchid+


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


private String currency;//货币类型 否 private String currency;//货币类型 否


//==========================================服务商 //==========================================服务商
private String spAppid;//服务商APPID +是
private String spMchid;//服务商商户号 +是
private String subAppid;//子商户APPID +否 private String subAppid;//子商户APPID +否
private String subMchid;//子商户号 +是 private String subMchid;//子商户号 +是
private String spOpenid;// 用户服务商标识 +否 private String spOpenid;// 用户服务商标识 +否

+ 22
- 14
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/comm/WxPartnerPayV3.java 查看文件

private AtsCreatPayOrderV3Response getPrepayNativeResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) { private AtsCreatPayOrderV3Response getPrepayNativeResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) {
NativePayService nativeService = new NativePayService.Builder().config(config).build(); NativePayService nativeService = new NativePayService.Builder().config(config).build();
com.wechat.pay.java.service.partnerpayments.nativepay.model.PrepayRequest request = new com.wechat.pay.java.service.partnerpayments.nativepay.model.PrepayRequest(); com.wechat.pay.java.service.partnerpayments.nativepay.model.PrepayRequest request = new com.wechat.pay.java.service.partnerpayments.nativepay.model.PrepayRequest();
request.setSpAppid(req.getSpAppid());
request.setSpMchid(req.getSpMchId());
request.setSpAppid(req.getAppid());
request.setSpMchid(req.getMchid());
request.setSubAppid(req.getSubAppid()); request.setSubAppid(req.getSubAppid());
request.setSubMchid(req.getSubMchId()); request.setSubMchid(req.getSubMchId());
request.setDescription(req.getDescription()); request.setDescription(req.getDescription());
private AtsCreatPayOrderV3Response getPrepayAppResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) { private AtsCreatPayOrderV3Response getPrepayAppResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) {
AppServiceExtension appService = new AppServiceExtension.Builder().config(config).build(); AppServiceExtension appService = new AppServiceExtension.Builder().config(config).build();
com.wechat.pay.java.service.partnerpayments.app.model.PrepayRequest request = new com.wechat.pay.java.service.partnerpayments.app.model.PrepayRequest(); com.wechat.pay.java.service.partnerpayments.app.model.PrepayRequest request = new com.wechat.pay.java.service.partnerpayments.app.model.PrepayRequest();
request.setSpAppid(req.getSpAppid());
request.setSpMchid(req.getSpMchId());
request.setSpAppid(req.getAppid());
request.setSpMchid(req.getMchid());
request.setSubAppid(req.getSubAppid()); request.setSubAppid(req.getSubAppid());
request.setSubMchid(req.getSubMchId()); request.setSubMchid(req.getSubMchId());
request.setDescription(req.getDescription()); request.setDescription(req.getDescription());
sceneInfo.setPayerClientIp(req.getPayerClientIp()); sceneInfo.setPayerClientIp(req.getPayerClientIp());
request.setSceneInfo(sceneInfo); request.setSceneInfo(sceneInfo);
} }
com.wechat.pay.java.service.partnerpayments.app.model.PrepayWithRequestPaymentResponse prepay = appService.prepayWithRequestPayment(request, req.getSpAppid());
com.wechat.pay.java.service.partnerpayments.app.model.PrepayWithRequestPaymentResponse prepay = appService.prepayWithRequestPayment(request, req.getAppid());
AtsCreatPayOrderV3Response orderV3Response = new AtsCreatPayOrderV3Response(); AtsCreatPayOrderV3Response orderV3Response = new AtsCreatPayOrderV3Response();
orderV3Response.setAppId(prepay.getAppid()); orderV3Response.setAppId(prepay.getAppid());
orderV3Response.setPartnerId(prepay.getPartnerId()); orderV3Response.setPartnerId(prepay.getPartnerId());
private AtsCreatPayOrderV3Response getPrepayJsapiResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) { private AtsCreatPayOrderV3Response getPrepayJsapiResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) {
JsapiServiceExtension jsapiService = new JsapiServiceExtension.Builder().config(config).build(); JsapiServiceExtension jsapiService = new JsapiServiceExtension.Builder().config(config).build();
PrepayRequest request = new PrepayRequest(); PrepayRequest request = new PrepayRequest();
request.setSpAppid(req.getSpAppid());
request.setSpMchid(req.getSpMchId());
request.setSpAppid(req.getAppid());
request.setSpMchid(req.getMchid());
request.setSubAppid(req.getSubAppid()); request.setSubAppid(req.getSubAppid());
request.setSubMchid(req.getSubMchId()); request.setSubMchid(req.getSubMchId());
request.setDescription(req.getDescription()); request.setDescription(req.getDescription());
} }
request.setAttach(req.getAttach()); request.setAttach(req.getAttach());
//请求 //请求
PrepayWithRequestPaymentResponse prepay = jsapiService.prepayWithRequestPayment(request, req.getSpAppid());
PrepayWithRequestPaymentResponse prepay = jsapiService.prepayWithRequestPayment(request, req.getAppid());
AtsCreatPayOrderV3Response orderV3Response = new AtsCreatPayOrderV3Response(); AtsCreatPayOrderV3Response orderV3Response = new AtsCreatPayOrderV3Response();
orderV3Response.setAppId(prepay.getAppId()); orderV3Response.setAppId(prepay.getAppId());
orderV3Response.setTimeStamp(prepay.getTimeStamp()); orderV3Response.setTimeStamp(prepay.getTimeStamp());
private AtsCreatPayOrderV3Response getPrepayMwebResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) { private AtsCreatPayOrderV3Response getPrepayMwebResponse(AtsCreatPayOrderV3Request req, RSAAutoCertificateConfig config) {
H5Service h5Service = new H5Service.Builder().config(config).build(); H5Service h5Service = new H5Service.Builder().config(config).build();
com.wechat.pay.java.service.partnerpayments.h5.model.PrepayRequest request = new com.wechat.pay.java.service.partnerpayments.h5.model.PrepayRequest(); com.wechat.pay.java.service.partnerpayments.h5.model.PrepayRequest request = new com.wechat.pay.java.service.partnerpayments.h5.model.PrepayRequest();
request.setSpAppid(req.getSpAppid());
request.setSpMchid(req.getSpMchId());
request.setSpAppid(req.getAppid());
request.setSpMchid(req.getMchid());
request.setSubAppid(req.getSubAppid()); request.setSubAppid(req.getSubAppid());
request.setSubMchid(req.getSubMchId()); request.setSubMchid(req.getSubMchId());
request.setDescription(req.getDescription()); request.setDescription(req.getDescription());
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.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(); 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.setOutTradeNo(req.getExternalOrderNo());
request.setSpMchid(req.getSpMchid());
request.setSpMchid(req.getMchid());
request.setSubMchid(req.getSubMchid()); request.setSubMchid(req.getSubMchid());
com.wechat.pay.java.service.partnerpayments.nativepay.model.Transaction transaction = service.queryOrderByOutTradeNo(request); com.wechat.pay.java.service.partnerpayments.nativepay.model.Transaction transaction = service.queryOrderByOutTradeNo(request);
AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse());
response.setAppid(transaction.getSpAppid());
response.setMchid(transaction.getSpMchid());
if (transaction.getPayer() != null) { if (transaction.getPayer() != null) {
response.setSpOpenid(transaction.getPayer().getSpOpenid()); response.setSpOpenid(transaction.getPayer().getSpOpenid());
response.setSubOpenid(transaction.getPayer().getSubOpenid()); response.setSubOpenid(transaction.getPayer().getSubOpenid());
com.wechat.pay.java.service.partnerpayments.app.model.QueryOrderByOutTradeNoRequest request = com.wechat.pay.java.service.partnerpayments.app.model.QueryOrderByOutTradeNoRequest request =
new com.wechat.pay.java.service.partnerpayments.app.model.QueryOrderByOutTradeNoRequest(); new com.wechat.pay.java.service.partnerpayments.app.model.QueryOrderByOutTradeNoRequest();
request.setOutTradeNo(req.getExternalOrderNo()); request.setOutTradeNo(req.getExternalOrderNo());
request.setSpMchid(req.getSpMchid());
request.setSpMchid(req.getMchid());
request.setSubMchid(req.getSubMchid()); request.setSubMchid(req.getSubMchid());
com.wechat.pay.java.service.partnerpayments.app.model.Transaction transaction = appService.queryOrderByOutTradeNo(request); com.wechat.pay.java.service.partnerpayments.app.model.Transaction transaction = appService.queryOrderByOutTradeNo(request);
AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse());
response.setAppid(transaction.getSpAppid());
response.setMchid(transaction.getSpMchid());
if (transaction.getPayer() != null) { if (transaction.getPayer() != null) {
response.setSpOpenid(transaction.getPayer().getSpOpenid()); response.setSpOpenid(transaction.getPayer().getSpOpenid());
response.setSubOpenid(transaction.getPayer().getSubOpenid()); response.setSubOpenid(transaction.getPayer().getSubOpenid());
com.wechat.pay.java.service.partnerpayments.jsapi.model.QueryOrderByOutTradeNoRequest request = com.wechat.pay.java.service.partnerpayments.jsapi.model.QueryOrderByOutTradeNoRequest request =
new com.wechat.pay.java.service.partnerpayments.jsapi.model.QueryOrderByOutTradeNoRequest(); new com.wechat.pay.java.service.partnerpayments.jsapi.model.QueryOrderByOutTradeNoRequest();
request.setOutTradeNo(req.getExternalOrderNo()); request.setOutTradeNo(req.getExternalOrderNo());
request.setSpMchid(req.getSpMchid());
request.setSpMchid(req.getMchid());
request.setSubMchid(req.getSubMchid()); request.setSubMchid(req.getSubMchid());
com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction transaction = jsapiService.queryOrderByOutTradeNo(request); com.wechat.pay.java.service.partnerpayments.jsapi.model.Transaction transaction = jsapiService.queryOrderByOutTradeNo(request);
AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse());
response.setAppid(transaction.getSpAppid());
response.setMchid(transaction.getSpMchid());
if (transaction.getPayer() != null) { if (transaction.getPayer() != null) {
response.setSpOpenid(transaction.getPayer().getSpOpenid()); response.setSpOpenid(transaction.getPayer().getSpOpenid());
response.setSubOpenid(transaction.getPayer().getSubOpenid()); response.setSubOpenid(transaction.getPayer().getSubOpenid());
com.wechat.pay.java.service.partnerpayments.h5.model.QueryOrderByOutTradeNoRequest request = com.wechat.pay.java.service.partnerpayments.h5.model.QueryOrderByOutTradeNoRequest request =
new com.wechat.pay.java.service.partnerpayments.h5.model.QueryOrderByOutTradeNoRequest(); new com.wechat.pay.java.service.partnerpayments.h5.model.QueryOrderByOutTradeNoRequest();
request.setOutTradeNo(req.getExternalOrderNo()); request.setOutTradeNo(req.getExternalOrderNo());
request.setSpMchid(req.getSpMchid());
request.setSpMchid(req.getMchid());
request.setSubMchid(req.getSubMchid()); request.setSubMchid(req.getSubMchid());
com.wechat.pay.java.service.partnerpayments.h5.model.Transaction transaction = h5Service.queryOrderByOutTradeNo(request); com.wechat.pay.java.service.partnerpayments.h5.model.Transaction transaction = h5Service.queryOrderByOutTradeNo(request);
AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse()); AtsQueryPayResultResponse response = copyProperties(transaction, new AtsQueryPayResultResponse());
response.setAppid(transaction.getSpAppid());
response.setMchid(transaction.getSpMchid());
if (transaction.getPayer() != null) { if (transaction.getPayer() != null) {
response.setSpOpenid(transaction.getPayer().getSpOpenid()); response.setSpOpenid(transaction.getPayer().getSpOpenid());
response.setSubOpenid(transaction.getPayer().getSubOpenid()); response.setSubOpenid(transaction.getPayer().getSubOpenid());

+ 1
- 5
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/handler/WinXinServiceHandler.java 查看文件

package cn.com.taiji.ats.manager.handler; 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.ats.manager.weixin.VehicleUserStateManager;
import cn.com.taiji.ats.manager.weixin.WxMpIsSubscribedManager;
import cn.com.taiji.ats.manager.weixin.*;
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;

+ 11
- 117
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/weixin/CreatePayOrderV3Manager.java 查看文件

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


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.AbstractManager;
import cn.com.taiji.common.manager.net.http.ServiceHandleException; 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.AtsCreatPayOrderV3Request;
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsCreatPayOrderV3Response; import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsCreatPayOrderV3Response;
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError;
import com.github.binarywang.wxpay.bean.request.WxPayPartnerUnifiedOrderV3Request;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request;
import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderV3Result;
import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;


import java.util.Base64;


/** /**
* @Author:ChenChao * @Author:ChenChao
*/ */
@Service @Service
public class CreatePayOrderV3Manager extends AbstractManager { public class CreatePayOrderV3Manager extends AbstractManager {
@Autowired
private WxPayService wxPayService;


@Autowired
private WxPayV3 wxPayV3;
@Autowired
private WxPartnerPayV3 wxPartnerPayV3;
public AtsCreatPayOrderV3Response serviceHandle(AtsCreatPayOrderV3Request req) throws ServiceHandleException { public AtsCreatPayOrderV3Response serviceHandle(AtsCreatPayOrderV3Request req) throws ServiceHandleException {
logger.info("微信支付下单{}",req.toJson());
//格式校验 //格式校验
req.validate(); req.validate();
//配置信息
WxPayConfig wxPayConfig = initConfig(req);
wxPayService.setConfig(wxPayConfig);
TradeTypeEnum tradeType= null;
Object orderV3 = null;
switch (req.getTradeType()){
case NATIVE:
tradeType = TradeTypeEnum.NATIVE;
break;
case JSAPI:
tradeType = TradeTypeEnum.JSAPI;
break;
case MWEB:
tradeType = TradeTypeEnum.H5;
break;
case APP:
tradeType = TradeTypeEnum.APP;
break;
default:
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("不支持的支付类型");
}
AtsCreatPayOrderV3Response orderV3Response = new AtsCreatPayOrderV3Response();
if (req.getCreateType() == 1){//单独下单
WxPayUnifiedOrderV3Request orderV3Request = getWxPayUnifiedOrderV3Request(req);
try {
orderV3 = wxPayService.createOrderV3(tradeType, orderV3Request);
} catch (WxPayException e) {
logger.error("微信支付V3统一单独下单失败:{}", e.getMessage());
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException(e.getMessage());
}
if (req.getCreateType() == 1){
return wxPayV3.getPrepayResponse(req);
}else{
return wxPartnerPayV3.getPrepayResponse(req);
} }
else
if(req.getCreateType() == 2){//商户下单
WxPayPartnerUnifiedOrderV3Request serviceOrderV3Request = getWxPayPartnerUnifiedOrderV3Request(req);
try {
orderV3 = wxPayService.createPartnerOrderV3(tradeType, serviceOrderV3Request);
} catch (WxPayException e) {
logger.error("微信支付V3统一服务商下单失败:{}", e.getMessage());
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException(e.getMessage());
}
}
copyProperties(orderV3, orderV3Response);
if (TradeTypeEnum.APP.equals(tradeType)) {
WxPayUnifiedOrderV3Result.AppResult appResult = (WxPayUnifiedOrderV3Result.AppResult) orderV3;
orderV3Response.setAppId(appResult.getAppid());
orderV3Response.setTimeStamp(appResult.getTimestamp());
orderV3Response.setNonceStr(appResult.getNoncestr());
}
if (TradeTypeEnum.NATIVE.equals(tradeType)) orderV3Response.setCodeUrl(orderV3.toString());
if (TradeTypeEnum.H5.equals(tradeType)) orderV3Response.setH5Url(orderV3.toString());
orderV3Response.setExternalOrderNo(req.getOutTradeNo());
return orderV3Response;
} }






//组装v3单独下单请求微信数据
private WxPayUnifiedOrderV3Request getWxPayUnifiedOrderV3Request(AtsCreatPayOrderV3Request req) {
WxPayUnifiedOrderV3Request orderV3Request = copyProperties(req, new WxPayUnifiedOrderV3Request());
WxPayUnifiedOrderV3Request.Amount amount = new WxPayUnifiedOrderV3Request.Amount();
amount.setTotal(req.getTotal());
amount.setCurrency(req.getCurrency());
orderV3Request.setAmount(amount);
WxPayUnifiedOrderV3Request.Payer payer = new WxPayUnifiedOrderV3Request.Payer();
payer.setOpenid(req.getOpenid());
orderV3Request.setPayer(payer);
if (hasText(req.getPayerClientIp())) {
WxPayUnifiedOrderV3Request.SceneInfo sceneInfo = new WxPayUnifiedOrderV3Request.SceneInfo();
sceneInfo.setPayerClientIp(req.getPayerClientIp());
sceneInfo.setH5Info(new WxPayUnifiedOrderV3Request.H5Info().setType(req.getType()));
orderV3Request.setSceneInfo(sceneInfo);
}
return orderV3Request;
}

//组装v3服务商下单请求微信数据
private WxPayPartnerUnifiedOrderV3Request getWxPayPartnerUnifiedOrderV3Request(AtsCreatPayOrderV3Request req) {
WxPayPartnerUnifiedOrderV3Request serviceOrderV3Request = copyProperties(req, new WxPayPartnerUnifiedOrderV3Request());
WxPayPartnerUnifiedOrderV3Request.Amount amount = new WxPayPartnerUnifiedOrderV3Request.Amount();
amount.setTotal(req.getTotal());
amount.setCurrency(req.getCurrency());
serviceOrderV3Request.setAmount(amount);
WxPayPartnerUnifiedOrderV3Request.Payer payer = new WxPayPartnerUnifiedOrderV3Request.Payer();
payer.setSubOpenid(req.getSubOpenid());
payer.setSpOpenid(req.getSpOpenid());
serviceOrderV3Request.setPayer(payer);
if (hasText(req.getPayerClientIp())) {
WxPayPartnerUnifiedOrderV3Request.SceneInfo sceneInfo = new WxPayPartnerUnifiedOrderV3Request.SceneInfo();
sceneInfo.setPayerClientIp(req.getPayerClientIp());
sceneInfo.setH5Info(new WxPayPartnerUnifiedOrderV3Request.H5Info().setType(req.getType()));
serviceOrderV3Request.setSceneInfo(sceneInfo);
}
return serviceOrderV3Request;
}

//配置信息
private WxPayConfig initConfig(AtsCreatPayOrderV3Request req) {
WxPayConfig wxPayConfig = new WxPayConfig();
wxPayConfig.setAppId(req.getAppid());
wxPayConfig.setMchId(req.getMchid());
wxPayConfig.setMchKey(req.getApiV3Key());
wxPayConfig.setSubAppId(req.getSubAppid());
wxPayConfig.setSubMchId(req.getSubMchId());
wxPayConfig.setNotifyUrl(req.getNotifyUrl());
wxPayConfig.setApiV3Key(req.getApiV3Key());
String s = Base64.getEncoder().encodeToString(req.getPrivateKey().getBytes());
wxPayConfig.setPrivateKeyString(s);
wxPayConfig.setCertSerialNo(req.getSerialNo());
if (hasText(req.getApiV3Key())) wxPayConfig.setApiV3Key(req.getApiV3Key());
return wxPayConfig;
}
} }

+ 0
- 39
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/manager/weixin/CreatePayOrderV3Manager2.java 查看文件

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

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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


/**
* @Author:ChenChao
* @Date:2025/5/12 10:04
* @Filename:CreatePayOrderV3Manager
* @description:
*/
@Service
public class CreatePayOrderV3Manager2 extends AbstractManager {

@Autowired
private WxPayV3 wxPayV3;
@Autowired
private WxPartnerPayV3 wxPartnerPayV3;
public AtsCreatPayOrderV3Response serviceHandle(AtsCreatPayOrderV3Request req) throws ServiceHandleException {
logger.info("微信支付下单{}",req.toJson());
//格式校验
req.validate();
if (req.getCreateType() == 1){
return wxPayV3.getPrepayResponse(req);
}else{
return wxPartnerPayV3.getPrepayResponse(req);
}
}



}

+ 5
- 7
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/web/TestController.java 查看文件

package cn.com.taiji.ats.web; package cn.com.taiji.ats.web;


import cn.com.taiji.ats.manager.weixin.CreatePayOrderV3Manager2;
import cn.com.taiji.ats.manager.weixin.CreatePayOrderV3Manager;
import cn.com.taiji.ats.manager.weixin.QueryPayResultManager; import cn.com.taiji.ats.manager.weixin.QueryPayResultManager;
import cn.com.taiji.ats.manager.weixin.VehicleUserStateManager; import cn.com.taiji.ats.manager.weixin.VehicleUserStateManager;
import cn.com.taiji.common.manager.net.http.ServiceHandleException; import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import com.google.zxing.common.BitMatrix; import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel; import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;


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


public class TestController { public class TestController {


@Autowired @Autowired
private CreatePayOrderV3Manager2 createPayOrderV3Manager2;
private CreatePayOrderV3Manager createPayOrderV3Manager2;
@RequestMapping(value = "/common/test", method = {RequestMethod.GET}) @RequestMapping(value = "/common/test", method = {RequestMethod.GET})
public AtsCreatPayOrderV3Response test(@RequestBody AtsCreatPayOrderV3Request request) { public AtsCreatPayOrderV3Response test(@RequestBody AtsCreatPayOrderV3Request request) {
// request.setApiV3Key("fe24336ea45045adb707dc2c2310416a"); // request.setApiV3Key("fe24336ea45045adb707dc2c2310416a");
} }
return atsVehicleUserStateResponse; return atsVehicleUserStateResponse;
} }
//服务商 codeUrl = weixin://wxpay/bizpayurl?pr=14g4kOez1
@GetMapping("qrCode") @GetMapping("qrCode")
public void qrcode(HttpServletResponse response) 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";
BufferedImage image = createImage(data,200,200);
BufferedImage image = createImage(model.getData(), 200,200);
ImageIO.write(image, "png", response.getOutputStream()); ImageIO.write(image, "png", response.getOutputStream());
} }



+ 15
- 0
zhywpt-service-ats/src/main/java/cn/com/taiji/ats/web/TestModel.java 查看文件

package cn.com.taiji.ats.web;

import lombok.Data;

/**
* @Author:ChenChao
* @Date:2025/5/16 16:27
* @Filename:TestModel
* @description:
*/
@Data
public class TestModel {

private String data;
}

Loading…
取消
儲存