我正在使用Authorize.net的SIM卡实施信用卡处理,以便我的网站会发送到Authorize.net付款表单。我得到"(99)此交易无法被接受"而且我不确定原因。
所以,这是代码的核心,我把它们放在一起来处理这个问题。这里计算的值(键除外)将以提交的形式输入到输入[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,表明散列与他们认为应该匹配的东西不匹配。我已尝试过这方面的一些变化,但无法使其发挥作用。有没有人有一些见解?
为了使问题更复杂,我所提到的所有帮助材料都谈到了&#34;交易密钥&#34;,但official developer guide pdf仅涉及&#34;签名密钥&#34; 。所以,对于&#34; $ key&#34;虽然听起来像是我应该使用签名密钥,但我上面提到了两个。它也令人困惑,因为尽管开发人员指南明确指出要使用sha512,但很多在线讨论都是指md5。
所以,我是否正确使用签名密钥,我是否正确使用它,你能否发现我生成哈希的方式有什么问题?
答案 0 :(得分:0)
事实证明我必须首先打包钥匙。以下代码有效,重要的是最后一行。
<?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 :(得分:0)
尝试执行以下步骤
要生成您的签名密钥:
登录https://account.authorize.net处的商家界面。
从主工具栏中单击帐户。
在左侧主菜单中单击“设置”。
单击“ API凭据和密钥”。
选择“新签名密钥”。 要禁用旧签名密钥,请单击标记为立即禁用旧签名密钥的复选框。 如果未选中“禁用旧签名密钥”复选框,则旧签名密钥将在24小时后自动过期。这也将影响对SHA2字段的事务响应验证使用签名密钥的任何使用。如果旧的签名密钥未过期,则先前的密钥将继续用于哈希/响应验证。
单击提交以继续。
请求并输入PIN进行验证。
显示新的签名密钥。
并将此密钥放入您的“签名密钥” 这是给wordrpess的