Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当我使用3D安全测试卡号时,为什么Stripe不向我提供支付意向要求行动状态?_Php_Stripe Payments - Fatal编程技术网

Php 当我使用3D安全测试卡号时,为什么Stripe不向我提供支付意向要求行动状态?

Php 当我使用3D安全测试卡号时,为什么Stripe不向我提供支付意向要求行动状态?,php,stripe-payments,Php,Stripe Payments,在以下计费和订阅的条带文档中,我使用PaymentIntents创建订阅。如果我输入一个不需要3D安全的测试卡,它就可以正常工作。但如果我用的是一个,而不是给我一个动作的状态,它只是在卡片上给出一个错误 //创建客户 $customer=\Stripe\customer::创建(数组)( “source”=>$token, “电子邮件”=>$subscriber\u电子邮件) ); //从条带响应获取客户变量 $payment_livemode=$customer->livemode; $pay

在以下计费和订阅的条带文档中,我使用PaymentIntents创建订阅。如果我输入一个不需要3D安全的测试卡,它就可以正常工作。但如果我用的是一个,而不是给我一个动作的状态,它只是在卡片上给出一个错误

//创建客户
$customer=\Stripe\customer::创建(数组)(
“source”=>$token,
“电子邮件”=>$subscriber\u电子邮件)
);
//从条带响应获取客户变量
$payment_livemode=$customer->livemode;
$payer\u id=$customer->id;
//现在将客户置于SUB计划中
试试{
$subscription=\Stripe\subscription::create([
“客户”=>$payer\U id,
“项目”=>[
[
“计划”=>$subscription\u计划
],
],
“展开”=>[“最新发票.付款意向”],
]);
$subscription\u id=$subscription->id;
$subscription\u plan\u id=$subscription->items->data[0]->plan->id;
$subscription\u latest\u invoice\u status=$subscription->latest\u invoice->status;
$subscription\u latest\u invoice\u id=$subscription->latest\u invoice->id;
$subscription\u latest\u invoice\u payment\u intent\u status=$subscription->latest\u invoice->payment\u intent->status;
$subscription\u latest\u invoice\u payment\u intent\u client\u secret=$subscription->latest\u invoice->payment\u intent->client\u secret;
$\会话['subscription\u latest\u invoice\u payment\u intent\u client\u secret']=$subscription\u latest\u invoice\u payment\u client\u secret;
如果($subscription\u latest\u invoice\u payment\u intent\u status=='successed'){
标题(“位置:../payment success”);
}
如果($subscription\u latest\u invoice\u payment\u intent\u status=='requires\u payment\u method'){
标题(“位置:../payment?payment_status=失败&inv=$subscription\u latest\u invoice\u id”);
}
if($subscription\u latest\u invoice\u payment\u intent\u status=='requires\u action'){
标题(“位置:../payment?payment_status=需要_操作”);
}
}捕获(\Stripe\Error\Card$e){
$body=$e->getJsonBody();
$err=$body['error'];
如果($err['code']==“订阅\支付\意图\需要\行动”){
标题(“位置:../payment/requires_action”);
}
}捕获(\Stripe\Error\RateLimit$e){
//对API发出的请求太多太快
}捕获(\Stripe\Error\InvalidRequest$e){
//为条带的API提供了无效参数
}捕获(\Stripe\Error\Authentication$e){
//使用Stripe的API进行身份验证失败
//(可能您最近更改了API密钥)
}catch(\Stripe\Error\ApiConnection$e){
//与条带的网络通信失败
}捕获(\Stripe\Error\Base$e){
//向用户显示一个非常一般的错误,并可能发送
//给自己发一封电子邮件
}捕获(例外$e){
//发生了另一件事,与Stripe完全无关
}
我正在使用此页面上的测试卡:

我选择了这个号码的卡片: 4000 0000 0000 3220

以下是我的错误详细信息: 现状:402 类型:卡错误 代码:订阅\支付\意图\需要\操作 消息:此订阅的付款需要其他用户操作才能成功完成。请参阅此处使用的
启用\未完成\付款
参数:

我的API版本是2018-05-21


有谁能给我一个我做错了什么的线索吗?

在评论中给出了答案,只需在此处发布,以便查看:


您好,Andy,因为您使用的是较旧的API版本,要在订阅中支持3DS,您应该使用以下指南:


这意味着在创建订阅时更新API版本或传递enable_Complete_payments标志,正如错误消息指出的那样。

我也有同样的问题,实际上,API版本不是您下载的库的版本,您必须在仪表板中更改它,

嗨,Andy!你能告诉我们更多关于你的错误吗?什么信息?另外,您使用的API版本是什么?由于您使用的是3DS订阅,如果您还没有看到此文档,可能会有所帮助:您使用的是什么卡?您能提供一个转储响应吗?谢谢您的回复!我用更多信息编辑了我的问题。我不是在升级现有的系统,而是在创建一个新的系统,所以我一直遵循本页上的文档:嗨,Andy,因为您使用的是较旧的API版本,所以在订阅时支持3DS,您应该改为使用本指南:这意味着更新API版本或在创建订阅时传递
启用不完整支付
标志,正如错误消息所指出的。谢谢,我已将API更新为最新版本,并添加了启用不完整支付,现在一切正常!谢谢然而,当使用其中一张注定要失败的卡时,当卡出错时,它会不断出现未捕获的异常。我使用与此页面中相同的代码捕获错误: