当前位置: 首页 > 知识库问答 >
问题:

条带支付:由于客户客户没有ID为tok的链接卡,因此获取错误_*****

单于越
2023-03-14

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

客户cus_7Zz2BCnybIZLGw没有ID为tok_17Kp8GAwLkQPB7OqrrM73VVI的链接卡

即时通讯使用卡号:4242经验月:12经验年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
              );

共有3个答案

谷梁宏恺
2023-03-14

这是我的解决过程,并为我工作,以防止双重付款和完成过程,如果需要,请随时改进

>

  • 以条纹形式添加

     <input type="hidden" name="idempotency" id="idempotency" value="{{ genRandAlphaNumber(8)}}">
    

    genRandAlphaNumber函数用于创建字符串,以避免在条带中重复付款

    function genRandAlphaNumber($length) {
         $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
         $randomString = '';
         for ($i = 0; $i < $length; $i++) {
             $randomString .= $characters[rand(0, strlen($characters) - 1)];
         }
         return $randomString;
    }
    

    条纹后处理

     $user = auth()->user();
    
    
     try {
         $cart = new Cart();
         $cart->user_id = $user->id;
         $cart->save();
    
         $description = 'description';
    
         Stripe\Stripe::setApiKey(env('STRIPE_SECRET'));
    
         $idempotency = preg_replace('/[^a-z\d]/im', '', $request->idempotency);
         $stripe_token = $request->stripeToken;
    
         //if user's stripe_token is null, create the user      
         if (!$user->stripe_token) {
             $result = \Stripe\Customer::create(array(
                 'name'   => $user->name .' '. $user->name,
                 "email"  => $user->email,
                 "source" => $stripe_token
             ));
    
             if($result && $result->id) {
                 $user->stripe_id = $result->id;
                 $user->stripe_token = $stripe_token;
                 $user->save();
             }
         }
    
    
         //if user has token
         if($user->stripe_token) {
             // charge customer with your amount
             $result = \Stripe\Charge::create(array(
                 "currency"  => 'usd',
                 "customer"  => $user->stripe_id,
                 "amount"    => $cart->price  * 100,
                 "description" => $description
                 ),
                 ["idempotency_key" => $idempotency,]
             );
    
             Session::flash('success', 'Payment successful!');
    
             $cart->status = 4;
             $cart->save();
    
    
             return redirect()->route('cart.finish', $cart->id);
         }
    
    
    
     } catch (\Exception $ex) {
         if ($ex->getStripeCode() == "idempotency_key_in_use") {
             sleep(2);
             //search last cart
             $cart = Cart::whereUser_id($user->id)->whereStatus(4)->orderBy('id', 'DESC')->first();
             if (!is_null($cart)) {
                 Session::flash('success', 'Payment successful!, double payment prevented');
                 return redirect()->route('cart.finish', $cart->id);
             }
             return back();
         }
    
         if ($ex->getJsonBody()['error']['type'] == "idempotency_error") {
             $cart = Cart::whereUser_id($user->id)->whereStatus(4)->orderBy('id', 'DESC')->first();
             if (!is_null($cart)) {
                 Session::flash('success', 'Payment successful!...');
                 return redirect()->route('cart.membership.update', $cart->id);
             }
             return back();
         }
    
         return $ex->getMessage();
     }
    

  • 翟功
    2023-03-14

    这个代码帮助了我。这也可能对你有所帮助。

    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." , 
    ]);
    
    尚恩
    2023-03-14

    有三种不同的方法可以产生电荷:

    >

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

    仅使用customer参数。在这种情况下,customer需要是一个客户ID,即以cus\u开头的字符串。将对客户的默认付款来源收取费用。

    使用客户参数。在这种情况下,customer需要是与前一种情况相同的客户ID,但是source应该是已经附加到客户的支付源的ID。支付来源可以是卡(ID以card\uu开头)、银行账户(ID以ba\u开头)或来源(ID以src\u开头)。

    在您的情况下,您在参数中传递令牌ID,同时在客户参数中传递客户ID。

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

  •  类似资料:
    • 我在Stripe中创建了一个带有客户/信用卡的POC,我在Stripe中登录了我的仪表板,并且能够看到该客户有一个正确关联的默认来源(我添加的测试信用卡)。它显示这张卡是默认来源。 当我运行这个。网络代码: 为了得到该客户,它会正确地返回除其来源之外的所有内容。我希望能从中找到它的所有字段都是空的!我想知道他的默认付款来源,这样我就可以在前端显示它,并用一个小图标表示它是默认的。 DefaultS

    • 我有一个Squarespace应用程序,可以为客户收取费用,但Squarespare不创建客户对象,它只存储费用。 我的目标:当用户进行购买时,创建一个附加了订阅计划的Customer对象,以便我们可以对卡进行重复收费。 我可以通过条带测试API提取费用列表,并且每个费用都有一个包含卡令牌。因此,根据我的理解,我应该能够创建一个客户并传入源或源ID,它将向该客户添加源。 我的代码如下: 我在条纹沙

    • 我可以使用Stripe API接收客户付款,但我希望它应该使用客户ID发送给其他客户。 我已经编写了接收付款的代码,但我希望付款应使用他的客户ID发送给其他客户。 它应该发送给其他客户,但我不知道要在这里添加哪些其他代码片段。

    • 我正在我的asp中集成amazon pay API。net代码。我已经编写了以下代码 它呈现亚马逊支付按钮。但当我点击它时,它会显示弹出窗口,错误为404。 它以前是有效的。我不会更改亚马逊上的任何设置。我已经检查了JavaScript跨源代码。我已经添加了带有端口的localhost。如何解决此问题?

    • 对不起,我对编码很陌生,所以我不知道很多缩写/速记的东西。所以我正在使用React和C#尝试使用Stripe来处理付款,我已经到了取回、和付款方式Id的地步,但是当我运行代码时: 我得到了一个错误: 没有这样的支付意图。这是一个404,用于/v1/payment\u intent/confirm 我猜这意味着支付意图实际上没有被创建,因为它也没有出现在Stripe仪表板上。我不知道该怎么解决这个问

    • 首先使用stripe验证信用卡,然后生成令牌并创建客户。我们将把代币而不是信用卡信息保存在数据库中,以后我们将根据代币或客户而不是信用卡信息向客户付款。 在javscript文件中,我们如何处理和? 因为我们已经使用 1-通过验证信用卡信息保存令牌,在这种情况下不涉及支付。金额/价格将为零(0)。 2-将此内标识保存在数据库中,但此内标识只使用一次,使用次数不多。如果以后再使用此内标识,将不起作用