mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2026-02-17 13:49:26 +08:00
🆕 #1639 微信支付增加v3图片上传接口
1. 实现v3上传图片功能 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/tool/chapter3_1.shtml 2. 将接口获取到的证书保存到PayConfig中,v3接口中部分字段是敏感数据,在对这些数据加密时会用到
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
package com.github.binarywang.wxpay.service;
|
||||
|
||||
import com.github.binarywang.wxpay.bean.media.ImageUploadResult;
|
||||
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 微信支付通用媒体接口.
|
||||
* </pre>
|
||||
*
|
||||
* @author zhouyongshen
|
||||
*/
|
||||
public interface MerchantMediaService {
|
||||
/**
|
||||
* <pre>
|
||||
* 通用接口-图片上传API
|
||||
* 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/tool/chapter3_1.shtml
|
||||
* 接口链接:https://api.mch.weixin.qq.com/v3/merchant/media/upload
|
||||
* </pre>
|
||||
*
|
||||
* @param imageFile 需要上传的图片文件
|
||||
* @return ImageUploadResult 微信返回的媒体文件标识Id。示例值:6uqyGjGrCf2GtyXP8bxrbuH9-aAoTjH-rKeSl3Lf4_So6kdkQu4w8BYVP3bzLtvR38lxt4PjtCDXsQpzqge_hQEovHzOhsLleGFQVRF-U_0
|
||||
* @throws WxPayException the wx pay exception
|
||||
*/
|
||||
ImageUploadResult imageUploadV3(File imageFile) throws WxPayException, IOException;
|
||||
|
||||
|
||||
}
|
||||
@@ -10,6 +10,7 @@ import com.github.binarywang.wxpay.bean.result.*;
|
||||
import com.github.binarywang.wxpay.config.WxPayConfig;
|
||||
import com.github.binarywang.wxpay.constant.WxPayConstants;
|
||||
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.URI;
|
||||
@@ -65,6 +66,16 @@ public interface WxPayService {
|
||||
*/
|
||||
String postV3(String url, String requestStr) throws WxPayException;
|
||||
|
||||
/**
|
||||
* 发送post请求,得到响应字符串.
|
||||
*
|
||||
* @param url 请求地址
|
||||
* @param httpPost 请求信息
|
||||
* @return 返回请求结果字符串 string
|
||||
* @throws WxPayException the wx pay exception
|
||||
*/
|
||||
String postV3(String url, HttpPost httpPost) throws WxPayException;
|
||||
|
||||
/**
|
||||
* 发送get V3请求,得到响应字符串.
|
||||
*
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
package com.github.binarywang.wxpay.service.impl;
|
||||
|
||||
import com.github.binarywang.wxpay.bean.media.ImageUploadResult;
|
||||
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||
import com.github.binarywang.wxpay.service.MerchantMediaService;
|
||||
import com.github.binarywang.wxpay.service.WxPayService;
|
||||
import com.github.binarywang.wxpay.v3.WechatPayUploadHttpPost;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.codec.digest.DigestUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URI;
|
||||
|
||||
/**
|
||||
* 微信支付-媒体文件上传service
|
||||
* @author zhouyongshen
|
||||
*/
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
public class MerchantMediaServiceImpl implements MerchantMediaService {
|
||||
|
||||
private final WxPayService payService;
|
||||
|
||||
@Override
|
||||
public ImageUploadResult imageUploadV3(File imageFile) throws WxPayException,IOException {
|
||||
String url = String.format("%s/v3/merchant/media/upload", this.payService.getPayBaseUrl());
|
||||
|
||||
try (FileInputStream s1 = new FileInputStream(imageFile)) {
|
||||
String sha256 = DigestUtils.sha256Hex(s1);
|
||||
try (InputStream s2 = new FileInputStream(imageFile)) {
|
||||
WechatPayUploadHttpPost request = new WechatPayUploadHttpPost.Builder(URI.create(url))
|
||||
.withImage(imageFile.getName(), sha256, s2)
|
||||
.build();
|
||||
String result = this.payService.postV3(url, request);
|
||||
return ImageUploadResult.fromJson(result);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -116,6 +116,36 @@ public class WxPayServiceApacheHttpImpl extends BaseWxPayServiceImpl {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String postV3(String url, HttpPost httpPost) throws WxPayException {
|
||||
|
||||
httpPost.setConfig(RequestConfig.custom()
|
||||
.setConnectionRequestTimeout(this.getConfig().getHttpConnectionTimeout())
|
||||
.setConnectTimeout(this.getConfig().getHttpConnectionTimeout())
|
||||
.setSocketTimeout(this.getConfig().getHttpTimeout())
|
||||
.build());
|
||||
|
||||
CloseableHttpClient httpClient = this.createApiV3HttpClient();
|
||||
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
|
||||
//v3已经改为通过状态码判断200 204 成功
|
||||
int statusCode = response.getStatusLine().getStatusCode();
|
||||
String responseString = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
|
||||
if (HttpStatus.SC_OK == statusCode || HttpStatus.SC_NO_CONTENT == statusCode) {
|
||||
this.log.info("\n【请求地址】:{}\n【响应数据】:{}", url, responseString);
|
||||
return responseString;
|
||||
} else {
|
||||
//有错误提示信息返回
|
||||
JsonObject jsonObject = GsonParser.parse(responseString);
|
||||
throw new WxPayException(jsonObject.get("message").getAsString());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
this.log.error("\n【请求地址】:{}\n【异常信息】:{}", url, e.getMessage());
|
||||
throw new WxPayException(e.getMessage(), e);
|
||||
} finally {
|
||||
httpPost.releaseConnection();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getV3(URI url) throws WxPayException {
|
||||
CloseableHttpClient httpClient = this.createApiV3HttpClient();
|
||||
|
||||
@@ -16,6 +16,7 @@ import jodd.http.ProxyInfo.ProxyType;
|
||||
import jodd.http.net.SSLSocketHttpConnectionProvider;
|
||||
import jodd.http.net.SocketHttpConnectionProvider;
|
||||
import jodd.util.Base64;
|
||||
import org.apache.http.client.methods.HttpPost;
|
||||
|
||||
/**
|
||||
* 微信支付请求实现类,jodd-http实现.
|
||||
@@ -65,6 +66,11 @@ public class WxPayServiceJoddHttpImpl extends BaseWxPayServiceImpl {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String postV3(String url, HttpPost httpPost) throws WxPayException {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getV3(URI url) throws WxPayException {
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user