我的代码使用下面给出的代码设置条带订阅(经常性费用)
$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 回答
你不需要这里的webhooks . API请求是同步的,这意味着,在您调用
\Stripe\Subscription::create()
之后,Stripe将尝试向客户收费 .如果收费成功,您将收到
Subscription
object,如果没有收费,您将收到error .假设收费成功,您可以通过API立即检索最新的费用和发票 . 最简单的方法是检索一个并使用expand功能一次性获取所有内容 . 您的代码将变为:
至于本地的webhooks,你总是可以使用像ngrok这样的工具自动将事件重定向到localhost .
koopajah是对的:webhooks不需要收费卡 . 但是对于其他支付来源(例如SEPA借记卡),费用会在几小时/几天后异步成功 . 在这种情况下,您的程序确实需要接收webhook事件 .
要接收
localhost
上的活动:您可以按照前面的建议使用_1073990重定向它们 .
或者您可以使用在
localhost
上运行的假的本地Stripe服务器,如localstripe . 安装并运行后,将PHP应用程序配置为使用localstripe而不是真正的Stripe服务器:并配置localstripe以将事件发送到您的应用程序 . 假设您的PHP应用程序侦听
localhost:1111/api/stripe
上的事件:通常,您可以转到像http://www.ip-adress.eu/这样的服务来首先检索面向公众的IP地址(v4) .
然后登录到您的路由器(地址将类似于192.168.X.Y,您可以在计算机的网络接口详细信息中查找)
在路由器中设置端口转发规则,以便特定端口范围内的流量将定向到您的计算机(例如
54764
) .现在让您的localhost服务器正在运行侦听同一端口(
54764
) .转到Stripe仪表板并确保您处于测试模式 .
为您的IPv4和端口组合添加webhook URL .
现在,您应该能够在外部测试本地Web服务器,而无需在开发过程中的某个位置托管代码 .
(注意:这不是Stripe独有的,您可以使用此设置从任何外部 endpoints 与您机器上的本地Web服务器通话)