Class: WeixinRailsMiddleware::WexinAdapter

Inherits:
Object
  • Object
show all
Extended by:
ConfigurationHelpers
Defined in:
lib/weixin_rails_middleware/adapter/weixin_adapter.rb

Direct Known Subclasses

MultiplePublicAccount, SinglePublicAccount

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ConfigurationHelpers

custom_adapter, token_model, token_model_class

Constructor Details

#initialize(weixin_params) ⇒ WexinAdapter

Returns a new instance of WexinAdapter.



9
10
11
12
13
14
15
16
17
# File 'lib/weixin_rails_middleware/adapter/weixin_adapter.rb', line 9

def initialize(weixin_params)
  @weixin_secret_key = weixin_params[:weixin_secret_key]
  # 以下参数为什么加空字符串默认值的原因:
  # 微信偶尔会再重新发一次get请求,但是不会带上signature,timestamp,nonce的参数
  @signature = weixin_params[:signature] || ''
  @timestamp = weixin_params[:timestamp] || ''
  @nonce     = weixin_params[:nonce]     || ''
  @echostr   = weixin_params[:echostr]   || ''
end

Instance Attribute Details

#echostrObject

Returns the value of attribute echostr.



6
7
8
# File 'lib/weixin_rails_middleware/adapter/weixin_adapter.rb', line 6

def echostr
  @echostr
end

#nonceObject

Returns the value of attribute nonce.



6
7
8
# File 'lib/weixin_rails_middleware/adapter/weixin_adapter.rb', line 6

def nonce
  @nonce
end

#signatureObject

Returns the value of attribute signature.



6
7
8
# File 'lib/weixin_rails_middleware/adapter/weixin_adapter.rb', line 6

def signature
  @signature
end

#timestampObject

Returns the value of attribute timestamp.



6
7
8
# File 'lib/weixin_rails_middleware/adapter/weixin_adapter.rb', line 6

def timestamp
  @timestamp
end

#weixin_secret_keyObject

Returns the value of attribute weixin_secret_key.



7
8
9
# File 'lib/weixin_rails_middleware/adapter/weixin_adapter.rb', line 7

def weixin_secret_key
  @weixin_secret_key
end

Class Method Details

.decode64(encoding_aes) ⇒ Object



62
63
64
# File 'lib/weixin_rails_middleware/adapter/weixin_adapter.rb', line 62

def decode64(encoding_aes)
  Base64.decode64("#{encoding_aes}=")
end

.error_msgObject



58
59
60
# File 'lib/weixin_rails_middleware/adapter/weixin_adapter.rb', line 58

def error_msg
  "#{__FILE__}:#{__LINE__}: Weixin signature NotMatch"
end

.init_with(weixin_params) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/weixin_rails_middleware/adapter/weixin_adapter.rb', line 19

def self.init_with(weixin_params)
  if custom_adapter.present?
    if custom_adapter.constantize.superclass != self
      raise "#{custom_adapter.to_s} must inherite WexinAdapter"
    end
    return custom_adapter.constantize.new(weixin_params)
  end
  if weixin_token_string.present?
    SinglePublicAccount.new(weixin_params)
  else
    MultiplePublicAccount.new(weixin_params)
  end
end

Instance Method Details

#check_weixin_legalityObject



33
34
35
36
# File 'lib/weixin_rails_middleware/adapter/weixin_adapter.rb', line 33

def check_weixin_legality
  return render_authorize_result(401, self.class.error_msg) if !is_signature_valid?
  render_authorize_result(200, echostr, true)
end

#current_weixin_public_accountObject

Raises:

  • (NotImplementedError)


45
46
47
# File 'lib/weixin_rails_middleware/adapter/weixin_adapter.rb', line 45

def 
  raise NotImplementedError, "Subclasses must implement current_weixin_public_account method"
end

#current_weixin_tokenObject

Raises:

  • (NotImplementedError)


49
50
51
# File 'lib/weixin_rails_middleware/adapter/weixin_adapter.rb', line 49

def current_weixin_token
  raise NotImplementedError, "Subclasses must implement current_weixin_token method"
end

#is_signature_valid?Boolean

Returns:

  • (Boolean)


38
39
40
41
42
43
# File 'lib/weixin_rails_middleware/adapter/weixin_adapter.rb', line 38

def is_signature_valid?
  sort_params = [current_weixin_token, timestamp, nonce].sort.join
  current_signature = Digest::SHA1.hexdigest(sort_params)
  return true if current_signature == signature
  false
end

#is_weixin_secret_key_valid?Boolean

Returns:

  • (Boolean)

Raises:

  • (NotImplementedError)


53
54
55
# File 'lib/weixin_rails_middleware/adapter/weixin_adapter.rb', line 53

def is_weixin_secret_key_valid?
  raise NotImplementedError, "Subclasses must implement is_weixin_secret_key_valid? method"
end