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临时服务器的情况下是否可行