这是我第一次尝试使用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>
答案 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);
几点说明:
您不需要设置时区以使用time()
。它始终返回当前的Unix时间戳,该时间戳始终为UTC(即时区独立)。
您的随机数实际上并不是随机的。生成随机序列的稍微好一点的方法是使用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>