lib/reapal/http/decode.rb in reapal-0.9.0 vs lib/reapal/http/decode.rb in reapal-0.9.1

- old
+ new

@@ -1,22 +1,52 @@ # coding: utf-8 module Reapal module Http module Decode + # 解析异步通知的数据 + # + # @param encryptkey_arg [String] 加密字符串 + # @param data_arg [String] 加密数据 + # @param config [hash] 配置信息 + # + # @return [ Hash ] 结果集 + # * :version [String] api 版本 + # * :service [String] 富民服务 + # * :sign [String] 签名 + # * :signType [String] 签名类型 + # * :data_valid [Boolean] 是否通过验签 + # + # * :resData: 如果返回正确结果 + # * :orderNo [String] 发标订单号 + # * :resultCode [String] 结果代码 + # * 等其他各自业务参数 + # + # * :resError: 如果返回错误结果 + # * :service [String] + # * :orderNo [String] + # * :errorCode [String] + # * :errorMsg [String] + # def self.decode_notify_data(encryptkey_arg, data_arg, config) # 1. 拿到用来加密的16位随机字符串 random_key = Encrypt::RSA.decrypt(encryptkey_arg, config[:private_key]) # 2. 用16位随机字符串解密返回的数据 data_string = Encrypt::AES.decrypt(data_arg, random_key) data = Utils.symbolize_keys(JSON.parse(data_string)) - data[:resData] = Utils.symbolize_keys(JSON.parse(data[:resData])) + if !data[:resData].nil? + data[:resData] = Utils.symbolize_keys(JSON.parse(data[:resData])) + sign_str = data[:resData].to_json + elsif !data[:resError].nil? + data[:resError] = Utils.symbolize_keys(JSON.parse(data[:resError])) + sign_str = data[:resError].to_json + end # 3. 验签,错误时候 sign 是没有值的 - if data[:resData][:errorCode] || (data[:sign] && Sign::MD5.verify?(data[:resData].to_json, config[:md5_key], data[:sign])) + if Sign::MD5.verify?(sign_str, config[:md5_key], data[:sign]) data[:data_valid] = true else data[:data_valid] = false end