条纹:使用PHP列出所有费用

时间:2017-08-22 07:02:14

标签: php stripe-payments

我试图列出我的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 ....我不想在那里收取费用......我需要做的就是如果我有抵消

3 个答案:

答案 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;];

&#13;
&#13;
    <?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;
&#13;
&#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
}