riskcontrol.go 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package riskcontrol
  2. import (
  3. "fmt"
  4. "github.com/silenceper/wechat/v2/miniprogram/context"
  5. "github.com/silenceper/wechat/v2/util"
  6. )
  7. const (
  8. getUserRiskRankURL = "https://api.weixin.qq.com/wxa/getuserriskrank?access_token=%s"
  9. )
  10. // RiskControl 安全风控
  11. type RiskControl struct {
  12. *context.Context
  13. }
  14. // NewRiskControl init
  15. func NewRiskControl(ctx *context.Context) *RiskControl {
  16. return &RiskControl{ctx}
  17. }
  18. // UserRiskRankRequest 获取用户安全等级请求
  19. type UserRiskRankRequest struct {
  20. AppID string `json:"appid"` // 小程序 app id
  21. OpenID string `json:"openid"` // 用户的 openid
  22. Scene uint8 `json:"scene"` // 场景值,0:注册,1:营销作弊
  23. ClientIP string `json:"client_ip"` // 用户访问源 ip
  24. Mobile string `json:"mobile_no"` // 用户手机号
  25. Email string `json:"email_address"` // 用户邮箱地址
  26. ExtendedInfo string `json:"extended_info"` // 额外补充信息
  27. IsTest bool `json:"is_test"` // false:正式调用,true:测试调用
  28. }
  29. // UserRiskRank 用户安全等级
  30. type UserRiskRank struct {
  31. util.CommonError
  32. UnionID int64 `json:"union_id"` // 唯一请求标识
  33. RiskRank uint8 `json:"risk_rank"` // 用户风险等级
  34. }
  35. // GetUserRiskRank 根据提交的用户信息数据获取用户的安全等级 risk_rank,无需用户授权。
  36. func (riskControl *RiskControl) GetUserRiskRank(in *UserRiskRankRequest) (res UserRiskRank, err error) {
  37. accessToken, err := riskControl.GetAccessToken()
  38. if err != nil {
  39. return
  40. }
  41. uri := fmt.Sprintf(getUserRiskRankURL, accessToken)
  42. response, err := util.PostJSON(uri, in)
  43. if err != nil {
  44. return
  45. }
  46. // 使用通用方法返回错误
  47. err = util.DecodeWithError(response, &res, "GetUserRiskRank")
  48. return
  49. }