class GtRubySdk::Base

Constants

RESPONSE_STATUS

Attributes

captcha_id[R]
private_key[R]
response[R]

Public Class Methods

new(captcha_id, private_key) click to toggle source

构造函数

# File lib/gt_ruby_sdk.rb, line 15
def initialize(captcha_id, private_key)
  @captcha_id = captcha_id
  @private_key = private_key
end

Public Instance Methods

local_validate(challenge, pin_code, seccode) click to toggle source

极验服务器状态宕机的二次验证接口

# File lib/gt_ruby_sdk.rb, line 53
def local_validate(challenge, pin_code, seccode)
  GtRubySdk::LocalServer.validate(challenge, pin_code, seccode)
end
pretreat(user_id = nil) click to toggle source

预处理接口: 判断极验服务器是否down机

# File lib/gt_ruby_sdk.rb, line 21
def pretreat(user_id = nil)
  challenge = GtRubySdk::RemoteServer.register(captcha_id, user_id)

  return failed_pretreatment if challenge.size != 32

  successful_pretreatment(challenge)
rescue Faraday::Error::ClientError
  failed_pretreatment
end
remote_validate(challenge, pin_code, seccode, user_id = nil) click to toggle source

极验服务器状态正常的二次验证接口

# File lib/gt_ruby_sdk.rb, line 39
def remote_validate(challenge, pin_code, seccode, user_id = nil)
  return false unless pin_code_validated?(challenge, pin_code)

  data = {
    seccode: seccode,
    sdk: GtRubySdk::VERSION
  }

  data[:user_id] = user_id if user_id.present?

  GtRubySdk::RemoteServer.validate(data) == Digest::MD5.hexdigest(seccode)
end
response_json() click to toggle source

获取预处理结果的接口

# File lib/gt_ruby_sdk.rb, line 32
def response_json
  return if response.blank?

  JSON.generate(response)
end

Private Instance Methods

build_response(success, challenge) click to toggle source
# File lib/gt_ruby_sdk.rb, line 75
def build_response(success, challenge)
  {
    success: success ? RESPONSE_STATUS[:success] : RESPONSE_STATUS[:failure],
    gt: captcha_id,
    challenge: challenge
  }
end
failed_pretreatment() click to toggle source
# File lib/gt_ruby_sdk.rb, line 59
def failed_pretreatment
  challenge = GtRubySdk::LocalServer.register

  @response = build_response(false, challenge)

  RESPONSE_STATUS[:failure]
end
pin_code_validated?(challenge, pin_code) click to toggle source
# File lib/gt_ruby_sdk.rb, line 83
def pin_code_validated?(challenge, pin_code)
  return false if pin_code.size != 32

  Digest::MD5.hexdigest([private_key, 'geetest'.freeze, challenge].join) == pin_code
end
successful_pretreatment(challenge) click to toggle source
# File lib/gt_ruby_sdk.rb, line 67
def successful_pretreatment(challenge)
  encrypted_challenge = Digest::MD5.hexdigest([challenge, private_key].join)

  @response = build_response(true, encrypted_challenge)

  RESPONSE_STATUS[:success]
end