前言
最近在做微信支付,感觉虽然有官方的sdk但是还是需要自己认真对接,就写篇文章 来记录下吧🤭
正文
步骤一:
导入Maven依赖
<dependency>
<groupId>com.github.wechatpay-apiv3</groupId>
<artifactId>wechatpay-apache-httpclient</artifactId>
<version>0.4.9</version>
</dependency>
步骤二:
编写图片上传接口业务逻辑
PrivateKey merchantPrivateKey = PemUtil.loadPrivateKey(Files.newInputStream(Paths.get(PrivateKeyPath)));
//使用自动更新的签名验证器,不需要传入证书
verifier = new AutoUpdateCertificatesVerifier(
new WechatPay2Credentials(MerchantId, new PrivateKeySigner(MerchantSerialNumber, merchantPrivateKey)),
wxPayBaseConfig.getApiV3key().getBytes(StandardCharsets.UTF_8));
httpClient = WechatPayHttpClientBuilder.create()
.withMerchant(MerchantId, MerchantSerialNumber, merchantPrivateKey)
.withValidator(new WechatPay2Validator(verifier))
.build();
URI uri = new URI("https://api.mch.weixin.qq.com/v3/merchant/media/upload");
try (InputStream byteArrayInputStream = new ByteArrayInputStream(file.getBytes())) {
String sha256 = DigestUtils.sha256Hex(byteArrayInputStream);
byteArrayInputStream.reset();
WechatPayUploadHttpPost request = new WechatPayUploadHttpPost.Builder(uri)
.withImage(file.getOriginalFilename(), sha256, byteArrayInputStream)
.build();
try (CloseableHttpResponse response = httpClient.execute(request)) {
HttpEntity httpEntity = response.getEntity();
String json = EntityUtils.toString(httpEntity);
Map map = new Gson().fromJson(json, Map.class);
if (SC_OK == response.getStatusLine().getStatusCode()){
return success(map);
}else {
return error((String) map.get("message"));
}
}
}
划重点:
- 注意打印
responese中的body,要不然如果报错只能看到400 - 如果你用的是
MultipartFile,在加密后,记得reset(),否则会报图片上传为空
结语
这是加入掘金大家庭的第一篇文章,这个真的是程序员社区中的一股清流,希望今后和各位jym一起努力成长! 加油呀~🤭