Sha256: 6df471fac26fe722ec70b2918ec2380d8843eec6c2846049681fc29b4b780260

Contents?: true

Size: 1.18 KB

Versions: 3

Compression:

Stored size: 1.18 KB

Contents

require 'digest/md5'

module WxPay
  module Sign

    SIGN_TYPE_MD5 = 'MD5'
    SIGN_TYPE_HMAC_SHA256 = 'HMAC-SHA256'

    def self.generate(params, sign_type = SIGN_TYPE_MD5)
      key = params.delete(:key)

      new_key = params["key"] #after
      key = params.delete("key") if params["key"] #after

      query = params.sort.map do |k, v|
        "#{k}=#{v}" if v.to_s != ''
      end.compact.join('&')

      string_sign_temp = "#{query}&key=#{key || new_key || WxPay.key}" #after

      if sign_type == SIGN_TYPE_MD5
        Digest::MD5.hexdigest(string_sign_temp).upcase
      elsif sign_type == SIGN_TYPE_HMAC_SHA256
        OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), key, string_sign_temp).upcase
      else
        warn("WxPay Warn: unknown sign_type : #{sign_type}")
      end
    end

    def self.verify?(params, options = {})
      return true if WxPay.sandbox_mode?

      params = params.dup
      params["appid"] = options[:appid] if options[:appid]
      params["mch_id"] = options[:mch_id]  if options[:mch_id]
      params["key"] = options[:key] if options[:key]

      sign = params.delete('sign') || params.delete(:sign)
      generate(params) == sign
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
wx_pay-0.20.1 lib/wx_pay/sign.rb
wx_pay-0.20.0 lib/wx_pay/sign.rb
wx_pay-0.19.0 lib/wx_pay/sign.rb