首页 文章

如何在localhhost中测试条带订阅?

提问于
浏览
0

我的代码使用下面给出的代码设置条带订阅(经常性费用)

$strtok = \Stripe\Token::create([
                     'card' => [
                     'number' => $ccNum,
                     'exp_month' => $expMonth,
                     'exp_year' => $expYear,
                     'cvc' => $cvc
                     ],
                   ]
             );
            $stripetoken = $strtok->id;
            $customer = \Stripe\Customer::create([
                   'source' => $stripetoken,
                   'email' => $email
             ]);
            $subscription = \Stripe\Subscription::create([
              'customer' => $customer->id,
              'plan' => $planId,
            ]);

如果我理解正确条带,则首先尝试在订阅呼叫后立即对卡充电 . 是否绝对有必要设置条带Web挂钩网址以获取chargeId等收费详细信息?我的意思是我在测试模式下工作,我无法设置指向服务器的条带Web挂钩URL . 我希望在条纹首次为卡充电时获得条带chargeId和其他充电细节,并且当条带随后定期为卡进行充电以进行测试时 . 我想在我的本地系统中执行此操作,该系统位于连接到Web的本地网络中 .

3 回答

  • 0

    你不需要这里的webhooks . API请求是同步的,这意味着,在您调用 \Stripe\Subscription::create() 之后,Stripe将尝试向客户收费 .

    如果收费成功,您将收到 Subscription object,如果没有收费,您将收到error .

    假设收费成功,您可以通过API立即检索最新的费用和发票 . 最简单的方法是检索一个并使用expand功能一次性获取所有内容 . 您的代码将变为:

    $invoices = \Stripe\Invoice::all(array(
        "limit" => 1,
        "customer" => $customer->id,
        "expand" => array("data.charge")
    ));
    
    $invoice = $invoices->data[0];
    $invoiceId = $invoice->id;
    $chargeId = $invoice->charge->id;
    

    至于本地的webhooks,你总是可以使用像ngrok这样的工具自动将事件重定向到localhost .

  • 0

    koopajah是对的:webhooks不需要收费卡 . 但是对于其他支付来源(例如SEPA借记卡),费用会在几小时/几天后异步成功 . 在这种情况下,您的程序确实需要接收webhook事件 .

    要接收 localhost 上的活动:

    • 您可以按照前面的建议使用_1073990重定向它们 .

    • 或者您可以使用在 localhost 上运行的假的本地Stripe服务器,如localstripe . 安装并运行后,将PHP应用程序配置为使用localstripe而不是真正的Stripe服务器:

    \Stripe\Stripe::$apiBase = "http://localhost:8420";
    \Stripe\Stripe::setApiKey("sk_test_abcdefgh");
    

    并配置localstripe以将事件发送到您的应用程序 . 假设您的PHP应用程序侦听 localhost:1111/api/stripe 上的事件:

    curl localhost:8420/_config/webhooks/mywebhook1 \
      -d url=http://localhost:1111/api/stripe -d secret=whsec_yoursecret
    
  • 0

    我的意思是我在测试模式下工作,我无法设置指向服务器的条带Web挂钩URL .

    通常,您可以转到像http://www.ip-adress.eu/这样的服务来首先检索面向公众的IP地址(v4) .

    然后登录到您的路由器(地址将类似于192.168.X.Y,您可以在计算机的网络接口详细信息中查找)

    在路由器中设置端口转发规则,以便特定端口范围内的流量将定向到您的计算机(例如 54764 ) .

    现在让您的localhost服务器正在运行侦听同一端口( 54764 ) .

    转到Stripe仪表板并确保您处于测试模式 .

    为您的IPv4和端口组合添加webhook URL .

    现在,您应该能够在外部测试本地Web服务器,而无需在开发过程中的某个位置托管代码 .

    (注意:这不是Stripe独有的,您可以使用此设置从任何外部 endpoints 与您机器上的本地Web服务器通话)

相关问题