class DavinciRubyClientSDK::Receiver
Attributes
mode[RW]
Public Class Methods
new(mode = :notify)
click to toggle source
# File lib/DavinciRubyClientSDK/receiver.rb, line 8 def initialize(mode = :notify) @mode = mode end
Public Instance Methods
receive(params, headers = [])
click to toggle source
# File lib/DavinciRubyClientSDK/receiver.rb, line 12 def receive(params, headers = []) if @mode ==:notify if self.sign_check(params, headers['Davinci-Signature'], headers['Service'], headers['User-Agent']) error = params['error'].nil? ? false : true return error, params else # 验签失败 params['error'] = 'SignCheckError or ServerNotTrust' return true, params end elsif @mode == :response begin params = JSON.parse params error = params['error'].nil? ? false : true rescue Exception => err error = true end return error, params else raise 'receiver not found!' end end
Private Instance Methods
sign_check(params, header_signs, service, ua)
click to toggle source
# File lib/DavinciRubyClientSDK/receiver.rb, line 38 def sign_check(params, header_signs, service, ua) sorted_body = Hash[params.sort] body_array = Array.new sorted_body.map do |k, v| body_array << "#{k}=#{v}" end app_key = DavinciRubyClientSDK::Setting.app_secret signed_string = OpenSSL::HMAC.hexdigest('sha1', app_key, body_array.join('&')) signed_string == header_signs && service == 'Davinci' && ua == 'Davinci' end