微信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 微信退款
