# frozen_string_literal: true

# Copyright (c) 2017-2018 THL A29 Limited, a Tencent company. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

module TencentCloud
  module Aa
    module V20200224
      # 账号信息。
      class AccountInfo < TencentCloud::Common::AbstractModel
        # @param AccountType: 用户账号类型(默认开通 QQ 开放账号、手机号,手机 MD5 账号类型查询。如需使用微信开放账号,则需要 提交工单 由腾讯云进行资格审核,审核通过后方可正常使用微信开放账号):
        # 1:QQ开放账号。
        # 2:微信开放账号。
        # 4:手机号(暂仅支持国内手机号)。
        # 8:设备号(imei/imeiMD5/idfa/idfaMd5)。
        # 0:其他。
        # 10004:手机号MD5(标准中国大陆手机号11位,MD5后取32位小写值)
        # @type AccountType: Integer
        # @param QQAccount: QQ账号信息,AccountType是1时,该字段必填。
        # @type QQAccount: :class:`Tencentcloud::Aa.v20200224.models.QQAccountInfo`
        # @param WeChatAccount: 微信账号信息,AccountType是2时,该字段必填。
        # @type WeChatAccount: :class:`Tencentcloud::Aa.v20200224.models.WeChatAccountInfo`
        # @param OtherAccount: 其它账号信息,AccountType是0、4、8或10004时,该字段必填。
        # @type OtherAccount: :class:`Tencentcloud::Aa.v20200224.models.OtherAccountInfo`

        attr_accessor :AccountType, :QQAccount, :WeChatAccount, :OtherAccount
        
        def initialize(accounttype=nil, qqaccount=nil, wechataccount=nil, otheraccount=nil)
          @AccountType = accounttype
          @QQAccount = qqaccount
          @WeChatAccount = wechataccount
          @OtherAccount = otheraccount
        end

        def deserialize(params)
          @AccountType = params['AccountType']
          unless params['QQAccount'].nil?
            @QQAccount = QQAccountInfo.new
            @QQAccount.deserialize(params['QQAccount'])
          end
          unless params['WeChatAccount'].nil?
            @WeChatAccount = WeChatAccountInfo.new
            @WeChatAccount.deserialize(params['WeChatAccount'])
          end
          unless params['OtherAccount'].nil?
            @OtherAccount = OtherAccountInfo.new
            @OtherAccount.deserialize(params['OtherAccount'])
          end
        end
      end

      # 网赚防刷相关参数
      class CrowdAntiRushInfo < TencentCloud::Common::AbstractModel
        # @param SponsorOpenId: 助力场景建议填写:活动发起人微信OpenID。
        # @type SponsorOpenId: String
        # @param SponsorDeviceNumber: 助力场景建议填写:发起人设备号。
        # @type SponsorDeviceNumber: String
        # @param SponsorPhone: 助力场景建议填写:发起人手机号。
        # @type SponsorPhone: String
        # @param SponsorIp: 助力场景建议填写:发起人IP。
        # @type SponsorIp: String
        # @param CampaignUrl: 助力场景建议填写:活动链接。
        # @type CampaignUrl: String

        attr_accessor :SponsorOpenId, :SponsorDeviceNumber, :SponsorPhone, :SponsorIp, :CampaignUrl
        
        def initialize(sponsoropenid=nil, sponsordevicenumber=nil, sponsorphone=nil, sponsorip=nil, campaignurl=nil)
          @SponsorOpenId = sponsoropenid
          @SponsorDeviceNumber = sponsordevicenumber
          @SponsorPhone = sponsorphone
          @SponsorIp = sponsorip
          @CampaignUrl = campaignurl
        end

        def deserialize(params)
          @SponsorOpenId = params['SponsorOpenId']
          @SponsorDeviceNumber = params['SponsorDeviceNumber']
          @SponsorPhone = params['SponsorPhone']
          @SponsorIp = params['SponsorIp']
          @CampaignUrl = params['CampaignUrl']
        end
      end

      # 活动防刷高级版业务入参。
      class InputActivityAntiRushAdvanced < TencentCloud::Common::AbstractModel
        # @param Account: 账号信息。
        # @type Account: :class:`Tencentcloud::Aa.v20200224.models.AccountInfo`
        # @param UserIp: 用户IP(外网有效IP地址)。
        # @type UserIp: String
        # @param PostTime: 用户操作时间戳,单位秒(格林威治时间精确到秒,如1501590972)。
        # @type PostTime: Integer
        # @param Sponsor: 可选填写。详情请跳转至SponsorInfo查看。
        # @type Sponsor: :class:`Tencentcloud::Aa.v20200224.models.SponsorInfo`
        # @param OnlineScam: 可选填写。详情请跳转至OnlineScamInfo查看。
        # @type OnlineScam: :class:`Tencentcloud::Aa.v20200224.models.OnlineScamInfo`
        # @param BusinessId: 业务ID。网站或应用在多个业务中使用此服务,通过此ID区分统计数据。
        # @type BusinessId: Integer
        # @param Nickname: 昵称,UTF-8 编码。
        # @type Nickname: String
        # @param EmailAddress: 用户邮箱地址(非系统自动生成)。
        # @type EmailAddress: String
        # @param CheckDevice: 是否识别设备异常:
        # 0:不识别。
        # 1:识别。
        # @type CheckDevice: Integer
        # @param CookieHash: 用户HTTP请求中的Cookie进行2次hash的值,只要保证相同Cookie的hash值一致即可。
        # @type CookieHash: String
        # @param Referer: 用户HTTP请求的Referer值。
        # @type Referer: String
        # @param UserAgent: 用户HTTP请求的User-Agent值。
        # @type UserAgent: String
        # @param XForwardedFor: 用户HTTP请求的X-Forwarded-For值。
        # @type XForwardedFor: String
        # @param MacAddress: MAC地址或设备唯一标识。
        # @type MacAddress: String
        # @param VendorId: 手机制造商ID,如果手机注册,请带上此信息。
        # @type VendorId: String

        attr_accessor :Account, :UserIp, :PostTime, :Sponsor, :OnlineScam, :BusinessId, :Nickname, :EmailAddress, :CheckDevice, :CookieHash, :Referer, :UserAgent, :XForwardedFor, :MacAddress, :VendorId
        
        def initialize(account=nil, userip=nil, posttime=nil, sponsor=nil, onlinescam=nil, businessid=nil, nickname=nil, emailaddress=nil, checkdevice=nil, cookiehash=nil, referer=nil, useragent=nil, xforwardedfor=nil, macaddress=nil, vendorid=nil)
          @Account = account
          @UserIp = userip
          @PostTime = posttime
          @Sponsor = sponsor
          @OnlineScam = onlinescam
          @BusinessId = businessid
          @Nickname = nickname
          @EmailAddress = emailaddress
          @CheckDevice = checkdevice
          @CookieHash = cookiehash
          @Referer = referer
          @UserAgent = useragent
          @XForwardedFor = xforwardedfor
          @MacAddress = macaddress
          @VendorId = vendorid
        end

        def deserialize(params)
          unless params['Account'].nil?
            @Account = AccountInfo.new
            @Account.deserialize(params['Account'])
          end
          @UserIp = params['UserIp']
          @PostTime = params['PostTime']
          unless params['Sponsor'].nil?
            @Sponsor = SponsorInfo.new
            @Sponsor.deserialize(params['Sponsor'])
          end
          unless params['OnlineScam'].nil?
            @OnlineScam = OnlineScamInfo.new
            @OnlineScam.deserialize(params['OnlineScam'])
          end
          @BusinessId = params['BusinessId']
          @Nickname = params['Nickname']
          @EmailAddress = params['EmailAddress']
          @CheckDevice = params['CheckDevice']
          @CookieHash = params['CookieHash']
          @Referer = params['Referer']
          @UserAgent = params['UserAgent']
          @XForwardedFor = params['XForwardedFor']
          @MacAddress = params['MacAddress']
          @VendorId = params['VendorId']
        end
      end

      # 入参的详细参数信息
      class InputDetails < TencentCloud::Common::AbstractModel
        # @param FieldName: 字段名称
        # @type FieldName: String
        # @param FieldValue: 字段值
        # @type FieldValue: String

        attr_accessor :FieldName, :FieldValue
        
        def initialize(fieldname=nil, fieldvalue=nil)
          @FieldName = fieldname
          @FieldValue = fieldvalue
        end

        def deserialize(params)
          @FieldName = params['FieldName']
          @FieldValue = params['FieldValue']
        end
      end

      # 营销风控入参
      class InputManageMarketingRisk < TencentCloud::Common::AbstractModel
        # @param Account: 账号信息。
        # @type Account: :class:`Tencentcloud::Aa.v20200224.models.AccountInfo`
        # @param UserIp: 登录来源的外网IP
        # @type UserIp: String
        # @param PostTime: 用户操作时间戳,单位秒(格林威治时间精确到秒,如1501590972)。
        # @type PostTime: Integer
        # @param SceneType: 场景类型。(后续不再支持,请使用SceneCode字段)
        # 1:活动防刷
        # 2:登录保护
        # 3:注册保护
        # 4:活动防刷高级版(网赚)
        # @type SceneType: Integer
        # @param UserId: 用户唯一标识。
        # @type UserId: String
        # @param DeviceToken: 设备指纹token。
        # @type DeviceToken: String
        # @param DeviceBusinessId: 设备指纹BusinessId
        # @type DeviceBusinessId: Integer
        # @param BusinessId: 业务ID。网站或应用在多个业务中使用此服务,通过此ID区分统计数据。
        # @type BusinessId: Integer
        # @param Nickname: 昵称,UTF-8 编码。
        # @type Nickname: String
        # @param EmailAddress: 用户邮箱地址(非系统自动生成)。
        # @type EmailAddress: String
        # @param CheckDevice: 是否识别设备异常:
        # 0:不识别。
        # 1:识别。
        # @type CheckDevice: Integer
        # @param CookieHash: 用户HTTP请求中的Cookie进行2次hash的值,只要保证相同Cookie的hash值一致即可。
        # @type CookieHash: String
        # @param Referer: 用户HTTP请求的Referer值。
        # @type Referer: String
        # @param UserAgent: 用户HTTP请求的User-Agent值。
        # @type UserAgent: String
        # @param XForwardedFor: 用户HTTP请求的X-Forwarded-For值。
        # @type XForwardedFor: String
        # @param MacAddress: MAC地址或设备唯一标识。
        # @type MacAddress: String
        # @param CrowdAntiRush: 网赚防刷相关信息。SceneType为4时填写。
        # @type CrowdAntiRush: :class:`Tencentcloud::Aa.v20200224.models.CrowdAntiRushInfo`
        # @param SceneCode: 场景Code,控制台上获取
        # @type SceneCode: String
        # @param Details: 详细信息
        # @type Details: Array
        # @param DeviceType: 设备类型:
        # 1:Android
        # 2:IOS
        # @type DeviceType: Integer

        attr_accessor :Account, :UserIp, :PostTime, :SceneType, :UserId, :DeviceToken, :DeviceBusinessId, :BusinessId, :Nickname, :EmailAddress, :CheckDevice, :CookieHash, :Referer, :UserAgent, :XForwardedFor, :MacAddress, :CrowdAntiRush, :SceneCode, :Details, :DeviceType
        
        def initialize(account=nil, userip=nil, posttime=nil, scenetype=nil, userid=nil, devicetoken=nil, devicebusinessid=nil, businessid=nil, nickname=nil, emailaddress=nil, checkdevice=nil, cookiehash=nil, referer=nil, useragent=nil, xforwardedfor=nil, macaddress=nil, crowdantirush=nil, scenecode=nil, details=nil, devicetype=nil)
          @Account = account
          @UserIp = userip
          @PostTime = posttime
          @SceneType = scenetype
          @UserId = userid
          @DeviceToken = devicetoken
          @DeviceBusinessId = devicebusinessid
          @BusinessId = businessid
          @Nickname = nickname
          @EmailAddress = emailaddress
          @CheckDevice = checkdevice
          @CookieHash = cookiehash
          @Referer = referer
          @UserAgent = useragent
          @XForwardedFor = xforwardedfor
          @MacAddress = macaddress
          @CrowdAntiRush = crowdantirush
          @SceneCode = scenecode
          @Details = details
          @DeviceType = devicetype
        end

        def deserialize(params)
          unless params['Account'].nil?
            @Account = AccountInfo.new
            @Account.deserialize(params['Account'])
          end
          @UserIp = params['UserIp']
          @PostTime = params['PostTime']
          @SceneType = params['SceneType']
          @UserId = params['UserId']
          @DeviceToken = params['DeviceToken']
          @DeviceBusinessId = params['DeviceBusinessId']
          @BusinessId = params['BusinessId']
          @Nickname = params['Nickname']
          @EmailAddress = params['EmailAddress']
          @CheckDevice = params['CheckDevice']
          @CookieHash = params['CookieHash']
          @Referer = params['Referer']
          @UserAgent = params['UserAgent']
          @XForwardedFor = params['XForwardedFor']
          @MacAddress = params['MacAddress']
          unless params['CrowdAntiRush'].nil?
            @CrowdAntiRush = CrowdAntiRushInfo.new
            @CrowdAntiRush.deserialize(params['CrowdAntiRush'])
          end
          @SceneCode = params['SceneCode']
          unless params['Details'].nil?
            @Details = []
            params['Details'].each do |i|
              inputdetails_tmp = InputDetails.new
              inputdetails_tmp.deserialize(i)
              @Details << inputdetails_tmp
            end
          end
          @DeviceType = params['DeviceType']
        end
      end

      # ManageMarketingRisk请求参数结构体
      class ManageMarketingRiskRequest < TencentCloud::Common::AbstractModel
        # @param BusinessSecurityData: 业务入参
        # @type BusinessSecurityData: :class:`Tencentcloud::Aa.v20200224.models.InputManageMarketingRisk`

        attr_accessor :BusinessSecurityData
        
        def initialize(businesssecuritydata=nil)
          @BusinessSecurityData = businesssecuritydata
        end

        def deserialize(params)
          unless params['BusinessSecurityData'].nil?
            @BusinessSecurityData = InputManageMarketingRisk.new
            @BusinessSecurityData.deserialize(params['BusinessSecurityData'])
          end
        end
      end

      # ManageMarketingRisk返回参数结构体
      class ManageMarketingRiskResponse < TencentCloud::Common::AbstractModel
        # @param Data: 业务出参
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type Data: :class:`Tencentcloud::Aa.v20200224.models.OutputManageMarketingRisk`
        # @param RequestId: 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。
        # @type RequestId: String

        attr_accessor :Data, :RequestId
        
        def initialize(data=nil, requestid=nil)
          @Data = data
          @RequestId = requestid
        end

        def deserialize(params)
          unless params['Data'].nil?
            @Data = OutputManageMarketingRisk.new
            @Data.deserialize(params['Data'])
          end
          @RequestId = params['RequestId']
        end
      end

      # 诈骗信息。
      class OnlineScamInfo < TencentCloud::Common::AbstractModel
        # @param ContentLabel: 内容标签。
        # @type ContentLabel: String
        # @param ContentRiskLevel: 内容风险等级:
        # 0:正常。
        # 1:可疑。
        # @type ContentRiskLevel: Integer
        # @param ContentType: 内容产生形式:
        # 0:对话。
        # 1:广播。
        # @type ContentType: Integer
        # @param FraudType: 诈骗账号类型:
        # 1:11位手机号。
        # 2:QQ账号。
        # @type FraudType: Integer
        # @param FraudAccount: 诈骗账号,手机号或QQ账号。
        # @type FraudAccount: String

        attr_accessor :ContentLabel, :ContentRiskLevel, :ContentType, :FraudType, :FraudAccount
        
        def initialize(contentlabel=nil, contentrisklevel=nil, contenttype=nil, fraudtype=nil, fraudaccount=nil)
          @ContentLabel = contentlabel
          @ContentRiskLevel = contentrisklevel
          @ContentType = contenttype
          @FraudType = fraudtype
          @FraudAccount = fraudaccount
        end

        def deserialize(params)
          @ContentLabel = params['ContentLabel']
          @ContentRiskLevel = params['ContentRiskLevel']
          @ContentType = params['ContentType']
          @FraudType = params['FraudType']
          @FraudAccount = params['FraudAccount']
        end
      end

      # 其它账号信息。
      class OtherAccountInfo < TencentCloud::Common::AbstractModel
        # @param AccountId: 其它账号信息:
        # AccountType是4时,填入真实的手机号(如13123456789)。
        # AccountType是8时,支持 imei、idfa、imeiMD5、idfaMD5 入参。
        # AccountType是0时,填入账号信息。
        # AccountType是10004时,填入手机号的MD5值。
        # 注:imeiMd5 加密方式为:imei 明文小写后,进行 MD5 加密,加密后取小写值。IdfaMd5 加密方式为:idfa 明文大写后,进行 MD5 加密,加密后取小写值。
        # @type AccountId: String
        # @param MobilePhone: 手机号,若 AccountType 是4(手机号)、或10004(手机号 MD5),则无需重复填写,否则填入对应的手机号(如13123456789)。
        # @type MobilePhone: String
        # @param DeviceId: 用户设备号。若 AccountType 是8(设备号),则无需重复填写,否则填入对应的设备号。
        # @type DeviceId: String

        attr_accessor :AccountId, :MobilePhone, :DeviceId
        
        def initialize(accountid=nil, mobilephone=nil, deviceid=nil)
          @AccountId = accountid
          @MobilePhone = mobilephone
          @DeviceId = deviceid
        end

        def deserialize(params)
          @AccountId = params['AccountId']
          @MobilePhone = params['MobilePhone']
          @DeviceId = params['DeviceId']
        end
      end

      # 活动防刷高级版业务出参。
      class OutputActivityAntiRushAdvanced < TencentCloud::Common::AbstractModel
        # @param Code: 返回码。0表示成功,非0标识失败错误码。
        # @type Code: Integer
        # @param Message: UTF-8编码,出错消息。
        # @type Message: String
        # @param Value: 服务调用结果。
        # @type Value: :class:`Tencentcloud::Aa.v20200224.models.OutputActivityAntiRushAdvancedValue`

        attr_accessor :Code, :Message, :Value
        
        def initialize(code=nil, message=nil, value=nil)
          @Code = code
          @Message = message
          @Value = value
        end

        def deserialize(params)
          @Code = params['Code']
          @Message = params['Message']
          unless params['Value'].nil?
            @Value = OutputActivityAntiRushAdvancedValue.new
            @Value.deserialize(params['Value'])
          end
        end
      end

      # 活动防刷高级版业务出参。
      class OutputActivityAntiRushAdvancedValue < TencentCloud::Common::AbstractModel
        # @param UserId: 账号ID。对应输入参数:
        # AccountType是1时,对应QQ的OpenID。
        # AccountType是2时,对应微信的OpenID/UnionID。
        # AccountType是4时,对应手机号。
        # AccountType是8时,对应imei、idfa、imeiMD5或者idfaMD5。
        # AccountType是0时,对应账号信息。
        # AccountType是10004时,对应手机号的MD5。
        # @type UserId: String
        # @param PostTime: 操作时间戳,单位秒(对应输入参数)。
        # @type PostTime: Integer
        # @param AssociateAccount: AccountType 是 QQ 或微信开放账号时,用于标识 QQ 或微信用户登录后关联业务自身的账号ID(对应输入参数)。
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type AssociateAccount: String
        # @param UserIp: 操作来源的外网IP(对应输入参数)。
        # @type UserIp: String
        # @param Level: 风险值:
        # 0:表示无恶意。
        # 1~4:恶意等级由低到高。
        # @type Level: Integer
        # @param RiskType: 风险类型,详情请参见下文RiskType详细说明。
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type RiskType: Array

        attr_accessor :UserId, :PostTime, :AssociateAccount, :UserIp, :Level, :RiskType
        
        def initialize(userid=nil, posttime=nil, associateaccount=nil, userip=nil, level=nil, risktype=nil)
          @UserId = userid
          @PostTime = posttime
          @AssociateAccount = associateaccount
          @UserIp = userip
          @Level = level
          @RiskType = risktype
        end

        def deserialize(params)
          @UserId = params['UserId']
          @PostTime = params['PostTime']
          @AssociateAccount = params['AssociateAccount']
          @UserIp = params['UserIp']
          @Level = params['Level']
          @RiskType = params['RiskType']
        end
      end

      # 影响风控出参
      class OutputManageMarketingRisk < TencentCloud::Common::AbstractModel
        # @param Code: 返回码。0表示成功,非0标识失败错误码。
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type Code: Integer
        # @param Message: UTF-8编码,出错消息。
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type Message: String
        # @param Value: 业务详情。
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type Value: :class:`Tencentcloud::Aa.v20200224.models.OutputManageMarketingRiskValue`

        attr_accessor :Code, :Message, :Value
        
        def initialize(code=nil, message=nil, value=nil)
          @Code = code
          @Message = message
          @Value = value
        end

        def deserialize(params)
          @Code = params['Code']
          @Message = params['Message']
          unless params['Value'].nil?
            @Value = OutputManageMarketingRiskValue.new
            @Value.deserialize(params['Value'])
          end
        end
      end

      # 营销风控出参值
      class OutputManageMarketingRiskValue < TencentCloud::Common::AbstractModel
        # @param UserId: 账号ID。对应输入参数:
        # AccountType是1时,对应QQ的OpenID。
        # AccountType是2时,对应微信的OpenID/UnionID。
        # AccountType是4时,对应手机号。
        # AccountType是8时,对应imei、idfa、imeiMD5或者idfaMD5。
        # AccountType是0时,对应账号信息。
        # AccountType是10004时,对应手机号的MD5。
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type UserId: String
        # @param PostTime: 操作时间戳,单位秒(对应输入参数)。
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type PostTime: Integer
        # @param AssociateAccount: 对应输入参数,AccountType 是 QQ 或微信开放账号时,用于标识 QQ 或微信用户登录后关联业务自身的账号ID。
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type AssociateAccount: String
        # @param UserIp: 操作来源的外网IP(对应输入参数)。
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type UserIp: String
        # @param RiskLevel: 风险值
        # pass : 无恶意
        # review:需要人工审核
        # reject:拒绝,高风险恶意
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type RiskLevel: String
        # @param RiskType: 风险类型,请参考官网风险类型
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type RiskType: Array

        attr_accessor :UserId, :PostTime, :AssociateAccount, :UserIp, :RiskLevel, :RiskType
        
        def initialize(userid=nil, posttime=nil, associateaccount=nil, userip=nil, risklevel=nil, risktype=nil)
          @UserId = userid
          @PostTime = posttime
          @AssociateAccount = associateaccount
          @UserIp = userip
          @RiskLevel = risklevel
          @RiskType = risktype
        end

        def deserialize(params)
          @UserId = params['UserId']
          @PostTime = params['PostTime']
          @AssociateAccount = params['AssociateAccount']
          @UserIp = params['UserIp']
          @RiskLevel = params['RiskLevel']
          @RiskType = params['RiskType']
        end
      end

      # QQ账号信息。
      class QQAccountInfo < TencentCloud::Common::AbstractModel
        # @param QQOpenId: QQ的OpenID。
        # @type QQOpenId: String
        # @param AppIdUser: QQ分配给网站或应用的AppId,用来唯一标识网站或应用。
        # @type AppIdUser: String
        # @param AssociateAccount: 用于标识QQ用户登录后所关联业务自身的账号ID。
        # @type AssociateAccount: String
        # @param MobilePhone: 账号绑定的手机号。
        # @type MobilePhone: String
        # @param DeviceId: 用户设备号。
        # @type DeviceId: String

        attr_accessor :QQOpenId, :AppIdUser, :AssociateAccount, :MobilePhone, :DeviceId
        
        def initialize(qqopenid=nil, appiduser=nil, associateaccount=nil, mobilephone=nil, deviceid=nil)
          @QQOpenId = qqopenid
          @AppIdUser = appiduser
          @AssociateAccount = associateaccount
          @MobilePhone = mobilephone
          @DeviceId = deviceid
        end

        def deserialize(params)
          @QQOpenId = params['QQOpenId']
          @AppIdUser = params['AppIdUser']
          @AssociateAccount = params['AssociateAccount']
          @MobilePhone = params['MobilePhone']
          @DeviceId = params['DeviceId']
        end
      end

      # QueryActivityAntiRushAdvanced请求参数结构体
      class QueryActivityAntiRushAdvancedRequest < TencentCloud::Common::AbstractModel
        # @param BusinessSecurityData: 业务入参
        # @type BusinessSecurityData: :class:`Tencentcloud::Aa.v20200224.models.InputActivityAntiRushAdvanced`

        attr_accessor :BusinessSecurityData
        
        def initialize(businesssecuritydata=nil)
          @BusinessSecurityData = businesssecuritydata
        end

        def deserialize(params)
          unless params['BusinessSecurityData'].nil?
            @BusinessSecurityData = InputActivityAntiRushAdvanced.new
            @BusinessSecurityData.deserialize(params['BusinessSecurityData'])
          end
        end
      end

      # QueryActivityAntiRushAdvanced返回参数结构体
      class QueryActivityAntiRushAdvancedResponse < TencentCloud::Common::AbstractModel
        # @param Data: 结果信息
        # @type Data: :class:`Tencentcloud::Aa.v20200224.models.OutputActivityAntiRushAdvanced`
        # @param RequestId: 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。
        # @type RequestId: String

        attr_accessor :Data, :RequestId
        
        def initialize(data=nil, requestid=nil)
          @Data = data
          @RequestId = requestid
        end

        def deserialize(params)
          unless params['Data'].nil?
            @Data = OutputActivityAntiRushAdvanced.new
            @Data.deserialize(params['Data'])
          end
          @RequestId = params['RequestId']
        end
      end

      # QueryActivityAntiRush请求参数结构体
      class QueryActivityAntiRushRequest < TencentCloud::Common::AbstractModel
        # @param AccountType: 账号类型
        # @type AccountType: String
        # @param Uid: uid值
        # @type Uid: String
        # @param UserIp: 用户的真实外网 IP。若填入非外网有效ip,会返回level=0的风控结果,risktype中会有205的风险码返回作为标识
        # @type UserIp: String
        # @param PostTime: 用户操作时间戳。
        # @type PostTime: String
        # @param AppIdU: accountType 是QQ开放账号时,该参数必填,表示 QQ 开放平台分配给网站或应用的 AppID,用来唯一标识网站或应用。
        # @type AppIdU: String
        # @param NickName: 昵称,UTF-8 编码。
        # @type NickName: String
        # @param PhoneNumber: 手机号
        # @type PhoneNumber: String
        # @param EmailAddress: 用户邮箱地址。
        # @type EmailAddress: String
        # @param RegisterTime: 注册时间戳。
        # @type RegisterTime: String
        # @param RegisterIp: 注册来源的外网 IP。
        # @type RegisterIp: String
        # @param CookieHash: 用户 HTTP 请求中的 cookie 进行2次 hash 的值,只要保证相同 cookie 的 hash 值一致即可。
        # @type CookieHash: String
        # @param Address: 地址。
        # @type Address: String
        # @param LoginSource: 登录来源:
        # 0:其他。
        # 1:PC 网页。
        # 2:移动页面。
        # 3:App。
        # 4:微信公众号。
        # @type LoginSource: String
        # @param LoginType: 登录方式:
        # 0:其他。
        # 1:手动账号密码输入。
        # 2:动态短信密码登录。
        # 3:二维码扫描登录。
        # @type LoginType: String
        # @param LoginSpend: 登录耗时,单位:秒。
        # @type LoginSpend: String
        # @param RootId: 用户操作的目的 ID,如点赞等,该字段就是被点赞的消息 ID,如果是投票,则为被投号码的 ID。
        # @type RootId: String
        # @param Referer: 用户 HTTP 请求的 referer 值。
        # @type Referer: String
        # @param JumpUrl: 登录成功后跳转页面。
        # @type JumpUrl: String
        # @param UserAgent: 用户 HTTP 请求的 userAgent。
        # @type UserAgent: String
        # @param XForwardedFor: 用户 HTTP 请求中的 x_forward_for。
        # @type XForwardedFor: String
        # @param MouseClickCount: 用户操作过程中鼠标单击次数。
        # @type MouseClickCount: String
        # @param KeyboardClickCount: 用户操作过程中键盘单击次数。
        # @type KeyboardClickCount: String
        # @param MacAddress: MAC 地址或设备唯一标识。
        # @type MacAddress: String
        # @param VendorId: 手机制造商 ID,如果手机注册,请带上此信息。
        # @type VendorId: String
        # @param Imei: 手机设备号。支持以下格式:
        # 1.imei明文
        # 2.idfa明文,
        # 3.imei小写后MD5值小写
        # 4.idfa大写后MD5值小写
        # @type Imei: String
        # @param AppVersion: App 客户端版本。
        # @type AppVersion: String
        # @param BusinessId: 业务 ID 网站或应用在多个业务中使用此服务,通过此 ID 区分统计数据。
        # @type BusinessId: String
        # @param WxSubType: 1:微信公众号。
        # 2:微信小程序。
        # @type WxSubType: String
        # @param RandNum: Token 签名随机数,WxSubType为微信小程序时必填,建议16个字符。
        # @type RandNum: String
        # @param WxToken: token
        # @type WxToken: String
        # @param CheckDevice: 是否识别设备异常:
        # 0:不识别。
        # 1:识别。
        # @type CheckDevice: String

        attr_accessor :AccountType, :Uid, :UserIp, :PostTime, :AppIdU, :NickName, :PhoneNumber, :EmailAddress, :RegisterTime, :RegisterIp, :CookieHash, :Address, :LoginSource, :LoginType, :LoginSpend, :RootId, :Referer, :JumpUrl, :UserAgent, :XForwardedFor, :MouseClickCount, :KeyboardClickCount, :MacAddress, :VendorId, :Imei, :AppVersion, :BusinessId, :WxSubType, :RandNum, :WxToken, :CheckDevice
        
        def initialize(accounttype=nil, uid=nil, userip=nil, posttime=nil, appidu=nil, nickname=nil, phonenumber=nil, emailaddress=nil, registertime=nil, registerip=nil, cookiehash=nil, address=nil, loginsource=nil, logintype=nil, loginspend=nil, rootid=nil, referer=nil, jumpurl=nil, useragent=nil, xforwardedfor=nil, mouseclickcount=nil, keyboardclickcount=nil, macaddress=nil, vendorid=nil, imei=nil, appversion=nil, businessid=nil, wxsubtype=nil, randnum=nil, wxtoken=nil, checkdevice=nil)
          @AccountType = accounttype
          @Uid = uid
          @UserIp = userip
          @PostTime = posttime
          @AppIdU = appidu
          @NickName = nickname
          @PhoneNumber = phonenumber
          @EmailAddress = emailaddress
          @RegisterTime = registertime
          @RegisterIp = registerip
          @CookieHash = cookiehash
          @Address = address
          @LoginSource = loginsource
          @LoginType = logintype
          @LoginSpend = loginspend
          @RootId = rootid
          @Referer = referer
          @JumpUrl = jumpurl
          @UserAgent = useragent
          @XForwardedFor = xforwardedfor
          @MouseClickCount = mouseclickcount
          @KeyboardClickCount = keyboardclickcount
          @MacAddress = macaddress
          @VendorId = vendorid
          @Imei = imei
          @AppVersion = appversion
          @BusinessId = businessid
          @WxSubType = wxsubtype
          @RandNum = randnum
          @WxToken = wxtoken
          @CheckDevice = checkdevice
        end

        def deserialize(params)
          @AccountType = params['AccountType']
          @Uid = params['Uid']
          @UserIp = params['UserIp']
          @PostTime = params['PostTime']
          @AppIdU = params['AppIdU']
          @NickName = params['NickName']
          @PhoneNumber = params['PhoneNumber']
          @EmailAddress = params['EmailAddress']
          @RegisterTime = params['RegisterTime']
          @RegisterIp = params['RegisterIp']
          @CookieHash = params['CookieHash']
          @Address = params['Address']
          @LoginSource = params['LoginSource']
          @LoginType = params['LoginType']
          @LoginSpend = params['LoginSpend']
          @RootId = params['RootId']
          @Referer = params['Referer']
          @JumpUrl = params['JumpUrl']
          @UserAgent = params['UserAgent']
          @XForwardedFor = params['XForwardedFor']
          @MouseClickCount = params['MouseClickCount']
          @KeyboardClickCount = params['KeyboardClickCount']
          @MacAddress = params['MacAddress']
          @VendorId = params['VendorId']
          @Imei = params['Imei']
          @AppVersion = params['AppVersion']
          @BusinessId = params['BusinessId']
          @WxSubType = params['WxSubType']
          @RandNum = params['RandNum']
          @WxToken = params['WxToken']
          @CheckDevice = params['CheckDevice']
        end
      end

      # QueryActivityAntiRush返回参数结构体
      class QueryActivityAntiRushResponse < TencentCloud::Common::AbstractModel
        # @param PostTime: 操作时间戳,单位:秒。
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type PostTime: String
        # @param UserIp: 用户操作的真实外网 IP。
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type UserIp: String
        # @param Level: 0:表示无恶意。
        # 1 - 4:恶意等级由低到高。
        # @type Level: Integer
        # @param RiskType: 风险类型。

        # 账号风险:

        # 1,账号信用低,账号近期存在因恶意被处罚历史,网络低活跃,被举报等因素;
        # 2,垃圾账号,疑似批量注册小号,近期存在严重违规或大量举报;
        # 3,无效账号,送检账号参数无法成功解析,请检查微信openid是否有误 ,QQopenid是否与appidU对应,手机号是否有误。
        # 4,黑名单,该账号在业务侧有过拉黑记录
        # 5,白名单,该账号在业务侧有过加白名单记录

        # 行为风险:
        # 101,批量操作,存在ip/设备/环境等因素的聚集性异常;
        # 102,自动机,疑似自动机批量请求;
        # 104,微信登录态无效,检查wxToken参数,是否已经失效;

        # 环境风险:
        # 201,环境异常,操作ip/设备/环境存在异常。当前ip为非常用ip或恶意ip段;
        # 205,非公网有效ip,传进来的IP地址为内网ip地址或者ip保留地址;
        # 206,设备异常,该设备存在异常的使用行为
        # @type RiskType: Array
        # @param AssociateAccount: accountType是QQ或微信开放账号时,用于标识QQ或微信用户登录后关联业务自身的账号ID
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type AssociateAccount: String
        # @param Uid: uid值
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type Uid: String
        # @param RootId: 用户操作的目的ID
        # 比如:点赞,该字段就是被点 赞的消息 id,如果是投票,就是被投号码的 ID
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type RootId: String
        # @param CodeDesc: 业务侧错误码。成功时返回Success,错误时返回具体业务错误原因。
        # 注意:此字段可能返回 null,表示取不到有效值。
        # @type CodeDesc: String
        # @param RequestId: 唯一请求 ID,每次请求都会返回。定位问题时需要提供该次请求的 RequestId。
        # @type RequestId: String

        attr_accessor :PostTime, :UserIp, :Level, :RiskType, :AssociateAccount, :Uid, :RootId, :CodeDesc, :RequestId
        
        def initialize(posttime=nil, userip=nil, level=nil, risktype=nil, associateaccount=nil, uid=nil, rootid=nil, codedesc=nil, requestid=nil)
          @PostTime = posttime
          @UserIp = userip
          @Level = level
          @RiskType = risktype
          @AssociateAccount = associateaccount
          @Uid = uid
          @RootId = rootid
          @CodeDesc = codedesc
          @RequestId = requestid
        end

        def deserialize(params)
          @PostTime = params['PostTime']
          @UserIp = params['UserIp']
          @Level = params['Level']
          @RiskType = params['RiskType']
          @AssociateAccount = params['AssociateAccount']
          @Uid = params['Uid']
          @RootId = params['RootId']
          @CodeDesc = params['CodeDesc']
          @RequestId = params['RequestId']
        end
      end

      # 助力场景信息
      class SponsorInfo < TencentCloud::Common::AbstractModel
        # @param SponsorOpenId: 助力场景建议填写:活动发起人微信OpenID。
        # @type SponsorOpenId: String
        # @param SponsorDeviceId: 助力场景建议填写:发起人设备号。
        # @type SponsorDeviceId: String
        # @param SponsorPhone: 助力场景建议填写:发起人手机号。
        # @type SponsorPhone: String
        # @param SponsorIp: 助力场景建议填写:发起人IP。
        # @type SponsorIp: String
        # @param CampaignUrl: 助力场景建议填写:活动链接。
        # @type CampaignUrl: String

        attr_accessor :SponsorOpenId, :SponsorDeviceId, :SponsorPhone, :SponsorIp, :CampaignUrl
        
        def initialize(sponsoropenid=nil, sponsordeviceid=nil, sponsorphone=nil, sponsorip=nil, campaignurl=nil)
          @SponsorOpenId = sponsoropenid
          @SponsorDeviceId = sponsordeviceid
          @SponsorPhone = sponsorphone
          @SponsorIp = sponsorip
          @CampaignUrl = campaignurl
        end

        def deserialize(params)
          @SponsorOpenId = params['SponsorOpenId']
          @SponsorDeviceId = params['SponsorDeviceId']
          @SponsorPhone = params['SponsorPhone']
          @SponsorIp = params['SponsorIp']
          @CampaignUrl = params['CampaignUrl']
        end
      end

      # 微信账号信息。
      class WeChatAccountInfo < TencentCloud::Common::AbstractModel
        # @param WeChatOpenId: 微信的OpenID/UnionID 。
        # @type WeChatOpenId: String
        # @param WeChatSubType: 微信开放账号类型:
        # 1:微信公众号/微信第三方登录。
        # 2:微信小程序。
        # @type WeChatSubType: Integer
        # @param RandStr: 随机串。如果WeChatSubType是2,该字段必填。Token签名随机数,建议16个字符。
        # @type RandStr: String
        # @param WeChatAccessToken: 如果WeChatSubType是1,填入授权的access_token(注意:不是普通access_token,详情请参阅官方说明文档。获取网页版本的access_token时,scope字段必需填写snsapi_userinfo。
        # 如果WeChatSubType是2,填入以session_key为密钥签名随机数RandStr(hmac_sha256签名算法)得到的字符串。
        # @type WeChatAccessToken: String
        # @param AssociateAccount: 用于标识微信用户登录后所关联业务自身的账号ID。
        # @type AssociateAccount: String
        # @param MobilePhone: 账号绑定的手机号。
        # @type MobilePhone: String
        # @param DeviceId: 用户设备号。
        # @type DeviceId: String

        attr_accessor :WeChatOpenId, :WeChatSubType, :RandStr, :WeChatAccessToken, :AssociateAccount, :MobilePhone, :DeviceId
        
        def initialize(wechatopenid=nil, wechatsubtype=nil, randstr=nil, wechataccesstoken=nil, associateaccount=nil, mobilephone=nil, deviceid=nil)
          @WeChatOpenId = wechatopenid
          @WeChatSubType = wechatsubtype
          @RandStr = randstr
          @WeChatAccessToken = wechataccesstoken
          @AssociateAccount = associateaccount
          @MobilePhone = mobilephone
          @DeviceId = deviceid
        end

        def deserialize(params)
          @WeChatOpenId = params['WeChatOpenId']
          @WeChatSubType = params['WeChatSubType']
          @RandStr = params['RandStr']
          @WeChatAccessToken = params['WeChatAccessToken']
          @AssociateAccount = params['AssociateAccount']
          @MobilePhone = params['MobilePhone']
          @DeviceId = params['DeviceId']
        end
      end

    end
  end
end