2017-05-30 88 views
1

使用条纹创建费用时,我不断收到400错误。奇怪的是,有时它可以正常工作,但大部分时间根本不起作用。付款也会每次都完成。无论错误如何。这个PHP脚本是否正确处理付款?条纹错误:您不能多次使用条纹标记

注意:我已经检查过,每次创建收费标记都是唯一的。

<?php 
 

 

 
require_once('stripe.php'); 
 
// Set your secret key: remember to change this to your live secret key in production 
 
// See your keys here: https://dashboard.stripe.com/account/apikeys 
 
\Stripe\Stripe::setApiKey("key"); 
 

 

 
$token = $_POST['stripeToken']; 
 
$email = $_POST['email']; 
 
// Create the charge on Stripe's servers - this will charge the user's card 
 
try { 
 
// Create a Customer: 
 

 
$customer = \Stripe\Customer::create(array(
 
    "email" => $email, 
 
    "source" => $token, 
 
)); 
 

 
// Charge the Customer instead of the card: 
 
$charge = \Stripe\Charge::create(array(
 
    "amount" => 1000, 
 
    "currency" => "usd", 
 
    "customer" => $customer->id 
 
)); 
 

 
} catch(\Stripe\Error\Card $e) { 
 
    // Since it's a decline, \Stripe\Error\Card will be caught 
 
    $body = $e->getJsonBody(); 
 
    $err = $body['error']; 
 
    
 
    print('Status is:' . $e->getHttpStatus() . "\n"); 
 
    print('Type is:' . $err['type'] . "\n"); 
 
    print('Code is:' . $err['code'] . "\n"); 
 
    // param is '' in this case 
 
    print('Param is:' . $err['param'] . "\n"); 
 
    print('Message is:' . $err['message'] . "\n"); 
 
} catch (\Stripe\Error\RateLimit $e) { 
 
    $response["error"] = TRUE; 
 
\t \t $response["error_msg"] = "Error processing payment - Rate Limit."; 
 
\t \t echo json_encode($response); 
 
} catch (\Stripe\Error\InvalidRequest $e) { 
 
\t $response["error"] = TRUE; 
 
\t \t $response["error_msg"] = "Error processing payment - Invalid request."; 
 
\t \t echo json_encode($response); 
 
} catch (\Stripe\Error\Authentication $e) { 
 
    $response["error"] = TRUE; 
 
\t \t $response["error_msg"] = "Error processing payment - Authentication."; 
 
\t \t echo json_encode($response); 
 
} catch (\Stripe\Error\ApiConnection $e) { 
 
    $response["error"] = TRUE; 
 
\t \t $response["error_msg"] = "Error processing payment - API Connection."; 
 
\t \t echo json_encode($response); 
 
} catch (\Stripe\Error\Base $e) { 
 
    $response["error"] = TRUE; 
 
\t \t $response["error_msg"] = "Error processing payment - Base."; 
 
\t \t echo json_encode($response); 
 
} catch (Exception $e) { 
 
    $response["error"] = TRUE; 
 
\t \t $response["error_msg"] = "Error processing payment - Exception."; 
 
\t \t echo json_encode($response); 
 
} 
 

 
?>

回答

1

最可能的原因是,该令牌被张贴比你的客户端代码一次 - 要么是因为客户点击一次以上,或因为代码引起要提交的数据不止一次。

0

您正在使用令牌两次。一次用于收费,另一次用于创建客户。您不必使用令牌来创建客户。

$customer = \Stripe\Customer::create(array(
    "email" => $email, 
    // "source" => $token, //remove 
));