如何在条带支付网关中使用php在同一客户中添加多张卡

如何在条带支付网关中使用php在同一客户中添加多张卡,php,stripe-payments,Php,Stripe Payments,我在测试模式下实现了条带支付。这里我得到了一个错误,就像再次使用相同的令牌一样。有没有其他方法可以添加多张卡。 或者我需要在一个单独的页面中调用retrive函数,这样同一令牌的冲突就不会再次发生。我应该如何设置卡的默认值 public function createToken($data) { $TokenResult=Token::create(array( "card" => array( "name" => $

我在测试模式下实现了条带支付。这里我得到了一个错误,就像再次使用相同的令牌一样。有没有其他方法可以添加多张卡。 或者我需要在一个单独的页面中调用retrive函数,这样同一令牌的冲突就不会再次发生。我应该如何设置卡的默认值

public function createToken($data)
{

        $TokenResult=Token::create(array(
            "card" => array(
            "name" => $data['name'],
            "number" => $data['card_number'],
            "exp_month" => $data['month'],
            "exp_year" => $data['year'],
            "cvc" => $data['cvc']
            )));
        //echo "<pre>";;
        //print_r($TokenResult);
        $this->token=$TokenResult['id'];//store token id into token variable
        $this->chargeCard($this->token);    //call chargecard function via passing token id
}
/*
* function to create customer
*/
public function createCustomer($data,$token=null)//pass form data and token id
{
    $customer=Customer::create(array(
    "email"=>$data['email'],
    "description" => $data['name'],
    "source" => $token // obtained with Stripe.js
    ));
    $customerId=$customer['id'];
    $this->retriveCustomer($customerId,$token);
}
/*
* function to retrive current customers for adding multiple cards to same customers*/
public function retriveCustomer($customerid,$token)
{
    echo $this->token;
    //die('here');
    $retriveResult=Customer::retrieve($customerid);
    $retriveResult->sources->create(array("source" =>$this->token));
    return $retriveResult;
}
公共函数createToken($data)
{
$TokenResult=Token::创建(数组(
“卡”=>阵列(
“name”=>$data['name'],
“编号”=>$data[“卡号”],
“exp_month”=>$data['month'],
“exp_year”=>$data['year'],
“cvc”=>$data['cvc']
)));
//回声“;;
$card_array = array(
               'card' => array(
               'number' => $number,
               'exp_month' => $exp_month,
               'exp_year' => $exp_year,
               'cvc' => $cvc,
               'name' => $name
               )
           );


$card_obj = $this->setData("\Stripe\Customer", "retrieve", $customer_id, TRUE);
$card =  $card_obj->sources->create($card_array);
//打印结果($TokenResult); $this->token=$TokenResult['id'];//将令牌id存储到令牌变量中 $this->chargeCard($this->token);//通过传递令牌id调用chargeCard函数 } /* *创建客户的功能 */ 公共函数createCustomer($data,$token=null)//传递表单数据和令牌id { $customer=customer::创建(数组)( “email”=>$data['email'], “description”=>$data['name'], “source”=>$token//通过Stripe.js获得 )); $customerId=$customer['id']; $this->retrievecustomer($customerId,$token); } /* *用于检索当前客户以向同一客户添加多张卡的函数*/ 公共函数检索客户($customerid,$token) { echo$this->token; //死(‘这里’); $retriveResult=Customer::retrieve($customerid); $retriveResult->sources->create(数组(“source”=>$this->token)); 返回$retrieveresult; }
我认为在添加新卡时,您不需要创建令牌。它有助于您更新某些卡。因此,添加的流程将与您为第一张卡创建的流程相同

我不知道您使用的是哪个条纹版本,我使用的是有点旧的:

$customer = \Stripe\Customer::retrieve("cus_...");
$card = $customer->sources->create(array(
    "source" => $token  // token created by Checkout or Elements
));

首先,请注意,除非您通过PCI认证并被允许直接操作卡数据,否则您永远都不能访问服务器端代码中的卡号

应通过或在客户端创建卡令牌。您的服务器应仅处理客户端创建的卡令牌,而不应处理PCI敏感信息(卡号和CVC)。这将大大减轻PCI合规性的负担,并使您有资格申请PCI

在PHP中,以下是如何创建现有客户对象:

$card = $cu->sources->create(['source'=>$token]);

Stripe的文档并没有解释很多更细微的过程,所以您必须进行大量测试

假设您有一个客户对象$cu,带有您从结帐或使用的任何东西中获得的令牌:

$cu->default_source = $card
$cu->save();
将向客户添加一张卡。它只是将卡片添加到列表中;随后的通话会将卡片添加到列表中。请注意,它不会检查重复的卡片,因此同一张卡片可以多次出现在列表中。它也不会将新卡设置为活动卡。要使卡成为默认(或活动),请使用

使用旧卡接口:


新卡将替换默认卡。它不会使以前的默认卡处于非活动状态;它将删除当前默认值,并使新卡成为活动默认值。如果您只允许一次将一张卡连接到一个客户,那么卡接口是最简单的。

$customer=\Stripe\customer::retrieve(“cus”…)$卡片=$customer->sources->create(数组(“source”=>$token//Checkout或Elements创建的token));这将再次添加相同的卡…由您检查该卡是否已连接到客户。您可以使用令牌ID检索完整的令牌对象(),并将令牌的
card.fingerprint
属性与已附加到客户的卡的
fingerprint
属性进行比较。
$cu->card = $token;
$cu->save();