如何修复 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));
?>
尝试以下步骤
要生成您的签名密钥:
在 https://account.authorize.net 登录商家界面。
单击主工具栏中的帐户。
单击左侧主菜单中的“设置”。
单击 API 凭据和密钥。
Select 新签名密钥。
要禁用旧签名密钥,请单击标记为立即禁用旧签名密钥的复选框。
如果未选中“禁用旧签名密钥”复选框,则旧签名密钥将在 24 小时后自动失效。这也将影响签名密钥用于 SHA2 字段的交易响应验证的任何使用。如果旧的签名密钥没有过期,之前的密钥将继续用于 hash/response 验证。
单击“提交”继续。
请求并输入 PIN 码进行验证。
显示您的新签名密钥。
并将此密钥放入您的“签名密钥”
这是为 wordrpess
我正在使用 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));
?>
尝试以下步骤
要生成您的签名密钥:
在 https://account.authorize.net 登录商家界面。
单击主工具栏中的帐户。
单击左侧主菜单中的“设置”。
单击 API 凭据和密钥。
Select 新签名密钥。 要禁用旧签名密钥,请单击标记为立即禁用旧签名密钥的复选框。 如果未选中“禁用旧签名密钥”复选框,则旧签名密钥将在 24 小时后自动失效。这也将影响签名密钥用于 SHA2 字段的交易响应验证的任何使用。如果旧的签名密钥没有过期,之前的密钥将继续用于 hash/response 验证。
单击“提交”继续。
请求并输入 PIN 码进行验证。
显示您的新签名密钥。
并将此密钥放入您的“签名密钥” 这是为 wordrpess