【问题标题】:Stripe API Update DRAFT invoice for subscription (PHP)Stripe API 更新订阅发票草稿 (PHP)
【发布时间】:2021-09-02 06:12:29
【问题描述】:

我正在使用 PHP,并使用 invoice.created 生成了一个 webhook。创建发票后,Stripe 让草稿发票在那里放置大约一个小时,这让我们有时间编辑或调整发票。我利用这段时间检查数据库(通过 webhook),看看这个人在系统中有多少推荐人来相应地调整优惠券。我似乎无法正确调整发票,因为我尝试过的所有方法都出现错误,这些错误是:

$inv = {发票编号,发票编号不正确,我没有收到任何错误

define('STRIPE_API_KEY', 'sk_test_******************'); 

$stripe = new \Stripe\StripeClient(
    STRIPE_API_KEY
);

$stripe->invoices->update(
    $inv,
    ['discounts.coupon' => '20OFF']
);
 

错误是未知对象 discounts.coupon

$stripe->invoices->update(
    $inv,
    ['discount' => '20OFF']
);

错误 = 致命错误:未捕获(状态 400)(请求 req_hsX1QTOxzWMiQn)收到未知参数:折扣。你说的是折扣吗?在 /home/searchoscn/public_html/vendor/stripe/stripe-php/lib/Exception/ApiErrorException.php38

$stripe->invoices->update(
    $inv,
    ['coupon' => '20OFF']
);

ERROR = 致命错误:未捕获(状态 400)(请求 req_yEwwOLoukR6j6Z)收到未知参数:在 /home/searchoscn/public_html/vendor/stripe/stripe-php/lib 中抛出的优惠券/Exception/ApiErrorException.php38 行

$stripe->invoices->update(
    $inv,
    ['discounts' => ['coupon' => '20OFF']]
);

致命错误:未捕获(状态 400)(请求 req_IDRP1Rjv1YoBZR)在 /home/searchoscn/public_html/vendor/stripe/stripe-php/lib/Exception/ApiErrorException 中抛出了无效数组。 php 上线 38

我很确定我需要使用“折扣”,但不知道如何构造数组以正确传递优惠券。

试图预测一些问题或cmets:

是的,我确实有一张 ID 为 20OFF 的现有优惠券。这是 20% 的折扣

$inv 会在发送 webhook 时获取正确的发票 ID。

这是我一直在阅读的the link of the API documentation,但它不是很有帮助。

【问题讨论】:

    标签: php stripe-payments


    【解决方案1】:

    代替:

    $stripe->invoices->update(
        $inv,
        ['discounts.coupon' => '20OFF']
    );
    

    尝试:

    $stripe->invoices->update(
        $inv,
        ['discounts' => ['coupon' => $couponId]]
    );
    

    看起来它必须是优惠券的 ID,而不是面向客户的代码,例如20OFF.

    您将能够从仪表板 (https://dashboard.stripe.com/coupons/) 或通过发出另一个 api 请求来获取优惠券的 ID。

    【讨论】:

    • 优惠券ID为20OFF。我看不到其他 ID。我无法在此处将图片发布到评论中,但我有 Stripe 说 ID 为 20OFF 的屏幕截图
    • 你确定吗?您可能是对的,但是当我查看优惠券时,我可以看到一个 ID。我添加了一个屏幕截图,但使用开发工具伪造了优惠券 ID。
    • 我将我的屏幕截图添加到原始帖子中,以便您查看。它看起来和你的一模一样,但 ID 是 20OFF,而不是你 ID 的随机字符。另外,我将“无效数组”作为错误而不是关于不正确或无法识别的 ID 的错误。让我觉得它与格式有关,而不是优惠券的 ID。
    • 道歉 - 没看过截图!您是否尝试过我在答案中输入的代码/如果它不起作用,您有响应吗?
    • 我后来添加了截图。无需道歉。
    【解决方案2】:

    这是

    $stripe->invoices->update(
        $inv,
        [
           'discounts' => [
             ['coupon' => '20OFF']
            ]
         ]
    ); 
    

    如中,它是一个数组,然后包含对象(在 PHP 中它们都是方括号)并且对象引用优惠券。

    【讨论】:

    • 很遗憾,我不在办公桌前,至少还有 4 或 5 个小时我不会在,但我会尝试在其中添加其他括号。
    • 为什么我们需要在'coupon' => '20OFF'周围加上双括号
    • 因为它是一个对象数组。第二组括号是对象。如果您将其想象为 JSON,并且带有 多个优惠券,如果更清楚,那就是 {discounts: [ { coupon:'20OFF' }, { coupon:'50OFF' } ] } 。在 PHP 中,数组和对象都使用方括号。
    猜你喜欢
    • 1970-01-01
    • 2019-06-04
    • 2017-08-20
    • 2020-10-05
    • 2020-11-03
    • 2011-08-07
    • 2018-02-26
    • 2017-07-03
    • 1970-01-01
    相关资源
    最近更新 更多