Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Stripe payments 如何在本地主机中测试条带订阅?_Stripe Payments - Fatal编程技术网

Stripe payments 如何在本地主机中测试条带订阅?

Stripe payments 如何在本地主机中测试条带订阅?,stripe-payments,Stripe Payments,我的代码使用下面给出的代码设置条带订阅(定期费用) $strtok = \Stripe\Token::create([ 'card' => [ 'number' => $ccNum, 'exp_month' => $expMonth, 'exp_year' => $expYear,

我的代码使用下面给出的代码设置条带订阅(定期费用)

            $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钩子url来获取chargeId等费用详细信息?我的意思是,我正在测试模式下工作,我无法设置指向服务器的条带web钩子url。我想在stripe首次为卡充电时,以及stripe随后为测试目的定期为卡充电时,获取stripe chargeId和其他充电详细信息。我想在连接到web的本地网络中的本地系统中执行此操作

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

如果收费成功,您将获得
订阅
,如果收费不成功,您将获得
订阅

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

$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;

对于本地Webhook,您可以始终使用一个工具,如自动将事件重定向到本地主机。

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

要在本地主机上接收事件,请执行以下操作:

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

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

    \Stripe\Stripe::$apiBase=”http://localhost:8420";
    \条带\条带::setApiKey(“sk_test_abcdefgh”);
    
    并配置localstripe以向应用程序发送事件。假设您的PHP应用程序侦听
    localhost:1111/api/stripe
    上的事件:

    curl localhost:8420/\u config/webhooks/mywebhook1\
    -d网址=http://localhost:1111/api/stripe -d秘密=你的秘密是什么
    
我的意思是,我正在测试模式下工作,我无法设置指向服务器的条带web钩子url

通常,您可以转到一个服务,例如首先检索面向公众的IP地址(v4)

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

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

现在,让您的本地主机服务器运行,监听相同的端口(
54764

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

为IPv4和端口组合添加webhook URL

现在,您应该能够在外部测试您的本地Web服务器,而无需在开发期间将代码托管在某个地方


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

问题说明:

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

解决方案

将stripe Webhook与localhost支付网关实现集成或测试的最佳方法是使用安全的反向代理服务,即。SocketXP将在本地主机应用程序和stripe online之间创建一个安全隧道

下面是它的工作原理:

第1步:

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

第2步:

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

$ socketxp relay http://localhost:8080

Connected.
Public URL -> https://webhook.socketxp.com/asdfasdewrqwe3423874
SocketXP将为您创建一个安全且唯一的SocketXP公共端点(HTTPS URL)(请注意URL目录路径中的随机字符串)

SocketXP在Google云平台上运行其服务,该公共端点位于云中。因此,像Stripe或Paypal这样的在线应用程序可以将其webhook通知发送到此公共端点(不同于无法从internet访问的localhost支付网关应用程序)。然后,SocketXP云网关将通过本地计算机上运行的SocketXP代理创建的安全隧道,将条带webhook中继到本地主机应用程序

步骤3

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

现在从Stripe dashboard发送测试Webhook,它保证能够到达您的localhost支付网关应用程序

在此处了解更多信息:


创建订阅后,上述代码将立即为我获取第一笔费用的详细信息。谢谢你的密码。但我仍然有一个问题。我的服务器本质上是短暂的。如何在不设置web挂钩的情况下获取后续月份(对于每月订阅)的后续费用的费用详细信息?为此,我必须使用像ngrok这样的工具,是吗?为了每个月都使用上面的代码,我是否必须设置某种执行脚本的cron?我不确定这在我计划使用lat的AmazonEC2临时服务器的情况下是否可行