Laravel Cashier 在发票/收据上自动发送电子邮件

标签 laravel stripe-payments laravel-cashier

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

最佳答案

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

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

请注意:

Receipts for payments created using your test API keys are not sent automatically. Instead, you can view or manually send a receipt using the Dashboard.


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

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

  2. VerifyCsrfToken 中间件中将 URI 列为异常(exception),或在 web 中间件组之外列出路由:

    protected $except = [
        'stripe/*',
    ];
    
  3. 定义一个新的 WebhookController 并向 Controller 添加一个 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 Controller 的路由。这将覆盖默认的发货路线:

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

Laravel docs形成更多信息。

关于Laravel Cashier 在发票/收据上自动发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59816797/

相关文章:

stripe-payments - 在 Kik 的 WebView/Payments 中使用 Stripe Mobile Checkout

php - 使用发票描述更新和发票 strip 订阅数量 laravel 收银员

PHP:如何使用 whereIn 子句基于多个 ID 更新一列

javascript - 我如何将 iCheck Checkbox 值传递给 Laravel?

paypal - 如何避免使用 Paypal 处理信用卡

ios - swift 如何获取 Stripe token ?

php - Laravel Cashier - 使用现有客户对象创建新订阅

php - 在laravel 8中运行迁移命令时出错

mysql - 如何处理 Laravel 中的 mySql POINT 字段

php - Laravel 4 中的 Cron 作业