微信V3支付 订单查询 退款查询
本编在对接V3支付的时候连连撞头,希望后来人能少走点弯路,如果有bug请海涵啊,希望各位大佬也能给我点意见,话不多说上代码:
service层
相关的配置:
package com.tiyaa.mall.pay.config; import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder; import com.wechat.pay.contrib.apache.httpclient.auth.PrivateKeySigner; import com.wechat.pay.contrib.apache.httpclient.auth.ScheduledUpdateCertificatesVerifier; import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Credentials; import com.wechat.pay.contrib.apache.httpclient.auth.WechatPay2Validator; import com.wechat.pay.contrib.apache.httpclient.util.PemUtil; import org.apache.http.impl.client.CloseableHttpClient; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.security.PrivateKey; /** * @author xyl * @date 2022/8/23 10:15 * @explain */ @Configuration public class WeChatPayConfig extends WeChatConfig { /** * 获取商户的私钥文件 * * @return */ public PrivateKey getPrivateKey() { InputStream resourceAsStream = this.getClass().getResourceAsStream("/cert/apiclient_key.pem"); return PemUtil.loadPrivateKey(resourceAsStream); } /** * 获取签名验证器 * * @return */ @Bean public ScheduledUpdateCertificatesVerifier getVerifier() { //获取商户私钥 PrivateKey privateKey = getPrivateKey(); System.out.println(privateKey); //私钥签名对象 PrivateKeySigner privateKeySigner = new PrivateKeySigner(serialNo, privateKey); //身份认证对象 WechatPay2Credentials wechatPay2Credentials = new WechatPay2Credentials(mchId, privateKeySigner); // 使用定时更新的签名验证器,不需要传入证书 return new ScheduledUpdateCertificatesVerifier( wechatPay2Credentials, apiV3Key.getBytes(StandardCharsets.UTF_8)); } /** * 获取http请求对象 * * @param verifier * @return */ @Bean(name = "wxPayClient") public CloseableHttpClient getWxPayClient(ScheduledUpdateCertificatesVerifier verifier) { //获取商户私钥 PrivateKey privateKey = getPrivateKey(); WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create() .withMerchant(mchId, serialNo, privateKey) .withValidator(new WechatPay2Validator(verifier)); // ... 接下来,你仍然可以通过builder设置各种参数,来配置你的HttpClient // 通过WeChatPayHttpClientBuilder构造的HttpClient,会自动的处理签名和验签,并进行证书自动更新 return builder.build(); } /** * 获取HttpClient,无需进行应答签名验证,跳过验签的流程 */ @Bean(name = "wxPayNoSignClient") public CloseableHttpClient getWxPayNoSignClient() { //获取商户私钥 PrivateKey privateKey = getPrivateKey(); //用于构造HttpClient WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create() //设置商户信息 .withMerchant(mchId, serialNo, privateKey) //无需进行签名验证、通过withValidator((response) -> true)实现 .withValidator((response) -> true); // 通过WeChatPayHttpClientBuilder构造的HttpClient,会自动的处理签名和验签,并进行证书自动更新 return builder.build(); } }
DTO:
package com.tiyaa.mall.pay.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * @author xyl * @date 2022/7/11 17:16 * @explain */ @Data @ApiModel("下单dto") public class BuyCreateDto { @ApiModelProperty(value = "商户订单号(自己的订单号)") private String outTradeNo; @ApiModelProperty(value = "支付的类型字典11") private Integer payType; @ApiModelProperty(value = "支付金额") private Long total; @ApiModelProperty(value = "用户OpenId") private String openId; public BuyCreateDto() { } public BuyCreateDto(String outTradeNo, Integer payType, Long total, String openId) { this.outTradeNo = outTradeNo; this.payType = payType; this.total = total; this.openId = openId; } }
枚举:
package com.tiyaa.mall.pay.enums; import lombok.AllArgsConstructor; import lombok.Getter; /** * @author xyl * @date 2022/7/12 9:05 * @explain */ @AllArgsConstructor @Getter public enum WeChatApiTypeEnum { /** * 获取商户平台证书的URL */ GET_CERTIFICATES("/v3/certificates"), /** * JSAPI下单 */ JSAPI_PAY("/v3/pay/transactions/jsapi"), /** * APP下单 */ APP_PAY("/v3/pay/transactions/app"), /** * H5下单 */ H5_PAY("/v3/pay/transactions/h5"), /** * 订单查询 */ QUERY_PAY("/v3/pay/transactions/out-trade-no/"), /** * 订单查询 */ QUERY_REFUND("/v3/refund/domestic/refunds/"); /** * 类型 */ private final String type; }
vo:
因为阿里代码规范,还设置了点常量
当前支付 和 退款查询 因为小编被安排了其他事情,对接支付后续在更新
上一篇:
uniapp开发微信小程序-2.页面制作
下一篇:
weixin-java-pay 微信退款