我一直在疯狂地试图弄清为什么Stripe Webhooks没有打我的webhook响应者。
这里有一些相关的软件包:
laravel / cashier v8.0.1
laravel / cashier-braintree v2.0.8
laravel / framework v5.3.31
stripe / stripe-php v6.40.0
我一直在关注有关Stripe Checkout和Webhooks的各种教程。
因此,我在web.php中对此进行了设置
Route::post(
'stripe/webhook',
'\Laravel\Cashier\Http\Controllers\WebhookController@handleWebhook'
);
我的控制器是
namespace App\Http\Controllers;
use Laravel\Cashier\Http\Controllers\WebhookController as CashierController;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Facades\Log;
class WebhookController extends CashierController
{
/**
* Handle a Stripe webhook.
*
* @param array $payload
* @return Response
*/
public function handleCheckoutSessionCompleted($payload)
{
// Handle The Event
file_put_contents('mylog.log', "In My Webhook Controller".PHP_EOL, FILE_APPEND);
return Response('My Webhook Handled', 200);
}
}
在我拥有的verifycsrftoken中间件中
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'stripe/*',
];
}
我一直在进行测试,即使在从未调用过我网站上的webhook函数的情况下,我始终都能看到成功的Webhook响应。我通过登录确认。
然后,我注意到出纳员和出纳员-braintree目录结构相似。因此,我进入了cashier-braintree文件夹,并在WebhookController中添加了一个日志记录命令,并确保在访问WebhookController的位置,而不是在Laravel \ Cashier \ Http \ Controllers中,即使在我的控制器中有该行
use Laravel\Cashier\Http\Controllers\WebhookController
这样就引出了一个问题,为什么laravel在看到路线时会破坏cashier-braintree
Route::post(
'stripe/webhook',
'\Laravel\Cashier\Http\Controllers\WebhookController@handleWebhook'
);
究竟如何使这两个并存? laravel文档对此一无所提,实在感到非常惊讶。它只是说,对于收银员,您需要composer require laravel/cashier
;对于头脑树,您需要composer require laravel/cashier-braintree
同时安装这两个软件包以便我可以访问所需的各个WebhookController的正确方法是什么?
编辑: 好的,这是我意识到的一些事情。 1.在测试非标准的Webhook(收银员开箱即用的Webhook)时,您必须设置通往控制器的路由。所以我的情况改为
Route::post(
'stripe/webhook',
'\Laravel\Cashier\Http\Controllers\WebhookController@handleWebhook'
);
现在一切正常。至于使出纳员和出纳员braintree冲突,仍然不确定是否需要什么,但是我运行了composer dump-autoload
并清除了缓存和配置,并确保未引用出纳员和braintree。
但是问题仍然存在,如何处理这两个软件包的共存?
预先感谢