Skip to content

Commit 1af394c

Browse files
authored
🆕 #2198 【小程序】增加根据提交信息数据获取用户安全等级的接口
1 parent a79b05c commit 1af394c

File tree

10 files changed

+244
-2
lines changed

10 files changed

+244
-2
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package cn.binarywang.wx.miniapp.api;
2+
3+
import cn.binarywang.wx.miniapp.bean.safety.request.WxMaUserSafetyRiskRankRequest;
4+
import cn.binarywang.wx.miniapp.bean.safety.response.WxMaUserSafetyRiskRankResponse;
5+
import me.chanjar.weixin.common.error.WxErrorException;
6+
7+
/**
8+
* <pre>
9+
* 小程序安全风控相关接口
10+
* </pre>
11+
*
12+
* @author <a href="https://github.com/azouever">azouever</a>
13+
*/
14+
public interface WxMaSafetyRiskControlService {
15+
16+
/**
17+
* <pre>
18+
* 根据提交的用户信息数据获取用户的安全等级,无需用户授权
19+
* 文档:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/safety-control-capability/riskControl.getUserRiskRank.html
20+
* </pre>
21+
*
22+
* @param wxMaUserSafetyRiskRankRequest 获取用户安全等级请求
23+
* @throws WxErrorException 通用异常
24+
*/
25+
WxMaUserSafetyRiskRankResponse getUserRiskRank(WxMaUserSafetyRiskRankRequest wxMaUserSafetyRiskRankRequest) throws WxErrorException;
26+
27+
}

Diff for: weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaService.java

+8
Original file line numberDiff line numberDiff line change
@@ -484,4 +484,12 @@ public interface WxMaService extends WxService {
484484
*/
485485
WxMaImmediateDeliveryService getWxMaImmediateDeliveryService();
486486

487+
488+
/**
489+
* 小程序安全风控相关接口服务
490+
*
491+
* @return safetyRiskControl service
492+
*/
493+
WxMaSafetyRiskControlService getSafetyRiskControlService();
494+
487495
}

Diff for: weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/BaseWxMaServiceImpl.java

+5
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public abstract class BaseWxMaServiceImpl<H, P> implements WxMaService, RequestH
7878
private final WxMaDeviceSubscribeService deviceSubscribeService = new WxMaDeviceSubscribeServiceImpl(this);
7979
private final WxMaMarketingService marketingService = new WxMaMarketingServiceImpl(this);
8080
private final WxMaImmediateDeliveryService immediateDeliveryService = new WxMaImmediateDeliveryServiceImpl(this);
81+
private final WxMaSafetyRiskControlService safetyRiskControlService = new WxMaSafetyRiskControlServiceImpl(this);
8182
private Map<String, WxMaConfig> configMap;
8283
private int retrySleepMillis = 1000;
8384
private int maxRetryTimes = 5;
@@ -587,4 +588,8 @@ public WxMaReimburseInvoiceService getReimburseInvoiceService() {
587588
public WxMaImmediateDeliveryService getWxMaImmediateDeliveryService() {
588589
return this.immediateDeliveryService;
589590
}
591+
592+
@Override
593+
public WxMaSafetyRiskControlService getSafetyRiskControlService(){ return this.safetyRiskControlService; }
594+
590595
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package cn.binarywang.wx.miniapp.api.impl;
2+
3+
import cn.binarywang.wx.miniapp.api.WxMaSafetyRiskControlService;
4+
import cn.binarywang.wx.miniapp.api.WxMaService;
5+
import cn.binarywang.wx.miniapp.bean.safety.request.WxMaUserSafetyRiskRankRequest;
6+
import cn.binarywang.wx.miniapp.bean.safety.response.WxMaUserSafetyRiskRankResponse;
7+
import cn.binarywang.wx.miniapp.constant.WxMaConstants;
8+
import com.google.gson.JsonObject;
9+
import lombok.RequiredArgsConstructor;
10+
import me.chanjar.weixin.common.enums.WxType;
11+
import me.chanjar.weixin.common.error.WxError;
12+
import me.chanjar.weixin.common.error.WxErrorException;
13+
import me.chanjar.weixin.common.util.json.GsonParser;
14+
15+
import static cn.binarywang.wx.miniapp.constant.WxMaApiUrlConstants.InstantDelivery.SafetyRiskControl.GET_USER_RISK_RANK;
16+
17+
/**
18+
* @author azouever
19+
*/
20+
21+
@RequiredArgsConstructor
22+
public class WxMaSafetyRiskControlServiceImpl implements WxMaSafetyRiskControlService {
23+
24+
private final WxMaService service;
25+
26+
@Override
27+
public WxMaUserSafetyRiskRankResponse getUserRiskRank(WxMaUserSafetyRiskRankRequest wxMaUserSafetyRiskRankRequest) throws WxErrorException {
28+
String responseContent = this.service.post(GET_USER_RISK_RANK, wxMaUserSafetyRiskRankRequest.toJson());
29+
JsonObject jsonObject = GsonParser.parse(responseContent);
30+
if (jsonObject.get(WxMaConstants.ERRCODE).getAsInt() != 0) {
31+
throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp));
32+
}
33+
return WxMaUserSafetyRiskRankResponse.fromJson(responseContent);
34+
}
35+
}

Diff for: weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/marketing/WxMaUserAction.java

-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import lombok.Builder;
77
import lombok.Data;
88
import lombok.NoArgsConstructor;
9-
import sun.rmi.runtime.Log;
109

1110
import java.io.Serializable;
1211
import java.util.List;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package cn.binarywang.wx.miniapp.bean.safety.request;
2+
3+
import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder;
4+
import com.google.gson.annotations.SerializedName;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Builder;
7+
import lombok.Data;
8+
import lombok.NoArgsConstructor;
9+
10+
import java.io.Serializable;
11+
12+
/**
13+
* 获取用户的安全等级请求参数
14+
*
15+
* @author <a href="https://github.com/azouever">azouever</a>
16+
*/
17+
@Data
18+
@Builder
19+
@NoArgsConstructor
20+
@AllArgsConstructor
21+
public class WxMaUserSafetyRiskRankRequest implements Serializable {
22+
private static final long serialVersionUID = 1052539797739665816L;
23+
24+
25+
/**
26+
* 小程序appid
27+
* 必填
28+
*/
29+
private String appid;
30+
31+
/**
32+
* 用户的openid
33+
* 必填
34+
*/
35+
private String openid;
36+
37+
/**
38+
* 场景值,0:注册,1:营销作弊
39+
* 必填
40+
*/
41+
private Integer scene;
42+
43+
/**
44+
* 用户手机号
45+
* 非必填
46+
*/
47+
@SerializedName("mobile_no")
48+
private String mobileNo;
49+
50+
/**
51+
* 用户访问源ip
52+
* 必填
53+
*/
54+
@SerializedName("client_ip")
55+
private String clientIp;
56+
57+
/**
58+
* 用户邮箱地址
59+
* 非必填
60+
*/
61+
@SerializedName("email_address")
62+
private String emailAddress;
63+
64+
/**
65+
* 额外补充信息
66+
* 非必填
67+
*/
68+
@SerializedName("extended_info")
69+
private String extendedInfo;
70+
71+
/**
72+
* false:正式调用,true:测试调用
73+
* 非必填
74+
*/
75+
@SerializedName("is_test")
76+
private boolean isTest;
77+
78+
public String toJson() {
79+
return WxMaGsonBuilder.create().toJson(this);
80+
}
81+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package cn.binarywang.wx.miniapp.bean.safety.response;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Builder;
6+
import lombok.Data;
7+
import lombok.NoArgsConstructor;
8+
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
9+
10+
import java.io.Serializable;
11+
12+
/**
13+
* 获取用户的安全等级响应参数
14+
*
15+
* @author <a href="https://github.com/azouever">azouever</a>
16+
*/
17+
@Data
18+
@Builder
19+
@NoArgsConstructor
20+
@AllArgsConstructor
21+
public class WxMaUserSafetyRiskRankResponse implements Serializable {
22+
23+
private static final long serialVersionUID = -2434941857751339150L;
24+
25+
/**
26+
* 唯一请求标识,标记单次请求
27+
*/
28+
@SerializedName("unoin_id")
29+
private Integer unoinId;
30+
31+
/**
32+
* 用户风险等级
33+
* 合法值 https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/safety-control-capability/riskControl.getUserRiskRank.html
34+
*/
35+
@SerializedName("risk_rank")
36+
private Integer riskRank;
37+
38+
public static WxMaUserSafetyRiskRankResponse fromJson(String json) {
39+
return WxGsonBuilder.create().fromJson(json, WxMaUserSafetyRiskRankResponse.class);
40+
}
41+
}
42+

Diff for: weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/shop/response/WxMaShopAddOrderResponse.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,5 @@ public class WxMaShopAddOrderResponse extends WxMaShopBaseResponse implements Se
1616
private static final long serialVersionUID = -8923439859095040010L;
1717

1818
@SerializedName("data")
19-
private WxMaShopAddOrderResult date;
19+
private WxMaShopAddOrderResult data;
2020
}

Diff for: weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java

+11
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,17 @@ interface Cancel {
523523

524524
}
525525

526+
527+
/**
528+
* 安全风控
529+
*/
530+
interface SafetyRiskControl {
531+
/**
532+
* 获取用户的安全等级,无需用户授权
533+
*/
534+
String GET_USER_RISK_RANK = "https://api.weixin.qq.com/wxa/getuserriskrank";
535+
}
536+
526537
}
527538

528539
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package cn.binarywang.wx.miniapp.api.impl;
2+
3+
4+
import cn.binarywang.wx.miniapp.api.WxMaService;
5+
import cn.binarywang.wx.miniapp.bean.safety.request.WxMaUserSafetyRiskRankRequest;
6+
import cn.binarywang.wx.miniapp.bean.safety.response.WxMaUserSafetyRiskRankResponse;
7+
import cn.binarywang.wx.miniapp.test.ApiTestModule;
8+
import com.google.inject.Inject;
9+
import me.chanjar.weixin.common.error.WxErrorException;
10+
import org.testng.annotations.Guice;
11+
import org.testng.annotations.Test;
12+
13+
import static org.testng.AssertJUnit.assertNotNull;
14+
15+
@Test
16+
@Guice(modules = ApiTestModule.class)
17+
public class WxMaSafetyRiskControlServiceImplTest {
18+
19+
@Inject
20+
protected WxMaService wxService;
21+
22+
@Test
23+
public void testGetUserRiskRank() throws WxErrorException {
24+
WxMaUserSafetyRiskRankRequest wxMaUserSafetyRiskRankRequest = WxMaUserSafetyRiskRankRequest.builder()
25+
.appid("")
26+
.openid("")
27+
.scene(1)
28+
.isTest(true)
29+
.build();
30+
WxMaUserSafetyRiskRankResponse wxMaUserSafetyRiskRankResponse = this.wxService.getSafetyRiskControlService().getUserRiskRank(wxMaUserSafetyRiskRankRequest);
31+
assertNotNull(wxMaUserSafetyRiskRankResponse);
32+
}
33+
34+
}

0 commit comments

Comments
 (0)