条纹付款:收到错误,因为客户cus_*****没有ID tok_*****的链接卡

在测试模式下,当我创建新客户并尝试付款时,我得到了这个错误。

客户cus_7Zz2BCnybIZLGw没有带身份证的关联卡tok_17Kp8GAwLkQPB7OqrrM73VVI

IM使用卡号 : 4242424242424242 exp_month :12 exp_year 2016

返回响应为:

Array
(
    [charge_status] => 
    [error_info] => Array
        (
            [type] => invalid_request_error
            [message] => Customer cus_7Zz2BCnybIZLGw does not have a linked card with ID tok_17Kp8GAwLkQPB7OqrrM73VVI.
            [param] => card
            [code] => missing
        )

    [message] => Customer cus_7Zz2BCnybIZLGw does not have a linked card with ID tok_17Kp8GAwLkQPB7OqrrM73VVI.
)

输入电荷数据为,

 $customer = Stripe_Customer::create(array(
      'account_balance' => 100,
      'source' => $token,
      'email' => strip_tags(trim($email))
    )
  );

$customer_id = $customer->id;

$charge   = array(
                'card'          => 4242424242424242, 
                'amount'        => 100, 
                'currency'      => 'cad', 
                'receipt_email' => test@test.com,
                'description'   => 'my payment',
                'customer'      => $customer_id
              );

答案 1

有三种不同的方式可以产生费用

  • 仅使用参数。在这种情况下,需要是令牌 ID(由 CheckoutStripe .js 创建),即以 或 开头的字符串。sourcesourcetok_src_

  • 仅使用参数。在这种情况下,需要是客户 ID,即以 开头的字符串。将向客户的默认付款来源收费。customercustomercus_

  • 同时包含 和 参数。在这种情况下,需要像在上一种情况下一样是客户 ID,但应该是已附加到客户的付款源的 ID。付款来源可以是(ID 以 开头)、银行帐户(ID 以 开头)或来源(ID 以 开头)。customersourcecustomersourcecard_ba_src_

在你的例子中,你将在参数中传递令牌 ID,并在参数中传递客户 ID。sourcecustomer

如果这是一张新卡,则应首先使用令牌在客户上创建卡,然后使用卡 ID 创建费用。如果已为此客户保存了卡,则无需再次收集卡信息(因此根本不需要创建令牌)。


答案 2

这段代码帮助了我。它也可能帮助你。

Stripe\Stripe::setApiKey(env('STRIPE_SECRET'));

$customer = \Stripe\Customer::create([
    'name' => 'Jenny Rosen',
    'email' => 'jenyy@hotmail.co.us',
    'address' => [
        'line1' => '510 Townsend St',
        'postal_code' => '98140',
        'city' => 'San Francisco',
        'state' => 'CA',
        'country' => 'US',
    ],
]);

\Stripe\Customer::createSource(
    $customer->id,
    ['source' => $request->stripeToken]
);

Stripe\Charge::create ([
    "customer" => $customer->id,
    "amount" => 100 * 100,
    "currency" => "usd",
    "description" => "Test payment from stripe.test." , 
]);