使用php授权.NET

时间:2017-03-19 00:38:22

标签: php authorize.net

这是我第一次尝试使用Authorize.net。我认为这很简单,但样本代码的方式并不多。 我想使用authorize.net服务器上托管的表单。

首先,我对指纹感到困惑。我使用交易密钥还是签名密钥?

无论是使用事务密钥还是签名密钥,我都会遇到同样的错误。我收到此错误代码:(99)此交易无法接受。

            date_default_timezone_set("UTC");
            $xyz_x_fp_timestamp = time() ;
            $xyz_x_fp_sequence = $xyz_x_fp_timestamp - 1489881251 ;//this will generate a unique number every second

            $xyz_x_login = '123123123123';
            $xyz_x_amount = 25.00;
            $my_key = '222222222222222222222222';

            $hash_input = $xyz_x_login.'^'.$xyz_x_fp_timestamp.'^'.$xyz_x_fp_sequence.'^'.$xyz_x_amount.'^';
            $xyz_x_fp_hash = hash_hmac('sha512', $hash_input ,$my_key);
            ?>
    <div class="entry-content">
    <form method="post" action="https://secure.authorize.net/gateway/transact.dll">

    <input type="hidden" name="x_login" value="<?php echo $xyz_x_login; ?>" >
    <input type="hidden" name="x_show_form" value="PAYMENT_FORM" >
    <input type="hidden" name="x_type" value="AUTH_CAPTURE" >
    <input type="hidden" name="x_fp_hash" value="<?php echo $xyz_x_fp_hash; ?>" >
    <input type="hidden" name="x_fp_sequence" value="<?php echo $xyz_x_fp_sequence; ?>" >
    <input type="hidden" name="x_fp_timestamp" value="<?php echo $xyz_x_fp_timestamp; ?>" >
    <input type="hidden" name="x_amount" value="<?php echo $xyz_x_amount; ?>" >
    <p><br/><br/><input class="button" type="submit" name="submit" value="Pay $<?php echo $xyz_x_amount; ?> Now" ><br/></p>
    </form>

1 个答案:

答案 0 :(得分:1)

指纹必须是MD5,而不是SHA512。它使用您的交易密钥。

$xyz_x_fp_hash = hash_hmac('md5', sprintf('%s^%s^%s^%s^',
    $xyz_x_login,
    $xyz_x_fp_sequence,
    $xyz_x_fp_timestamp,
    $xyz_x_amount
),  $my_key);

Official Documentation

几点说明:

  1. 您不需要设置时区以使用time()。它始终返回当前的Unix时间戳,该时间戳始终为UTC(即时区独立)。

  2. 您的随机数实际上并不是随机的。生成随机序列的稍微好一点的方法是使用rand()。对于非常敏感的应用程序,它有其自身的局限性,但在此应用程序中效果很好($xyz_x_fp_sequence = rand(0, 10000);

  3. <?php
        $xyz_x_fp_timestamp = time() ;
        $xyz_x_fp_sequence  = rand(1, 10000);
        $xyz_x_login        = '123123123123';
        $xyz_x_amount       = 25.00;
        $my_key             = '222222222222222222222222';
        $xyz_x_fp_hash = hash_hmac('md5', sprintf('%s^%s^%s^%s^',
            $xyz_x_login,
            $xyz_x_fp_sequence,
            $xyz_x_fp_timestamp,
            $xyz_x_amount
        ),  $my_key);
    ?>
        <div class="entry-content">
        <form method="post" action="https://secure.authorize.net/gateway/transact.dll">
    
        <input type="hidden" name="x_login" value="<?php echo $xyz_x_login; ?>" >
        <input type="hidden" name="x_show_form" value="PAYMENT_FORM" >
        <input type="hidden" name="x_type" value="AUTH_CAPTURE" >
        <input type="hidden" name="x_fp_hash" value="<?php echo $xyz_x_fp_hash; ?>" >
        <input type="hidden" name="x_fp_sequence" value="<?php echo $xyz_x_fp_sequence; ?>" >
        <input type="hidden" name="x_fp_timestamp" value="<?php echo $xyz_x_fp_timestamp; ?>" >
        <input type="hidden" name="x_amount" value="<?php echo $xyz_x_amount; ?>" >
        <p><br/><br/><input class="button" type="submit" name="submit" value="Pay $<?php echo $xyz_x_amount; ?> Now" ><br/></p>
        </form>