【问题标题】:Authorize.net SIM using php使用 php 授权.net SIM
【发布时间】:2017-03-19 00:38:22
【问题描述】:

这是我第一次尝试使用 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>

【问题讨论】:

    标签: php authorize.net


    【解决方案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()。它始终返回始终采用 UTC 的当前 Unix 时间戳(即与时区无关)。

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

    .

    <?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>
    

    【讨论】:

    猜你喜欢
    • 2012-05-11
    • 2011-01-13
    • 2021-03-05
    • 2017-09-16
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    相关资源
    最近更新 更多