Skip to content

Commit 605d77d

Browse files
authored
🆕 #3207 【开放平台】 新增小程序认证上传补充材料的接口
1 parent 8610c0f commit 605d77d

File tree

7 files changed

+242
-0
lines changed

7 files changed

+242
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package cn.binarywang.wx.miniapp.bean;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
import lombok.Data;
5+
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
6+
7+
import java.io.Serializable;
8+
9+
/**
10+
* 小程序认证上传补充材料
11+
*
12+
* @author penhuozhu
13+
* @since 2024/01/07
14+
*/
15+
@Data
16+
public class WxMaUploadAuthMaterialResult implements Serializable {
17+
private static final long serialVersionUID = 1L;
18+
19+
private String type;
20+
21+
@SerializedName("mediaid")
22+
private String mediaId;
23+
24+
public static WxMaUploadAuthMaterialResult fromJson(String json) {
25+
return WxGsonBuilder.create().fromJson(json, WxMaUploadAuthMaterialResult.class);
26+
}
27+
28+
@Override
29+
public String toString() {
30+
return WxGsonBuilder.create().toJson(this);
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package cn.binarywang.wx.miniapp.executor;
2+
3+
import cn.binarywang.wx.miniapp.bean.WxMaUploadAuthMaterialResult;
4+
import me.chanjar.weixin.common.enums.WxType;
5+
import me.chanjar.weixin.common.error.WxError;
6+
import me.chanjar.weixin.common.error.WxErrorException;
7+
import me.chanjar.weixin.common.util.http.RequestHttp;
8+
import me.chanjar.weixin.common.util.http.apache.Utf8ResponseHandler;
9+
import org.apache.http.HttpEntity;
10+
import org.apache.http.HttpHost;
11+
import org.apache.http.client.config.RequestConfig;
12+
import org.apache.http.client.methods.CloseableHttpResponse;
13+
import org.apache.http.client.methods.HttpPost;
14+
import org.apache.http.entity.mime.HttpMultipartMode;
15+
import org.apache.http.entity.mime.MultipartEntityBuilder;
16+
import org.apache.http.impl.client.CloseableHttpClient;
17+
18+
import java.io.File;
19+
import java.io.IOException;
20+
21+
/**
22+
* @author penhuozhu
23+
* @since 2024/01/07
24+
*/
25+
public class ApacheUploadAuthMaterialRequestExecutor extends UploadAuthMaterialRequestExecutor<CloseableHttpClient, HttpHost> {
26+
27+
public ApacheUploadAuthMaterialRequestExecutor(RequestHttp requestHttp) {
28+
super(requestHttp);
29+
}
30+
31+
@Override
32+
public WxMaUploadAuthMaterialResult execute(String uri, File file, WxType wxType) throws WxErrorException, IOException {
33+
HttpPost httpPost = new HttpPost(uri);
34+
if (requestHttp.getRequestHttpProxy() != null) {
35+
RequestConfig config = RequestConfig.custom().setProxy(requestHttp.getRequestHttpProxy()).build();
36+
httpPost.setConfig(config);
37+
}
38+
if (file != null) {
39+
HttpEntity entity = MultipartEntityBuilder
40+
.create()
41+
.addBinaryBody("media", file)
42+
.setMode(HttpMultipartMode.RFC6532)
43+
.build();
44+
httpPost.setEntity(entity);
45+
}
46+
try (CloseableHttpResponse response = requestHttp.getRequestHttpClient().execute(httpPost)) {
47+
String responseContent = Utf8ResponseHandler.INSTANCE.handleResponse(response);
48+
WxError error = WxError.fromJson(responseContent, wxType);
49+
if (error.getErrorCode() != 0) {
50+
throw new WxErrorException(error);
51+
}
52+
return WxMaUploadAuthMaterialResult.fromJson(responseContent);
53+
} finally {
54+
httpPost.releaseConnection();
55+
}
56+
}
57+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package cn.binarywang.wx.miniapp.executor;
2+
3+
import cn.binarywang.wx.miniapp.bean.WxMaUploadAuthMaterialResult;
4+
import jodd.http.HttpConnectionProvider;
5+
import jodd.http.HttpRequest;
6+
import jodd.http.HttpResponse;
7+
import jodd.http.ProxyInfo;
8+
import me.chanjar.weixin.common.enums.WxType;
9+
import me.chanjar.weixin.common.error.WxError;
10+
import me.chanjar.weixin.common.error.WxErrorException;
11+
import me.chanjar.weixin.common.util.http.RequestHttp;
12+
13+
import java.io.File;
14+
import java.io.IOException;
15+
import java.nio.charset.StandardCharsets;
16+
17+
/**
18+
* @author penhuozhu
19+
* @since 2024/01/07
20+
*/
21+
public class JoddHttpUploadAuthMaterialRequestExecutor extends UploadAuthMaterialRequestExecutor<HttpConnectionProvider, ProxyInfo> {
22+
23+
public JoddHttpUploadAuthMaterialRequestExecutor(RequestHttp requestHttp) {
24+
super(requestHttp);
25+
}
26+
27+
@Override
28+
public WxMaUploadAuthMaterialResult execute(String uri, File file, WxType wxType) throws WxErrorException, IOException {
29+
HttpRequest request = HttpRequest.post(uri);
30+
if (requestHttp.getRequestHttpProxy() != null) {
31+
requestHttp.getRequestHttpClient().useProxy(requestHttp.getRequestHttpProxy());
32+
}
33+
request.withConnectionProvider(requestHttp.getRequestHttpClient());
34+
request.form("media", file);
35+
HttpResponse response = request.send();
36+
response.charset(StandardCharsets.UTF_8.name());
37+
38+
String responseContent = response.bodyText();
39+
WxError error = WxError.fromJson(responseContent, wxType);
40+
if (error.getErrorCode() != 0) {
41+
throw new WxErrorException(error);
42+
}
43+
return WxMaUploadAuthMaterialResult.fromJson(responseContent);
44+
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package cn.binarywang.wx.miniapp.executor;
2+
3+
import cn.binarywang.wx.miniapp.bean.WxMaUploadAuthMaterialResult;
4+
import me.chanjar.weixin.common.enums.WxType;
5+
import me.chanjar.weixin.common.error.WxError;
6+
import me.chanjar.weixin.common.error.WxErrorException;
7+
import me.chanjar.weixin.common.util.http.RequestHttp;
8+
import me.chanjar.weixin.common.util.http.okhttp.OkHttpProxyInfo;
9+
import okhttp3.*;
10+
11+
import java.io.File;
12+
import java.io.IOException;
13+
14+
/**
15+
* @author penhuozhu
16+
* @since 2024/01/07
17+
*/
18+
public class OkHttpUploadAuthMaterialRequestExecutor extends UploadAuthMaterialRequestExecutor<OkHttpClient, OkHttpProxyInfo> {
19+
20+
public OkHttpUploadAuthMaterialRequestExecutor(RequestHttp requestHttp) {
21+
super(requestHttp);
22+
}
23+
24+
@Override
25+
public WxMaUploadAuthMaterialResult execute(String uri, File file, WxType wxType) throws WxErrorException, IOException {
26+
27+
RequestBody body = new MultipartBody.Builder()
28+
.setType(MediaType.parse("multipart/form-data"))
29+
.addFormDataPart("media",
30+
file.getName(),
31+
RequestBody.create(MediaType.parse("application/octet-stream"), file))
32+
.build();
33+
Request request = new Request.Builder().url(uri).post(body).build();
34+
35+
Response response = requestHttp.getRequestHttpClient().newCall(request).execute();
36+
String responseContent = response.body().string();
37+
WxError error = WxError.fromJson(responseContent, wxType);
38+
if (error.getErrorCode() != 0) {
39+
throw new WxErrorException(error);
40+
}
41+
return WxMaUploadAuthMaterialResult.fromJson(responseContent);
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package cn.binarywang.wx.miniapp.executor;
2+
3+
import cn.binarywang.wx.miniapp.bean.WxMaUploadAuthMaterialResult;
4+
import me.chanjar.weixin.common.enums.WxType;
5+
import me.chanjar.weixin.common.error.WxErrorException;
6+
import me.chanjar.weixin.common.util.http.RequestExecutor;
7+
import me.chanjar.weixin.common.util.http.RequestHttp;
8+
import me.chanjar.weixin.common.util.http.ResponseHandler;
9+
10+
import java.io.File;
11+
import java.io.IOException;
12+
13+
/**
14+
* 小程序认证上传补充材料
15+
* 上传媒体文件请求执行器.
16+
* 请求的参数是File, 返回的结果是String
17+
*
18+
* @author penhuozhu
19+
* @since 2024/01/07
20+
*/
21+
public abstract class UploadAuthMaterialRequestExecutor<H, P> implements RequestExecutor<WxMaUploadAuthMaterialResult, File> {
22+
protected RequestHttp<H, P> requestHttp;
23+
24+
public UploadAuthMaterialRequestExecutor(RequestHttp requestHttp) {
25+
this.requestHttp = requestHttp;
26+
}
27+
28+
@Override
29+
public void execute(String uri, File data, ResponseHandler<WxMaUploadAuthMaterialResult> handler, WxType wxType) throws WxErrorException, IOException {
30+
handler.handle(this.execute(uri, data, wxType));
31+
}
32+
33+
public static RequestExecutor<WxMaUploadAuthMaterialResult, File> create(RequestHttp requestHttp) {
34+
switch (requestHttp.getRequestType()) {
35+
case APACHE_HTTP:
36+
return new ApacheUploadAuthMaterialRequestExecutor(requestHttp);
37+
case JODD_HTTP:
38+
return new JoddHttpUploadAuthMaterialRequestExecutor(requestHttp);
39+
case OK_HTTP:
40+
return new OkHttpUploadAuthMaterialRequestExecutor(requestHttp);
41+
default:
42+
return null;
43+
}
44+
}
45+
}

weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenMaService.java

+13
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import cn.binarywang.wx.miniapp.api.WxMaService;
44
import cn.binarywang.wx.miniapp.bean.WxMaAuditMediaUploadResult;
5+
import cn.binarywang.wx.miniapp.bean.WxMaUploadAuthMaterialResult;
56
import me.chanjar.weixin.common.error.WxErrorException;
67
import me.chanjar.weixin.open.bean.ma.WxMaPrefetchDomain;
78
import me.chanjar.weixin.open.bean.ma.WxMaScheme;
@@ -273,6 +274,11 @@ public interface WxOpenMaService extends WxMaService {
273274
*/
274275
String API_WX_APPLY_LIVE_INFO = "https://api.weixin.qq.com/wxa/business/applyliveinfo";
275276

277+
/**
278+
* 小程序认证上传补充材料
279+
*/
280+
String API_UPLOAD_AUTH_MATERIAL = "https://api.weixin.qq.com/wxa/sec/uploadauthmaterial";
281+
276282
/**
277283
* 获得小程序的域名配置信息
278284
*
@@ -752,4 +758,11 @@ WxOpenMaDomainResult modifyDomain(String action, List<String> requestDomains, Li
752758
*/
753759
WxOpenMaApplyLiveInfoResult applyLiveInfo() throws WxErrorException;
754760

761+
/**
762+
* 小程序认证上传补充材料
763+
*
764+
* @return
765+
*/
766+
WxMaUploadAuthMaterialResult uploadAuthMaterial(File file) throws WxErrorException;
767+
755768
}

weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenMaServiceImpl.java

+7
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
55
import cn.binarywang.wx.miniapp.bean.WxMaAuditMediaUploadResult;
66
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
7+
import cn.binarywang.wx.miniapp.bean.WxMaUploadAuthMaterialResult;
78
import cn.binarywang.wx.miniapp.config.WxMaConfig;
89
import cn.binarywang.wx.miniapp.executor.AuditMediaUploadRequestExecutor;
10+
import cn.binarywang.wx.miniapp.executor.UploadAuthMaterialRequestExecutor;
911
import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder;
1012
import com.google.gson.Gson;
1113
import com.google.gson.GsonBuilder;
@@ -466,4 +468,9 @@ public WxOpenMaApplyLiveInfoResult applyLiveInfo() throws WxErrorException {
466468
String response = post(API_WX_APPLY_LIVE_INFO, GSON.toJson(params));
467469
return WxMaGsonBuilder.create().fromJson(response, WxOpenMaApplyLiveInfoResult.class);
468470
}
471+
472+
@Override
473+
public WxMaUploadAuthMaterialResult uploadAuthMaterial(File file) throws WxErrorException {
474+
return (WxMaUploadAuthMaterialResult) this.execute(UploadAuthMaterialRequestExecutor.create(getRequestHttp()), API_UPLOAD_AUTH_MATERIAL, file);
475+
}
469476
}

0 commit comments

Comments
 (0)