Module: WechatApp::UserInfo

Defined in:
lib/wechat_app/user_info.rb

Defined Under Namespace

Classes: DecryptedDataFormatError

Class Method Summary collapse

Class Method Details

.data_valid?(raw_data, session_key, signature) ⇒ Boolean

Returns:

  • (Boolean)


6
7
8
9
# File 'lib/wechat_app/user_info.rb', line 6

def data_valid?(raw_data, session_key, signature)
  sign_str = "#{raw_data}#{session_key}"
  Digest::SHA1.hexdigest(sign_str) == signature
end

.decrypt_data(encrypted_data, session_key, iv) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/wechat_app/user_info.rb', line 11

def decrypt_data(encrypted_data, session_key, iv)
  encrypted = Base64.strict_decode64(encrypted_data)
  decipher = OpenSSL::Cipher::AES128.new(:CBC)
  decipher.decrypt
  decipher.key = Base64.strict_decode64(session_key)
  decipher.iv = Base64.strict_decode64(iv)

  decrypted_data = decipher.update(encrypted) + decipher.final

  begin
    JSON.parse(decrypted_data)
  rescue JSON::ParserError => e
    msg = <<~MSG
    decrypted_data parse error: #{e.message}
    decrypted_data: #{decrypted_data}
    MSG
    raise DecryptedDataFormatError.new(msg)
  end
end