2017-02-24 2 views
0

J'essaie de mettre en œuvre l'application de passerelle de paiement Payfort avec rails. Mais je reçois un message de réponse suivant:Intégrer le paiement Payfort avec Ruby On Rails App

"response_message":"Signature mismatch" 

Après mon essai:

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) 

Toute aide sera appréciée. Merci d'avance. :)

Répondre

0

Vérifiez la séquence des paramètres lors de la génération de la signature. et vérifier algorithme qui u ont la configuration en compte et utiliser le même algorithme tout en générant la signature

Ou bien essayer d'utiliser leur petit bijou

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

+0

Merci pour la réponse. Mais pouvez-vous me donner un exemple de paramètres? Merci :) – Vishal

0

il peut y avoir de nombreuses raisons de cette question l'un d'eux est rails forment params et également algorithme de hachage, voici ma mise en œuvre pour cela

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