diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/result/WxMinishopImageUploadCustomizeResult.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/result/WxMinishopImageUploadCustomizeResult.java index e3077fd00a..515189e469 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/result/WxMinishopImageUploadCustomizeResult.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/bean/result/WxMinishopImageUploadCustomizeResult.java @@ -21,12 +21,13 @@ public static WxMinishopImageUploadCustomizeResult fromJson(String json) { if (result.getErrcode().equals("0")) { WxMinishopPicFileCustomizeResult picFileResult = new WxMinishopPicFileCustomizeResult(); JsonObject picObject = jsonObject.get("img_info").getAsJsonObject(); - picFileResult.setMediaId(picObject.get("media_id").getAsString()); + if (picObject.has("media_id")) { + picFileResult.setMediaId(picObject.get("media_id").getAsString()); + } if (picObject.has("temp_img_url")) { picFileResult.setTempImgUrl(picObject.get("temp_img_url").getAsString()); } result.setImgInfo(picFileResult); - } return result; } diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MinishopUploadRequestCustomizeExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MinishopUploadRequestCustomizeExecutor.java index d782466c3b..23309202d7 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MinishopUploadRequestCustomizeExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/MinishopUploadRequestCustomizeExecutor.java @@ -12,9 +12,11 @@ public abstract class MinishopUploadRequestCustomizeExecutor implements RequestExecutor { protected RequestHttp requestHttp; + protected String respType; - public MinishopUploadRequestCustomizeExecutor(RequestHttp requestHttp) { + public MinishopUploadRequestCustomizeExecutor(RequestHttp requestHttp, String respType) { this.requestHttp = requestHttp; + this.respType = respType; } @Override @@ -22,14 +24,14 @@ public void execute(String uri, File data, ResponseHandler create(RequestHttp requestHttp) { + public static RequestExecutor create(RequestHttp requestHttp, String respType) { switch (requestHttp.getRequestType()) { case APACHE_HTTP: - return new ApacheMinishopMediaUploadRequestCustomizeExecutor(requestHttp); + return new ApacheMinishopMediaUploadRequestCustomizeExecutor(requestHttp, respType); case JODD_HTTP: - return new JoddHttpMinishopMediaUploadRequestCustomizeExecutor(requestHttp); + return new JoddHttpMinishopMediaUploadRequestCustomizeExecutor(requestHttp, respType); case OK_HTTP: - return new OkHttpMinishopMediaUploadRequestCustomizeExecutor(requestHttp); + return new OkHttpMinishopMediaUploadRequestCustomizeExecutor(requestHttp, respType); default: return null; } diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheMinishopMediaUploadRequestCustomizeExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheMinishopMediaUploadRequestCustomizeExecutor.java index dc38fbae5a..64888c08d6 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheMinishopMediaUploadRequestCustomizeExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/apache/ApacheMinishopMediaUploadRequestCustomizeExecutor.java @@ -24,8 +24,8 @@ */ @Slf4j public class ApacheMinishopMediaUploadRequestCustomizeExecutor extends MinishopUploadRequestCustomizeExecutor { - public ApacheMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp) { - super(requestHttp); + public ApacheMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp, String respType) { + super(requestHttp, respType); } @Override @@ -39,6 +39,7 @@ public WxMinishopImageUploadCustomizeResult execute(String uri, File file, WxTyp HttpEntity entity = MultipartEntityBuilder .create() .addBinaryBody("media", file) + .addTextBody("resp_type", this.respType) .setMode(HttpMultipartMode.RFC6532) .build(); httpPost.setEntity(entity); diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMinishopMediaUploadRequestCustomizeExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMinishopMediaUploadRequestCustomizeExecutor.java index 8fa1de4279..a79eb8eda5 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMinishopMediaUploadRequestCustomizeExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/jodd/JoddHttpMinishopMediaUploadRequestCustomizeExecutor.java @@ -22,8 +22,8 @@ */ @Slf4j public class JoddHttpMinishopMediaUploadRequestCustomizeExecutor extends MinishopUploadRequestCustomizeExecutor { - public JoddHttpMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp) { - super(requestHttp); + public JoddHttpMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp, String respType) { + super(requestHttp, respType); } @Override diff --git a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMinishopMediaUploadRequestCustomizeExecutor.java b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMinishopMediaUploadRequestCustomizeExecutor.java index 8b2cdc7b6c..45d112cd6c 100644 --- a/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMinishopMediaUploadRequestCustomizeExecutor.java +++ b/weixin-java-common/src/main/java/me/chanjar/weixin/common/util/http/okhttp/OkHttpMinishopMediaUploadRequestCustomizeExecutor.java @@ -18,8 +18,8 @@ */ @Slf4j public class OkHttpMinishopMediaUploadRequestCustomizeExecutor extends MinishopUploadRequestCustomizeExecutor { - public OkHttpMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp) { - super(requestHttp); + public OkHttpMinishopMediaUploadRequestCustomizeExecutor(RequestHttp requestHttp, String respType) { + super(requestHttp, respType); } @Override diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSecCheckService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSecCheckService.java index 50e03b30d6..8b135adcdf 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSecCheckService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSecCheckService.java @@ -1,6 +1,8 @@ package cn.binarywang.wx.miniapp.api; import cn.binarywang.wx.miniapp.bean.WxMaMediaAsyncCheckResult; +import cn.binarywang.wx.miniapp.bean.security.WxMaMsgSecCheckCheckRequest; +import cn.binarywang.wx.miniapp.bean.security.WxMaMsgSecCheckCheckResponse; import me.chanjar.weixin.common.error.WxErrorException; import java.io.File; @@ -55,6 +57,17 @@ public interface WxMaSecCheckService { boolean checkMessage(String msgString) throws WxErrorException; + /** + *
+   * 检查一段文本是否含有违法违规内容(新版本接口,主要是request和response做了参数优化)
+   * 详情请见: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/sec-check/security.msgSecCheck.html
+   * 
+ * @param msgRequest + * @return WxMaMsgSecCheckCheckResponse + * @throws WxErrorException + */ + WxMaMsgSecCheckCheckResponse checkMessage(WxMaMsgSecCheckCheckRequest msgRequest) throws WxErrorException; + /** *
    * 异步校验图片/音频是否含有违法违规内容。
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaShopImgService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaShopImgService.java
index c44bc7df35..2cb9334fc2 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaShopImgService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaShopImgService.java
@@ -14,8 +14,19 @@ public interface WxMaShopImgService {
   /**
    * 上传图片
    *
+   * @param file
    * @return WxMinishopImageUploadCustomizeResult
    * @throws WxErrorException
    */
   WxMinishopImageUploadCustomizeResult uploadImg(File file) throws WxErrorException;
+
+  /**
+   * 上传图片,带respType参数
+   *
+   * @param file
+   * @param respType
+   * @return WxMinishopImageUploadCustomizeResult
+   * @throws WxErrorException
+   */
+  WxMinishopImageUploadCustomizeResult uploadImg(File file, String respType) throws WxErrorException;
 }
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImpl.java
index fbff2f3203..332a47ad7a 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImpl.java
@@ -3,12 +3,17 @@
 import cn.binarywang.wx.miniapp.api.WxMaSecCheckService;
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaMediaAsyncCheckResult;
+import cn.binarywang.wx.miniapp.bean.security.WxMaMsgSecCheckCheckRequest;
+import cn.binarywang.wx.miniapp.bean.security.WxMaMsgSecCheckCheckResponse;
+import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder;
 import com.google.gson.JsonObject;
 import lombok.RequiredArgsConstructor;
 import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
+import me.chanjar.weixin.common.enums.WxType;
 import me.chanjar.weixin.common.error.WxError;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.common.util.http.MediaUploadRequestExecutor;
+import me.chanjar.weixin.common.util.json.GsonParser;
 import org.apache.commons.io.FileUtils;
 
 import java.io.File;
@@ -16,6 +21,7 @@
 import java.net.URL;
 
 import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.SecCheck.*;
+import static cn.binarywang.wx.miniapp.constant.WxMaConstants.ERRCODE;
 
 /**
  * 
@@ -59,6 +65,16 @@ public boolean checkMessage(String msgString) throws WxErrorException {
     return true;
   }
 
+  @Override
+  public WxMaMsgSecCheckCheckResponse checkMessage(WxMaMsgSecCheckCheckRequest msgRequest) throws WxErrorException {
+    String response = this.service.post(MSG_SEC_CHECK_URL, msgRequest);
+    JsonObject jsonObject = GsonParser.parse(response);
+    if (jsonObject.get(ERRCODE).getAsInt() != 0) {
+      throw new WxErrorException(WxError.fromJson(response, WxType.MiniApp));
+    }
+    return WxMaGsonBuilder.create().fromJson(response, WxMaMsgSecCheckCheckResponse.class);
+  }
+
   @Override
   public WxMaMediaAsyncCheckResult mediaCheckAsync(String mediaUrl, int mediaType)
     throws WxErrorException {
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImpl.java
index f253bca280..1c69f8dc80 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImpl.java
@@ -23,7 +23,14 @@ public class WxMaShopImgServiceImpl implements WxMaShopImgService {
   @Override
   public WxMinishopImageUploadCustomizeResult uploadImg(File file) throws WxErrorException {
     WxMinishopImageUploadCustomizeResult result = this.service.execute(
-      MinishopUploadRequestCustomizeExecutor.create(this.service.getRequestHttp()), IMG_UPLOAD, file);
+      MinishopUploadRequestCustomizeExecutor.create(this.service.getRequestHttp(), "0"), IMG_UPLOAD, file);
+    return result;
+  }
+
+  @Override
+  public WxMinishopImageUploadCustomizeResult uploadImg(File file, String respType) throws WxErrorException {
+    WxMinishopImageUploadCustomizeResult result = this.service.execute(
+      MinishopUploadRequestCustomizeExecutor.create(this.service.getRequestHttp(), respType), IMG_UPLOAD, file);
     return result;
   }
 }
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaBaseResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaBaseResponse.java
new file mode 100644
index 0000000000..a0f524d324
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/WxMaBaseResponse.java
@@ -0,0 +1,32 @@
+package cn.binarywang.wx.miniapp.bean;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author liming1019
+ * @date 2021/8/17
+ */
+@Data
+public class WxMaBaseResponse implements Serializable {
+  private static final long serialVersionUID = 3932406255203539965L;
+  /**
+   * 错误码
+   * 
+   * 是否必填:
+   * 
+ */ + @SerializedName("errcode") + private Integer errcode; + + /** + * 错误信息 + *
+   * 是否必填:
+   * 
+ */ + @SerializedName("errmsg") + private String errmsg; +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/security/WxMaMsgSecCheckCheckRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/security/WxMaMsgSecCheckCheckRequest.java new file mode 100644 index 0000000000..2379f14b3c --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/security/WxMaMsgSecCheckCheckRequest.java @@ -0,0 +1,37 @@ +package cn.binarywang.wx.miniapp.bean.security; + +import com.google.gson.annotations.SerializedName; +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author liming1019 + */ +@Data +@Builder +public class WxMaMsgSecCheckCheckRequest implements Serializable { + private static final long serialVersionUID = 3233176903681625506L; + + @SerializedName("version") + private String version; + + @SerializedName("openid") + private String openid; + + @SerializedName("scene") + private Integer scene; + + @SerializedName("content") + private String content; + + @SerializedName("nickname") + private String nickname; + + @SerializedName("title") + private String title; + + @SerializedName("signature") + private String signature; +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/security/WxMaMsgSecCheckCheckResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/security/WxMaMsgSecCheckCheckResponse.java new file mode 100644 index 0000000000..6e6a93afe3 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/security/WxMaMsgSecCheckCheckResponse.java @@ -0,0 +1,72 @@ +package cn.binarywang.wx.miniapp.bean.security; + +import cn.binarywang.wx.miniapp.bean.WxMaBaseResponse; +import com.google.gson.annotations.SerializedName; +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * @author liming1019 + */ +@Data +@Builder +public class WxMaMsgSecCheckCheckResponse extends WxMaBaseResponse implements Serializable { + private static final long serialVersionUID = 1903247824980080974L; + /** + * result : {"suggest":"risky","label":20001} + * detail : [{"strategy":"content_model","errcode":0,"suggest":"risky","label":20006,"prob":90},{"strategy":"keyword","errcode":0,"suggest":"pass","label":20006,"level":20,"keyword":"命中的关键词1"},{"strategy":"keyword","errcode":0,"suggest":"risky","label":20006,"level":90,"keyword":"命中的关键词2"}] + * trace_id : 60ae120f-371d5872-7941a05b + */ + @SerializedName("result") + private ResultBean result; + @SerializedName("trace_id") + private String traceId; + @SerializedName("detail") + private List detail; + + @Data + @Builder + public static class ResultBean implements Serializable { + /** + * suggest : risky + * label : 20001 + */ + + @SerializedName("suggest") + private String suggest; + @SerializedName("label") + private String label; + } + + @Data + @Builder + public static class DetailBean implements Serializable { + /** + * strategy : content_model + * errcode : 0 + * suggest : risky + * label : 20006 + * prob : 90 + * level : 20 + * keyword : 命中的关键词1 + */ + + @SerializedName("strategy") + private String strategy; + @SerializedName("errcode") + private Integer errcode; + @SerializedName("suggest") + private String suggest; + @SerializedName("label") + private String label; + @SerializedName("prob") + private Integer prob; + @SerializedName("level") + private String level; + @SerializedName("keyword") + private String keyword; + } +} diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImplTest.java index 19bca1ca4f..f55ce9c487 100644 --- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImplTest.java +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSecCheckServiceImplTest.java @@ -2,6 +2,8 @@ import java.io.File; +import cn.binarywang.wx.miniapp.bean.security.WxMaMsgSecCheckCheckRequest; +import cn.binarywang.wx.miniapp.bean.security.WxMaMsgSecCheckCheckResponse; import org.testng.annotations.*; import cn.binarywang.wx.miniapp.api.WxMaService; @@ -49,4 +51,16 @@ public void testCheckMessage(String msg, boolean result) throws WxErrorException .checkMessage(msg)) .isEqualTo(result); } + + @Test(dataProvider = "secData") + public void testCheckMessage2(String msg, boolean result) throws WxErrorException { + WxMaMsgSecCheckCheckRequest request = WxMaMsgSecCheckCheckRequest.builder() + .content(msg) + .scene(1) + .version("2") + .openid("xxx") + .build(); + WxMaMsgSecCheckCheckResponse response = this.wxService.getSecCheckService().checkMessage(request); + assertThat(response).isNotNull(); + } } diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImplTest.java index 191b429630..060896ab09 100644 --- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImplTest.java +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaShopImgServiceImplTest.java @@ -28,4 +28,11 @@ public void testUploadImg() throws WxErrorException { WxMinishopImageUploadCustomizeResult result = wxService.getShopImgService().uploadImg(file); assertThat(result).isNotNull(); } + + @Test + public void testUploadImg2() throws WxErrorException { + File file = new File("/Users/liming/Desktop/test.jpeg"); + WxMinishopImageUploadCustomizeResult result = wxService.getShopImgService().uploadImg(file, "1"); + assertThat(result).isNotNull(); + } }