package com.dobbinsoft.fw.pay.exception; import com.dobbinsoft.fw.pay.model.result.MatrixBasePayResult; import com.github.binarywang.wxpay.exception.WxPayException; import com.google.common.base.Joiner; import lombok.Data; import lombok.EqualsAndHashCode; /** *
* 微信支付异常结果类 ** */ @Data @EqualsAndHashCode(callSuper = false) public class MatrixPayException extends RuntimeException { private static final long serialVersionUID = 2214381471513460742L; /** * 自定义错误讯息. */ private String customErrorMsg; /** * 返回状态码. */ private String returnCode; /** * 返回信息. */ private String returnMsg; /** * 业务结果. */ private String resultCode; /** * 错误代码. */ private String errCode; /** * 错误代码描述. */ private String errCodeDes; /** * 微信支付返回的结果xml字符串. */ private String xmlString; /** * Instantiates a new Wx pay exception. * * @param customErrorMsg the custom error msg */ public MatrixPayException(String customErrorMsg) { super(customErrorMsg); this.customErrorMsg = customErrorMsg; } public MatrixPayException(WxPayException e) { returnCode = e.getReturnCode(); returnMsg = e.getReturnMsg(); resultCode = e.getResultCode(); errCode = e.getErrCode(); errCodeDes = e.getErrCodeDes(); xmlString = e.getXmlString(); } /** * Instantiates a new Wx pay exception. * * @param customErrorMsg the custom error msg * @param tr the tr */ public MatrixPayException(String customErrorMsg, Throwable tr) { super(customErrorMsg, tr); this.customErrorMsg = customErrorMsg; } private MatrixPayException(Builder builder) { super(builder.buildErrorMsg()); returnCode = builder.returnCode; returnMsg = builder.returnMsg; resultCode = builder.resultCode; errCode = builder.errCode; errCodeDes = builder.errCodeDes; xmlString = builder.xmlString; } /** * 通过BaseWxPayResult生成异常对象. * * @param payBaseResult the pay base result * @return the wx pay exception */ public static MatrixPayException from(MatrixBasePayResult payBaseResult) { return MatrixPayException.newBuilder() .xmlString(payBaseResult.getXmlString()) .returnMsg(payBaseResult.getReturnMsg()) .returnCode(payBaseResult.getReturnCode()) .resultCode(payBaseResult.getResultCode()) .errCode(payBaseResult.getErrCode()) .errCodeDes(payBaseResult.getErrCodeDes()) .build(); } /** * New builder builder. * * @return the builder */ public static Builder newBuilder() { return new Builder(); } /** * The type Builder. */ public static final class Builder { private String returnCode; private String returnMsg; private String resultCode; private String errCode; private String errCodeDes; private String xmlString; private Builder() { } /** * Return code builder. * * @param returnCode the return code * @return the builder */ public Builder returnCode(String returnCode) { this.returnCode = returnCode; return this; } /** * Return msg builder. * * @param returnMsg the return msg * @return the builder */ public Builder returnMsg(String returnMsg) { this.returnMsg = returnMsg; return this; } /** * Result code builder. * * @param resultCode the result code * @return the builder */ public Builder resultCode(String resultCode) { this.resultCode = resultCode; return this; } /** * Err code builder. * * @param errCode the err code * @return the builder */ public Builder errCode(String errCode) { this.errCode = errCode; return this; } /** * Err code des builder. * * @param errCodeDes the err code des * @return the builder */ public Builder errCodeDes(String errCodeDes) { this.errCodeDes = errCodeDes; return this; } /** * Xml string builder. * * @param xmlString the xml string * @return the builder */ public Builder xmlString(String xmlString) { this.xmlString = xmlString; return this; } /** * Build wx pay exception. * * @return the wx pay exception */ public MatrixPayException build() { return new MatrixPayException(this); } /** * Build error msg string. * * @return the string */ public String buildErrorMsg() { return Joiner.on(",").skipNulls().join( returnCode == null ? null : String.format("返回代码:[%s]", returnCode), returnMsg == null ? null : String.format("返回信息:[%s]", returnMsg), resultCode == null ? null : String.format("结果代码:[%s]", resultCode), errCode == null ? null : String.format("错误代码:[%s]", errCode), errCodeDes == null ? null : String.format("错误详情:[%s]", errCodeDes), xmlString == null ? null : "微信返回的原始报文:\n" + xmlString ); } } }