diff --git a/lib/paiement_cic.rb b/lib/paiement_cic.rb index 8dbf7b1..3dc5766 100644 --- a/lib/paiement_cic.rb +++ b/lib/paiement_cic.rb @@ -21,16 +21,16 @@ class PaiementCic @@hmac_key = "ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ" # clé extraite grâce à extract2HmacSha1.html fourni par le Crédit Mutuel cattr_accessor :hmac_key - + @@target_url = "https://paiement.creditmutuel.fr/test/paiement.cgi" # "https://ssl.paiement.cic-banques.fr/paiement.cgi" cattr_accessor :target_url - + @@tpe = "123456" cattr_accessor :tpe - + @@societe = "masociete" cattr_accessor :societe - + @@url_ok = "" cattr_accessor :url_ok @@ -63,52 +63,52 @@ class PaiementCic hmac_key.valid_hmac?(mac_string, params['MAC']) end - + # Check if the HMAC matches the HMAC of the data string - def valid_hmac?(mac_string, sent_mac) - computeHMACSHA1(mac_string) == sent_mac.downcase - end - + def valid_hmac?(mac_string, sent_mac) + computeHMACSHA1(mac_string) == sent_mac.downcase + end + # Return the HMAC for a data string - def computeHMACSHA1(data) - hmac_sha1(usable_key(self), data).downcase - end - + def computeHMACSHA1(data) + hmac_sha1(usable_key(self), data).downcase + end + def hmac_sha1(key, data) - length = 64 + length = 64 - if (key.length > length) - key = [Digest::SHA1.hexdigest(key)].pack("H*") - end + if (key.length > length) + key = [Digest::SHA1.hexdigest(key)].pack("H*") + end - key = key.ljust(length, 0.chr) - ipad = ''.ljust(length, 54.chr) - opad = ''.ljust(length, 92.chr) + key = key.ljust(length, 0.chr) + ipad = ''.ljust(length, 54.chr) + opad = ''.ljust(length, 92.chr) - k_ipad = key ^ ipad - k_opad = key ^ opad + k_ipad = key ^ ipad + k_opad = key ^ opad - #Digest::SHA1.hexdigest(k_opad + [Digest::SHA1.hexdigest(k_ipad + sData)].pack("H*")) - OpenSSL::HMAC.hexdigest(OpenSSL::Digest::Digest.new("sha1"), key, data) - end + #Digest::SHA1.hexdigest(k_opad + [Digest::SHA1.hexdigest(k_ipad + sData)].pack("H*")) + OpenSSL::HMAC.hexdigest(OpenSSL::Digest::Digest.new("sha1"), key, data) + end private - # Return the key to be used in the hmac function - def usable_key(payement) + # Return the key to be used in the hmac function + def usable_key(payement) - hex_string_key = payement.hmac_key[0..37] - hex_final = payement.hmac_key[38..40] + "00"; + hex_string_key = payement.hmac_key[0..37] + hex_final = payement.hmac_key[38..40] + "00"; - cca0 = hex_final[0].ord + cca0 = hex_final[0].ord - if cca0 > 70 && cca0 < 97 - hex_string_key += (cca0 - 23).chr + hex_final[1..2] - elsif hex_final[1..2] == "M" - hex_string_key += hex_final[0..1] + "0" - else - hex_string_key += hex_final[0..2] - end + if cca0 > 70 && cca0 < 97 + hex_string_key += (cca0 - 23).chr + hex_final[1..2] + elsif hex_final[1..2] == "M" + hex_string_key += hex_final[0..1] + "0" + else + hex_string_key += hex_final[0..2] + end - [hex_string_key].pack("H*") - end + [hex_string_key].pack("H*") + end end diff --git a/lib/paiement_cic/form_helper.rb b/lib/paiement_cic/form_helper.rb index 32b768c..429a433 100644 --- a/lib/paiement_cic/form_helper.rb +++ b/lib/paiement_cic/form_helper.rb @@ -7,11 +7,11 @@ module PaiementCic::FormHelper sDate = Time.now.strftime("%d/%m/%Y:%H:%M:%S") chaine = [oMac.tpe, sDate, oa["montant"], oa["reference"].to_s, oa["texte-libre"], oMac.version, "FR", oMac.societe, "", "", "", "", "", "", "", "", "", "", ""].join("*") chaineMAC = oMac.computeHMACSHA1(chaine) - + url_retour = options[:url_retour] || bank_callback_order_transactions_url url_retour_ok = options[:url_retour_ok] || bank_callback_order_transactions_url(order) url_retour_err = options[:url_retour_err] || bank_err_order_transaction_url(order) - + html = '