module JdPay::Sign

Constants

JDPAY_RSA_PUBLIC_KEY

Public Class Methods

md5_sign(order_id, options = {}) click to toggle source

params:

:orderId
# File lib/jd_pay/sign.rb, line 19
def md5_sign(order_id, options = {})
  Digest::MD5.hexdigest(
    "merchant=#{options[:mch_id] || JdPay.mch_id}" +
    "&orderId=#{order_id}&key=#{options[:md5_key] || JdPay.md5_key}"
  )
end
rsa_decrypt(sign_str, options = {}) click to toggle source
# File lib/jd_pay/sign.rb, line 31
def rsa_decrypt(sign_str, options = {})
  public_key = OpenSSL::PKey::RSA.new(options[:pub_key] || JdPay.public_key)
  public_key.public_decrypt(Base64.decode64(sign_str))
end
rsa_encrypt(str, options = {}) click to toggle source
# File lib/jd_pay/sign.rb, line 26
def rsa_encrypt(str, options = {})
  private_key = OpenSSL::PKey::RSA.new(options[:pri_key] || JdPay.pri_key)
  Base64.strict_encode64(private_key.private_encrypt Digest::SHA256.hexdigest(str))
end
rsa_verify?(params, options = {}) click to toggle source
# File lib/jd_pay/sign.rb, line 36
def rsa_verify?(params, options = {})
  params = params['jdpay'].dup
  sign_str = params.delete('sign')
  xml_without_sign = JdPay::Util.to_xml(params, root: 'jdpay')
  ori_datas = [xml_without_sign, xml_without_sign.gsub("?>", " ?>")].map do |xml|
    Digest::SHA256.hexdigest(xml)
  end
  ori_datas.include? rsa_decrypt(sign_str, options)
end