2017-02-24 77 views
0

我试图通过rails应用程序实现Payfort支付网关。 但我得到下面的响应消息:将Payfort支付与Ruby On Rails应用程序集成

"response_message":"Signature mismatch" 

以下是我尝试:

params = {command: "AUTHORIZATION", 
      currency: "USD", 
      access_code: "z7TfXF2xxxxxxxxxxxx", 
      merchant_identifier: "xoNbjDoq", 
      merchant_reference: "405", 
      language: "en", 
      amount: 250, 
      token_name: "token_is_here", 
      expiry_date: "07/2023", 
      card_number: "5200421234563432", 
      card_security_code: "417", 
      card_holder_name: "Abc Xyz", 
      remember_me: "YES", 
      return_url: "http://lvh.me:3000/payments/test"} 
params = params.except(:card_security_code, :card_number, :expiry_date, :card_holder_name, :remember_me) 

    params = params.sort.to_h 
    string = params.to_query(nil) 
    string = string.gsub! '&', '' 
    string = @@sha_request + string + @@sha_request 
    string = Digest::SHA256.hexdigest string 
uri = URI.parse("https://sbpaymentservices.payfort.com/FortAPI/paymentApi") 

    header = {'Content-Type': 'application/json'} 

    http = Net::HTTP.new(uri.host, uri.port) 
    http.use_ssl = true 
    request = Net::HTTP::Post.new(uri.request_uri, header) 
    request.body = params.to_json 

    response = http.request(request) 

任何帮助将不胜感激。提前致谢。 :)

回答

0

生成签名时检查参数序列。并检查算法u必须建立帐户,并使用相同的算法而生成签名

要不尝试使用他们的宝石

https://github.com/payfort/start-ruby

+0

感谢您的答复。但你能给我任何参数的例子吗?谢谢 :) – Vishal

0

可能有很多原因,这样的问题其中之一是轨道形成params和哈希算法,这里是我的实现它

def sign_with_key(params, key) 
    string_to_digest = params.sort { |a, b| a[0].upcase <=> b[0].upcase }.map { |k, v| "#{k}=#{v}" }.join() 
    string_to_digest.prepend(key) 
    string_to_digest << key 
    "Digest::#{@options[:sha].upcase}".constantize.hexdigest(string_to_digest) 
    end 
相关问题