Class: Jieshun::Parking::DataReceiver
- Inherits:
-
Object
- Object
- Jieshun::Parking::DataReceiver
- Defined in:
- lib/jieshun/parking/data_receiver.rb
Instance Method Summary collapse
- #generate_signature(params) ⇒ Object
-
#initialize(secret, verify_signature) ⇒ DataReceiver
constructor
A new instance of DataReceiver.
- #receive(params, options) ⇒ Object
- #verify_signature(params, options) ⇒ Object
Constructor Details
#initialize(secret, verify_signature) ⇒ DataReceiver
Returns a new instance of DataReceiver.
5 6 7 8 |
# File 'lib/jieshun/parking/data_receiver.rb', line 5 def initialize(secret, verify_signature) @secret = secret @verify_signature = verify_signature end |
Instance Method Details
#generate_signature(params) ⇒ Object
42 43 44 45 46 47 48 49 50 |
# File 'lib/jieshun/parking/data_receiver.rb', line 42 def generate_signature(params) # sn:签名(sign),使用md5算法对密钥和ts以及dataItem进行签名,签名后的值为大写,规则如下: # sn=md5(secret+ts+dataItems) = params['ts'] data_items = params['dataItems'] payload = "#{@secret}#{}#{data_items}" md5_string = Digest::MD5.hexdigest(payload) md5_string.upcase end |
#receive(params, options) ⇒ Object
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/jieshun/parking/data_receiver.rb', line 10 def receive(params, ) error_handler = [:error_handler] error_occurred = false internal_error_handler = lambda do |error| error_occurred = true if error.is_a?(Jieshun::Parking::InvalidSignatureError) error_handler.call({ resultCode: 205, message: '验签失败' }) else #TODO process other errors like ip unbind error_handler.call({ resultCode: 1, message: '处理失败' }) end end verify_signature(params, { error_handler: internal_error_handler }) if @verify_signature return nil if error_occurred JSON.parse(params['dataItems']) end |
#verify_signature(params, options) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/jieshun/parking/data_receiver.rb', line 27 def verify_signature(params, ) signature_param = params['sn'] signature = generate_signature(params) unless signature_param == signature error_handler = [:error_handler] if error_handler error_handler.call(Jieshun::Parking::InvalidSignatureError.new) else raise Jieshun::Parking::InvalidSignatureError.new end end end |