如何修复 PHP 集成 Authorize.net 的 SIM 卡中的错误 99

How to fix error 99 in a PHP integration of Authorize.net's SIM

我正在使用 Authorize.net 的 SIM 卡进行信用卡处理,这样我的网站就会发送到 Authorize.net 付款表格。我收到“(99) 此交易无法接受”,我不确定为什么。

所以,这是我拼凑起来处理这个问题的核心代码。此处计算的值(键除外)以提交的形式放入 input[type=hidden] 元素中。

<?php
date_default_timezone_set("America/New_York");
$login = "XXX"; //A 12-character string
$sequenceNumber = $orderId; //equals 22
$timestamp = time();
$amount = $cost; // Equals 53.18
$key = "XXX"; //A 128-character string
$x_fp_hash = bin2hex(hash_hmac("sha512","$login^$sequenceNumber^$timestamp^$amount^USD",$key));
?>

我正在为我的帐户获取 Authorize.net 在线界面提供的 $key 和 $login。

它给我错误 99,表明哈希值与他们认为的不匹配。我已经尝试了一些变体,但无法让它发挥作用。有人有一些见解吗?

更复杂的是,所有的帮助material我指的都是"transaction key",但是official developer guide pdf只指"signature key"。因此,对于上面提到的“$key”,我尝试了这两种方法,尽管听起来我应该使用签名密钥。这也令人困惑,因为即使开发人员指南明确说要使用 sha512,但很多在线讨论都指的是 md5。

那么,我使用签名密钥是否正确,我使用它是否正确,你能发现我生成哈希的方式有什么问题吗?

原来我得先打包钥匙。以下代码有效,重要的是最后一行。

<?php
    $x_login = "XXX";

    // Where you define orderId as you want
    $x_fp_sequence = $orderId;

    date_default_timezone_set("America/New_York");
    $x_fp_timestamp = time();

    // Where you define costTotal (and ensure that it always has two decimal digits
    $x_amount = $costTotal;

    //Instead of XXX this was the 128-character Signature Key as provided by Authorize.net online interface
    $sig_key = "XXX";
    $x_fp_hash = hash_hmac("sha512","$x_login^$x_fp_sequence^$x_fp_timestamp^$x_amount^USD",pack("H*", $sig_key));
?>

尝试以下步骤

要生成您的签名密钥:

  1. https://account.authorize.net 登录商家界面。

  2. 单击主工具栏中的帐户。

  3. 单击左侧主菜单中的“设置”。

  4. 单击 API 凭据和密钥。

    Select 新签名密钥。 要禁用旧签名密钥,请单击标记为立即禁用旧签名密钥的复选框。 如果未选中“禁用旧签名密钥”复选框,则旧签名密钥将在 24 小时后自动失效。这也将影响签名密钥用于 SHA2 字段的交易响应验证的任何使用。如果旧的签名密钥没有过期,之前的密钥将继续用于 hash/response 验证。

  5. 单击“提交”继续。

  6. 请求并输入 PIN 码进行验证。

  7. 显示您的新签名密钥。

并将此密钥放入您的“签名密钥” 这是为 wordrpess