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

时间:2017-04-05 09:18:04

标签: stripe-payments stripe-connect stripe.net

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

            $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的本地网络中。

4 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

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

接收localhost上的活动:

  • 您可以按照之前的建议使用ngrok重定向它们。

  • 或者您可以使用在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
    

答案 2 :(得分:0)

  

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

一般情况下,您可以转到http://www.ip-adress.eu/等服务,首先检索面向公众的IP地址(v4)。

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

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

现在让您的localhost服务器正在侦听同一个端口(54764)。

转到条纹信息中心,确保您处于测试模式。

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

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

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

答案 3 :(得分:0)

问题说明:

这里的问题是您的支付网关应用程序很可能在NAT和防火墙之后的本地网络(具有本地IP地址)上本地运行。无法从Stripe / Paypal等在线服务访问此公共IP地址。

解决方案

将条带化Webhooks与本地支付网关实现集成或测试的最佳方法是使用安全的反向代理服务,即SocketXP。 SocketXP将在您的localhost应用程序和在线条纹之间创建安全的隧道。

这是它的工作方式:

步骤1:

在本地开发/测试计算机或本地网络中的某些服务器上下载并运行SocketXP Agent。您可以安装适用于您的操作系统和平台的代理。您可以找到下载和安装说明here

步骤2:

使用以下命令将localhost支付网关应用程序连接到SocketXP。

$ socketxp relay http://localhost:8080

Connected.
Public URL -> https://webhook.socketxp.com/asdfasdewrqwe3423874

SocketXP将为您创建一个安全且唯一的SocketXP公共端点(HTTPS URL)(请注意URL的目录路径中的随机字符串)。

SocketXP在Google Cloud Platform中运行其服务,并且此公共端点位于云中。因此,诸如Stripe或Paypal之类的在线应用程序可以将其Webhook通知发送到此公共终结点(与您的localhost付款网关应用程序不同,该应用程序无法从Internet访问)。然后,SocketXP云网关将通过使用在本地计算机上运行的SocketXP代理创建的安全隧道将条带状Webhook中继到本地应用程序。

第3步

将此安全的公共URL复制/粘贴到Stripe Webhook仪表板(到“端点URL”文本框中)。

现在从Stripe仪表板发送测试Webhook,可以确保到达您的localhost付款网关应用程序。

在此处了解详情:

How to receive Stripe webhooks on your localhost for development and testing

相关问题