Class: SimpleWx::Signaturer

Inherits:
Base
  • Object
show all
Defined in:
lib/simple_wx/signaturer.rb

Instance Attribute Summary

Attributes inherited from Base

#error, #raise_flag

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

method_missing

Constructor Details

#initialize(options = {}) ⇒ Signaturer

Usage

signer = SimpleWx::Signaturer.new timestamp: params, nonce: params if signer.sign params

render text: params[:echostr]

else

...

end



14
15
16
17
18
# File 'lib/simple_wx/signaturer.rb', line 14

def initialize options = {}
  @timestamp = options[:timestamp] || Time.now.to_i
  @nonce     = options[:nonce]      || SecureRandom.urlsafe_base64
  @token     = SimpleWx.weixin_config["token"] #TODO 没有就raise错误,用method_missing
end

Class Method Details

.jsapi_signature_gen(options) ⇒ Object



44
45
46
47
# File 'lib/simple_wx/signaturer.rb', line 44

def self.jsapi_signature_gen options
  url = options.delete(:url)
  self.new(options).jsapi_signature_gen url
end

Instance Method Details

#jsapi_signature_gen(url) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/simple_wx/signaturer.rb', line 26

def jsapi_signature_gen url
  params = {
    'jsapi_ticket' => AccessToken.jsapi_ticket,
    'noncestr' => @nonce,
    'timestamp' => @timestamp,
    'url' => url.split('#', 2).first
  }
  params = Hash[params.sort]
  encrypt_str = params.to_a.map { |a, b| "#{a}=#{b}" }.join('&')
  signature = sha1_encrypt(encrypt_str)
  {
    'appId' => SimpleWx.weixin_config["app_id"],
    'timestamp' => @timestamp,
    'nonceStr' => @nonce,
    'signature' => signature
  }
end

#sign(signture) ⇒ Object



20
21
22
23
24
# File 'lib/simple_wx/signaturer.rb', line 20

def sign signture
  @sort_array = [@timestamp, @nonce, @token].sort
  encrypt_str = @sort_array.join
  signture == sha1_encrypt(encrypt_str)
end