我试图列出我的Stripe帐户的所有费用以获取statement_descriptor(我的产品)的列表但是我有一个错误,说无法找到费用...
<?php
$off = 0;
$has_more = True;
$listeProducts = array();
ini_set('max_execution_time', 2000);
while($has_more){
$req = \Stripe\Charge::all(array("limit" => 100, "starting_after" => $off));
$res = json_decode($req->__toJSON(), true);
foreach($res["data"] as &$prodUni){
array_push($listeProducts, $prodUni["statement_descriptor"]);
}
$has_more = $res["has_more"];
$off += 100;
}
$_SESSION["products"] = $listeProducts;
以下是错误消息:
Fatal error: Uncaught exception 'Stripe\Error\InvalidRequest' with message 'No such charge: 0' in C:\wamp64\www\...\stripe-php-5.1.3\lib\ApiRequestor.php:124 from API request '...' in C:\wamp64\www\...\stripe-php-5.1.3\lib\ApiRequestor.php on line 124
我不能把#34;偏移&#34;因为已经弃用了,它在结束之前做了同样的事情。
问题是我输了0但是需要收费ID ....我不想在那里收取费用......我需要做的就是如果我有抵消
答案 0 :(得分:0)
starting_after
获取一个对象 - 理想情况下是前一个获取结果中的最后一个对象。
请参阅https://stripe.com/docs/api?lang=php#list_charges-starting_after
答案 1 :(得分:0)
回答问题的第一部分是在检查has_more之前获得前100个。
但在那之后,我无法检索第一次充电,不要忘记当我们使用Stripe API检索时,列表处于REVERSE ORDER !!!所以我必须得到最后一个或第一个?如何更正我的代码? 这条线是否正确? $ lastId = $ res [&#34;数据&#34;] [&#34; 99&#34;] [&#34; id&#34;];
<?php
$req = \Stripe\Charge::all(array("limit" => 1, "starting_after" => $lastId));
$res = json_decode($req->__toJSON(), true);
$lastId = $res["data"]["99"]["id"];
$has_more = True;
while($has_more){
foreach($res["data"] as &$chargeUni){
//...
}
$req = \Stripe\Charge::all(array("limit" => 10, "starting_after" => $lastId));
$res = json_decode($req->__toJSON(), true);
$has_more = False;//$res["has_more"];
$lastId = $res["data"]["99"]["id"];
}
?>
&#13;
答案 2 :(得分:-1)
Stripe API提供 autopagination功能:
此功能可轻松处理获取大量资源的情况,而无需手动分页结果并执行后续请求。
根据文档改编而成,可以很好地完成技巧(并且更容易阅读):
\Stripe\Stripe::setApiKey("sk_…");
/**
* Automatically go through _all_ charges, fetching the data in chunks/pages of
* 100 results.
*/
$charges = \Stripe\Charge::all(["limit" => 100]);
foreach ($charges->autoPagingIterator() as $charge) {
// Do something with $charge
}