From 1af394cdd909c26a2fdb137e38cc94b6ba55c5f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=87=AF=E6=97=8B?= <42696884+azouever@users.noreply.github.com> Date: Wed, 26 Jan 2022 14:27:14 +0800 Subject: [PATCH] =?UTF-8?q?:new:=20#2198=20=E3=80=90=E5=B0=8F=E7=A8=8B?= =?UTF-8?q?=E5=BA=8F=E3=80=91=E5=A2=9E=E5=8A=A0=E6=A0=B9=E6=8D=AE=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E4=BF=A1=E6=81=AF=E6=95=B0=E6=8D=AE=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E5=AE=89=E5=85=A8=E7=AD=89=E7=BA=A7=E7=9A=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/WxMaSafetyRiskControlService.java | 27 +++++++ .../wx/miniapp/api/WxMaService.java | 8 ++ .../miniapp/api/impl/BaseWxMaServiceImpl.java | 5 ++ .../WxMaSafetyRiskControlServiceImpl.java | 35 ++++++++ .../bean/marketing/WxMaUserAction.java | 1 - .../WxMaUserSafetyRiskRankRequest.java | 81 +++++++++++++++++++ .../WxMaUserSafetyRiskRankResponse.java | 42 ++++++++++ .../response/WxMaShopAddOrderResponse.java | 2 +- .../miniapp/constant/WxMaApiUrlConstants.java | 11 +++ .../WxMaSafetyRiskControlServiceImplTest.java | 34 ++++++++ 10 files changed, 244 insertions(+), 2 deletions(-) create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSafetyRiskControlService.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSafetyRiskControlServiceImpl.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/safety/request/WxMaUserSafetyRiskRankRequest.java create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/safety/response/WxMaUserSafetyRiskRankResponse.java create mode 100644 weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSafetyRiskControlServiceImplTest.java diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSafetyRiskControlService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSafetyRiskControlService.java new file mode 100644 index 000000000..c84a93d13 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaSafetyRiskControlService.java @@ -0,0 +1,27 @@ +package cn.binarywang.wx.miniapp.api; + +import cn.binarywang.wx.miniapp.bean.safety.request.WxMaUserSafetyRiskRankRequest; +import cn.binarywang.wx.miniapp.bean.safety.response.WxMaUserSafetyRiskRankResponse; +import me.chanjar.weixin.common.error.WxErrorException; + +/** + *
+ * 小程序安全风控相关接口
+ * 
+ * + * @author azouever + */ +public interface WxMaSafetyRiskControlService { + + /** + *
+   * 根据提交的用户信息数据获取用户的安全等级,无需用户授权
+   * 文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/safety-control-capability/riskControl.getUserRiskRank.html
+   * 
+ * + * @param wxMaUserSafetyRiskRankRequest 获取用户安全等级请求 + * @throws WxErrorException 通用异常 + */ + WxMaUserSafetyRiskRankResponse getUserRiskRank(WxMaUserSafetyRiskRankRequest wxMaUserSafetyRiskRankRequest) throws WxErrorException; + +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java index 81ed12aa8..8b357a847 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java @@ -484,4 +484,12 @@ public interface WxMaService extends WxService { */ WxMaImmediateDeliveryService getWxMaImmediateDeliveryService(); + + /** + * 小程序安全风控相关接口服务 + * + * @return safetyRiskControl service + */ + WxMaSafetyRiskControlService getSafetyRiskControlService(); + } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java index 21ca0f721..62ca188d5 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java @@ -78,6 +78,7 @@ public abstract class BaseWxMaServiceImpl implements WxMaService, RequestH private final WxMaDeviceSubscribeService deviceSubscribeService = new WxMaDeviceSubscribeServiceImpl(this); private final WxMaMarketingService marketingService = new WxMaMarketingServiceImpl(this); private final WxMaImmediateDeliveryService immediateDeliveryService = new WxMaImmediateDeliveryServiceImpl(this); + private final WxMaSafetyRiskControlService safetyRiskControlService = new WxMaSafetyRiskControlServiceImpl(this); private Map configMap; private int retrySleepMillis = 1000; private int maxRetryTimes = 5; @@ -587,4 +588,8 @@ public abstract class BaseWxMaServiceImpl implements WxMaService, RequestH public WxMaImmediateDeliveryService getWxMaImmediateDeliveryService() { return this.immediateDeliveryService; } + + @Override + public WxMaSafetyRiskControlService getSafetyRiskControlService(){ return this.safetyRiskControlService; } + } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSafetyRiskControlServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSafetyRiskControlServiceImpl.java new file mode 100644 index 000000000..8152c72c9 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaSafetyRiskControlServiceImpl.java @@ -0,0 +1,35 @@ +package cn.binarywang.wx.miniapp.api.impl; + +import cn.binarywang.wx.miniapp.api.WxMaSafetyRiskControlService; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.safety.request.WxMaUserSafetyRiskRankRequest; +import cn.binarywang.wx.miniapp.bean.safety.response.WxMaUserSafetyRiskRankResponse; +import cn.binarywang.wx.miniapp.constant.WxMaConstants; +import com.google.gson.JsonObject; +import lombok.RequiredArgsConstructor; +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.json.GsonParser; + +import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.InstantDelivery.SafetyRiskControl.GET_USER_RISK_RANK; + +/** + * @author azouever + */ + +@RequiredArgsConstructor +public class WxMaSafetyRiskControlServiceImpl implements WxMaSafetyRiskControlService { + + private final WxMaService service; + + @Override + public WxMaUserSafetyRiskRankResponse getUserRiskRank(WxMaUserSafetyRiskRankRequest wxMaUserSafetyRiskRankRequest) throws WxErrorException { + String responseContent = this.service.post(GET_USER_RISK_RANK, wxMaUserSafetyRiskRankRequest.toJson()); + JsonObject jsonObject = GsonParser.parse(responseContent); + if (jsonObject.get(WxMaConstants.ERRCODE).getAsInt() != 0) { + throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); + } + return WxMaUserSafetyRiskRankResponse.fromJson(responseContent); + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/marketing/WxMaUserAction.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/marketing/WxMaUserAction.java index 5427aa2ab..2cde905be 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/marketing/WxMaUserAction.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/marketing/WxMaUserAction.java @@ -6,7 +6,6 @@ import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; -import sun.rmi.runtime.Log; import java.io.Serializable; import java.util.List; diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/safety/request/WxMaUserSafetyRiskRankRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/safety/request/WxMaUserSafetyRiskRankRequest.java new file mode 100644 index 000000000..da9384b1a --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/safety/request/WxMaUserSafetyRiskRankRequest.java @@ -0,0 +1,81 @@ +package cn.binarywang.wx.miniapp.bean.safety.request; + +import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder; +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +/** + * 获取用户的安全等级请求参数 + * + * @author azouever + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class WxMaUserSafetyRiskRankRequest implements Serializable { + private static final long serialVersionUID = 1052539797739665816L; + + + /** + * 小程序appid + * 必填 + */ + private String appid; + + /** + * 用户的openid + * 必填 + */ + private String openid; + + /** + * 场景值,0:注册,1:营销作弊 + * 必填 + */ + private Integer scene; + + /** + * 用户手机号 + * 非必填 + */ + @SerializedName("mobile_no") + private String mobileNo; + + /** + * 用户访问源ip + * 必填 + */ + @SerializedName("client_ip") + private String clientIp; + + /** + * 用户邮箱地址 + * 非必填 + */ + @SerializedName("email_address") + private String emailAddress; + + /** + * 额外补充信息 + * 非必填 + */ + @SerializedName("extended_info") + private String extendedInfo; + + /** + * false:正式调用,true:测试调用 + * 非必填 + */ + @SerializedName("is_test") + private boolean isTest; + + public String toJson() { + return WxMaGsonBuilder.create().toJson(this); + } +} diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/safety/response/WxMaUserSafetyRiskRankResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/safety/response/WxMaUserSafetyRiskRankResponse.java new file mode 100644 index 000000000..1a3a5d1f5 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/safety/response/WxMaUserSafetyRiskRankResponse.java @@ -0,0 +1,42 @@ +package cn.binarywang.wx.miniapp.bean.safety.response; + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import me.chanjar.weixin.common.util.json.WxGsonBuilder; + +import java.io.Serializable; + +/** + * 获取用户的安全等级响应参数 + * + * @author azouever + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class WxMaUserSafetyRiskRankResponse implements Serializable { + + private static final long serialVersionUID = -2434941857751339150L; + + /** + * 唯一请求标识,标记单次请求 + */ + @SerializedName("unoin_id") + private Integer unoinId; + + /** + * 用户风险等级 + * 合法值 https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/safety-control-capability/riskControl.getUserRiskRank.html + */ + @SerializedName("risk_rank") + private Integer riskRank; + + public static WxMaUserSafetyRiskRankResponse fromJson(String json) { + return WxGsonBuilder.create().fromJson(json, WxMaUserSafetyRiskRankResponse.class); + } +} + diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/shop/response/WxMaShopAddOrderResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/shop/response/WxMaShopAddOrderResponse.java index 4e724423b..ecd4ff9b7 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/shop/response/WxMaShopAddOrderResponse.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/shop/response/WxMaShopAddOrderResponse.java @@ -16,5 +16,5 @@ public class WxMaShopAddOrderResponse extends WxMaShopBaseResponse implements Se private static final long serialVersionUID = -8923439859095040010L; @SerializedName("data") - private WxMaShopAddOrderResult date; + private WxMaShopAddOrderResult data; } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java index 5d4379b9d..3fd6719f7 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java @@ -523,6 +523,17 @@ public class WxMaApiUrlConstants { } + + /** + * 安全风控 + */ + interface SafetyRiskControl { + /** + * 获取用户的安全等级,无需用户授权 + */ + String GET_USER_RISK_RANK = "https://api.weixin.qq.com/wxa/getuserriskrank"; + } + } } diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSafetyRiskControlServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSafetyRiskControlServiceImplTest.java new file mode 100644 index 000000000..9a2491fee --- /dev/null +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaSafetyRiskControlServiceImplTest.java @@ -0,0 +1,34 @@ +package cn.binarywang.wx.miniapp.api.impl; + + +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.safety.request.WxMaUserSafetyRiskRankRequest; +import cn.binarywang.wx.miniapp.bean.safety.response.WxMaUserSafetyRiskRankResponse; +import cn.binarywang.wx.miniapp.test.ApiTestModule; +import com.google.inject.Inject; +import me.chanjar.weixin.common.error.WxErrorException; +import org.testng.annotations.Guice; +import org.testng.annotations.Test; + +import static org.testng.AssertJUnit.assertNotNull; + +@Test +@Guice(modules = ApiTestModule.class) +public class WxMaSafetyRiskControlServiceImplTest { + + @Inject + protected WxMaService wxService; + + @Test + public void testGetUserRiskRank() throws WxErrorException { + WxMaUserSafetyRiskRankRequest wxMaUserSafetyRiskRankRequest = WxMaUserSafetyRiskRankRequest.builder() + .appid("") + .openid("") + .scene(1) + .isTest(true) + .build(); + WxMaUserSafetyRiskRankResponse wxMaUserSafetyRiskRankResponse = this.wxService.getSafetyRiskControlService().getUserRiskRank(wxMaUserSafetyRiskRankRequest); + assertNotNull(wxMaUserSafetyRiskRankResponse); + } + +}