Problèmed'dentifitydu commerce。 Accès拒绝!电子交易/ Paybox

时间:2018-01-30 12:45:36

标签: ruby-on-rails ruby transactions

我在法国农业信贷银行(法国银行)的电子交易系统中使用Paybox付款时出现问题。

我通过表单发送的变量没有问题,如下所示:

<form method="POST" action="<%= ENV['CREDIT_AGRICOLE_URL'] %>" id="paiement-form">
  <input type="hidden" name="PBX_SITE" value="<%= ENV['PBX_SITE'] %>">
  <input type="hidden" name="PBX_RANG" value="<%= ENV['PBX_RANG'] %>">
  <input type="hidden" name="PBX_IDENTIFIANT" value="<%= ENV['PBX_IDENTIFIANT'] %>">
  <input type="hidden" name="PBX_TOTAL" value="<%= @commande.total_price_centimes %>">
  <input type="hidden" name="PBX_DEVISE" value="978">
  <input type="hidden" name="PBX_CMD" value="<%= @commande.code %>">
  <input type="hidden" name="PBX_PORTEUR" value="<%= ENV['PBX_PORTEUR'] %>">
  <input type="hidden" name="PBX_REPONDRE_A" value="<%= ENV['PBX_REPONDRE_A'] %>">
  <input type="hidden" name="PBX_RETOUR" value="<%= ENV['PBX_RETOUR'] %>">
  <input type="hidden" name="PBX_EFFECTUE" value="<%= @confirmation_url %>">
  <input type="hidden" name="PBX_ANNULE" value="<%= @annulation_url %>">
  <input type="hidden" name="PBX_REFUSE" value="<%= @refus_url %>">
  <input type="hidden" name="PBX_HASH" value="SHA512">
  <input type="hidden" name="PBX_TIME" value="<%= @current_time %>">
  <input type="hidden" name="PBX_HMAC" value="<%= @signature %>">
  <input type="submit" value="Envoyer">
</form>

我已经这样设置了HMAC:

def paiement
    @commande = Commande.find_by(code: params[:id])

    @confirmation_url = ENV['PBX_EFFECTUE'].gsub('CODE_COMMANDE', @commande.code)
    @annulation_url = ENV['PBX_ANNULE'].gsub('CODE_COMMANDE', @commande.code)
    @refus_url = ENV['PBX_REFUSE'].gsub('CODE_COMMANDE', @commande.code)

    @current_time = Time.now.strftime('%FT%T%:z')

    msg = [
      "PBX_SITE=#{ENV['PBX_SITE']}",
      "PBX_RANG=#{ENV['PBX_RANG']}",
      "PBX_IDENTIFIANT=#{ENV['PBX_IDENTIFIANT']}",
      "PBX_TOTAL=#{@commande.total_price_centimes}",
      "PBX_DEVISE=978",
      "PBX_CMD=#{@commande.code}",
      "PBX_PORTEUR=#{current_user.email}",
      "PBX_REPONDRE_A=#{ENV['PBX_REPONDRE_A']}",
      "PBX_RETOUR=#{ENV['PBX_RETOUR']}",
      "PBX_EFFECTUE=#{@confirmation_url}",
      "PBX_ANNULE=#{@annulation_url}",
      "PBX_REFUSE=#{@refus_url}",
      "PBX_HASH=SHA512",
      "PBX_TIME=#{@current_time}"
    ]

    key = ENV["CLE_HMAC"]

    binKey = [key].pack("B*")
    digest = OpenSSL::Digest.new('sha512')
    @signature = OpenSSL::HMAC.hexdigest(digest, binKey, msg.join('&')).upcase
    binding.pry
  end

以下是PHP中的示例脚本:

// On récupère la date au format ISO-8601
$dateTime = date("c");

// On crée la chaîne à hacher sans URLencodage
$msg = "PBX_SITE=".$pbx_site.
"&PBX_RANG=".$pbx_rang.
"&PBX_IDENTIFIANT=".$pbx_identifiant.
"&PBX_TOTAL=".$pbx_total.
"&PBX_DEVISE=978".
"&PBX_CMD=".$pbx_cmd.
"&PBX_PORTEUR=".$pbx_porteur.
"&PBX_REPONDRE_A=".$pbx_repondre_a.
"&PBX_RETOUR=".$pbx_retour.
"&PBX_EFFECTUE=".$pbx_effectue.
"&PBX_ANNULE=".$pbx_annule.
"&PBX_REFUSE=".$pbx_refuse.
"&PBX_HASH=SHA512".
"&PBX_TIME=".$dateTime;
// echo $msg;

// Si la clé est en ASCII, On la transforme en binaire
$binKey = pack("H*", $keyTest);

// On calcule l’empreinte (à renseigner dans le paramètre PBX_HMAC) grâce à la fonction hash_hmac et //
// la clé binaire
// On envoi via la variable PBX_HASH l'algorithme de hachage qui a été utilisé (SHA512 dans ce cas)
// Pour afficher la liste des algorithmes disponibles sur votre environnement, décommentez la ligne //
// suivante
// print_r(hash_algos());
$hmac = strtoupper(hash_hmac('sha512', $msg, $binKey));

和PHP形式:

<!------------------ ENVOI DES INFORMATIONS A PAYBOX (Formulaire) ------------------>
<form method="POST" action="<?php echo $serveurOK; ?>">
<input type="hidden" name="PBX_SITE" value="<?php echo $pbx_site; ?>">
<input type="hidden" name="PBX_RANG" value="<?php echo $pbx_rang; ?>">
<input type="hidden" name="PBX_IDENTIFIANT" value="<?php echo $pbx_identifiant; ?>">
<input type="hidden" name="PBX_TOTAL" value="<?php echo $pbx_total; ?>">
<input type="hidden" name="PBX_DEVISE" value="978">
<input type="hidden" name="PBX_CMD" value="<?php echo $pbx_cmd; ?>">
<input type="hidden" name="PBX_PORTEUR" value="<?php echo $pbx_porteur; ?>">
<input type="hidden" name="PBX_REPONDRE_A" value="<?php echo $pbx_repondre_a; ?>">
<input type="hidden" name="PBX_RETOUR" value="<?php echo $pbx_retour; ?>">
<input type="hidden" name="PBX_EFFECTUE" value="<?php echo $pbx_effectue; ?>">
<input type="hidden" name="PBX_ANNULE" value="<?php echo $pbx_annule; ?>">
<input type="hidden" name="PBX_REFUSE" value="<?php echo $pbx_refuse; ?>">
<input type="hidden" name="PBX_HASH" value="SHA512">
<input type="hidden" name="PBX_TIME" value="<?php echo $dateTime; ?>">
<input type="hidden" name="PBX_HMAC" value="<?php echo $hmac; ?>">
<input type="submit" value="Envoyer">
</form>

有一些我想念的东西,但是我已经尝试了一千次来找到问题的来源,但我已经没有想法(和时间)。

有人可以帮忙吗?

0 个答案:

没有答案