如何在Laravel 5.3网站上使用Cashier和Cashier-Braintree?

时间:2019-09-05 11:01:56

标签: laravel stripe-payments braintree laravel-cashier

我一直在疯狂地试图弄清为什么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。

但是问题仍然存在,如何处理这两个软件包的共存?

预先感谢

0 个答案:

没有答案