【问题标题】:Laravel Cashier auto send email on invoice / receiptLaravel Cashier 在发票/收据上自动发送电子邮件
【发布时间】:2020-05-06 01:54:33
【问题描述】:

在 Stripe 文档/Laravel 收银员上,它说它可以在创建发票后自动发送电子邮件。我尝试在 Stripe 的设置菜单上切换相关设置,但购买或订阅后我没有收到任何电子邮件。我还需要手动编码电子邮件发送吗? (我认为它应该在创建发票后自动发送)

【问题讨论】:

  • 我不确定 Laravel Cashier 是如何使用 Stripe 的,因此您可能应该与他们核实/阅读他们的文档/代码以了解他们是如何做事的;如果他们使用的 'invoice' 是 Laravel 对象而不是 Stripe Invoice,那么 Stripe 设置就不会像你期望的那样工作。

标签: laravel stripe-payments laravel-cashier


【解决方案1】:

根据Stripe docs,如果您希望Stripe自动发送收据,您必须在创建订阅时设置客户的电子邮件参数,并确保Stripe dashboard上启用电子邮件客户成功付款选项

$user->newSubscription('default', 'monthly')
    ->create($paymentMethod, [
        'email' => $user->email, // <= customer’s email
    ]);

请注意:

不发送使用您的测试 API 密钥创建的付款收据 自动地。相反,您可以使用查看或手动发送收据 Dashboard


但如果你想通过 Laravel 发送收据,你可以define a new webhook event handler 并使用Stripe webhook

  1. Stripe dashboardhttps://your-domain.com/stripe/webhooks 设置新端点

  2. 在您的 VerifyCsrfToken 中间件中将 URI 列为例外,或在 web 中间件组之外列出路由:

    protected $except = [
        'stripe/*',
    ];
    
  3. 定义一个新的WebhookController 并向控制器添加一个handleInvoicePaymentSucceeded 方法来处理invoice.payment_succeeded webhook:

    <?php
    
    namespace App\Http\Controllers;
    
    use Laravel\Cashier\Http\Controllers\WebhookController as CashierController;
    use App\Notifications\InvoicePaid;
    
    class WebhookController extends CashierController
    {
        /**
         * Handle payment succeeds.
         *
         * @param  array $payload
         * @return \Symfony\Component\HttpFoundation\Response
         */
        protected function handleInvoicePaymentSucceeded(array $payload)
        {
            $invoice = $payload['data']['object'];
            $user = $this->getUserByStripeId($invoice['customer']);
    
            if ($user) {
                $user->notify(new InvoicePaid($invoice));
            }
    
            return new Response('Webhook Handled', 200);
        }
    }
    
  4. 在您的 routes/web.php 文件中定义到您的 Cashier 控制器的路由。这将覆盖默认的发货路线:

    Route::post('stripe/webhook', '\App\Http\Controllers\WebhookController@handleWebhook');
    
  5. (可选)您可以手动设置 Stripe 的 webhook 签名以提高安全性。

请参阅Laravel docs 以获取更多信息。

【讨论】:

  • 谢谢伙计!很棒的澄清。感谢您指出“测试API密钥不会自动发送”,我整天都在测试哈哈
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-18
  • 1970-01-01
  • 2016-07-07
  • 1970-01-01
  • 2013-01-09
  • 2013-07-22
  • 1970-01-01
相关资源
最近更新 更多