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);
+ }
+
+}