2017-02-24 104 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