这个是官方地址详细可以看这个
1.先注册微信商户平台
1.1在下面链接获取微信支付的商户api证书和商户的秘钥
商户API证书获取方法及功能介绍 - 腾讯客服 (qq.com)
1.2 在微信商户平台这获取api秘钥
1.3 获取商户号在微信商户平台
2.然后引入微信支付的官方开发包(此处是我的版本号是集中的版本管理请看实际情况选择版本)
//微信支付
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-java</artifactId>
<version>${wechatpay.version}</version>
</dependency>
2.调取微信支付
2.1 在nacos中配置对应的商户号和appid 秘钥 商户序列号等
2.2 将获取的微信证书放在项目的resources文件夹下
2.3首先创建微信支付调用的service
@Service
@AllArgsConstructor
public class WxPayServiceImpl implements WxPayService {
private final WxPayUtil wxPayUtil;
private final GoodsOrderMapper goodsOrderMapper;
private final RabbitTemplate rabbitTemplate;
@Override
public PrepayWithRequestPaymentResponse wxPay(WxPayDTO dto) {
return wxPayUtil.wxPay(dto);
}
}
2.4 创建微信支付的工具类
@Component
@ConfigurationProperties(prefix = "wx.pay")
@Data
public class WxPayUtil {
private String merchantId;
private String merchantSerialNumber;
private String apiV3Key;
//微信支付
public PrepayWithRequestPaymentResponse wxPay(WxPayDTO dto) {
URL resource = WxPayUtil.class.getResource("/apiclient_key.pem");
Config config =
new RSAAutoCertificateConfig.Builder()
.merchantId(merchantId)
.privateKeyFromPath(resource.getPath())
.merchantSerialNumber(merchantSerialNumber)
.apiV3Key(apiV3Key)
.build();
// 构建service
JsapiServiceExtension service = new JsapiServiceExtension.Builder().config(config).build();
// request.setXxx(val)设置所需参数,具体参数可见Request定义
PrepayRequest request = new PrepayRequest();
Payer payer = new Payer();
Amount amount = new Amount();
int amountInFen = dto.getTotal().multiply(new BigDecimal(100)).intValue();
payer.setOpenid(dto.getOpenid());
amount.setTotal(amountInFen);
request.setDescription(dto.getGoodsTitle());
request.setOutTradeNo(dto.getOutTradeNo());
request.setAmount(amount);
request.setPayer(payer);
request.setAppid("wxaf6dbadb6ce98429");
request.setMchid(merchantId);
request.setNotifyUrl("https://api.renshy.com/client/pay/wxCallback");
// 调用下单方法,得到应答
PrepayWithRequestPaymentResponse prepayWithRequestPaymentResponse = service.prepayWithRequestPayment(request);
// 使用微信扫描 code_url 对应的二维码,即可体验Native支付
return prepayWithRequestPaymentResponse;
}
/**
* 从 HttpServletRequest 中获取请求体。
*
* @param request HTTP 请求对象
* @return 请求体字符串
*/
public String getRequestBody(HttpServletRequest request) {
StringBuilder requestBody = new StringBuilder();
try (java.io.BufferedReader reader = request.getReader()) {
String line;
while ((line = reader.readLine()) != null) {
requestBody.append(line);
}
} catch (Exception e) {
// 处理读取请求体时可能出现的异常
e.printStackTrace();
}
return requestBody.toString();
}
}
2.5 创建controller层调用
@RestController
@AllArgsConstructor
@RequestMapping("pay")
public class PayController {
private final WxPayService wxPayService;
/**
* 调用微信支付
* @return
*/
@PostMapping("/wxPay")
@Identity(role = RoleConstants.USER)
public Result saveGoodsOrder(@RequestBody WxPayDTO dto) {
return Result.success(wxPayService.wxPay(dto));
}
}