如何在Authorize.net的SIM

时间:2017-01-10 21:02:14

标签: php authorize.net

我正在使用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。

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

2 个答案:

答案 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)

尝试执行以下步骤

要生成您的签名密钥:

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

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

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

  4. 单击“ API凭据和密钥”。

    选择“新签名密钥”。 要禁用旧签名密钥,请单击标记为立即禁用旧签名密钥的复选框。 如果未选中“禁用旧签名密钥”复选框,则旧签名密钥将在24小时后自动过期。这也将影响对SHA2字段的事务响应验证使用签名密钥的任何使用。如果旧的签名密钥未过期,则先前的密钥将继续用于哈希/响应验证。

  5. 单击提交以继续。

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

  7. 显示新的签名密钥。

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