protonemedia/laravel-paddle

Laravel 对 Paddle.com 的集成

2.8.0 2024-02-27 16:07 UTC

README

⚠️ 我对这个包的未来不确定。我可能要放弃它,所以请考虑使用 Laravel Cashier (Paddle)

Laravel Paddle

Latest Version on Packagist run-tests Quality Score Total Downloads

此包为 Laravel 提供了与 Paddle.com 的集成。阅读有关该包介绍的 博客文章

功能

赞助我们

❤️ 我们自豪地通过开发和免费提供 Laravel 包来支持社区。如果这个包为您节省了时间或您在专业上依赖它,请考虑 赞助维护和开发,并查看我们最新的高级包: Inertia Table。跟踪问题和拉取请求需要时间,但我们乐于提供帮助!

安装

只有此包的主分支和 2.0 版本与 Laravel 8.0 及更高版本兼容。如果您仍在使用较旧版本的 Laravel(或 PHP < 7.3),请参考下面的图表以确定您应使用哪个版本。请注意,旧版本不再受支持。

您可以通过 composer 安装此包

composer require protonemedia/laravel-paddle

配置

发布配置文件

php artisan vendor:publish --provider="ProtoneMedia\LaravelPaddle\PaddleServiceProvider" --tag=config

在您的 .env 文件或 config/paddle.php 文件中设置您的 Vendor ID 和 Code 以及 公钥 设置。公钥用于验证来自 Paddle 的传入 webhooks。

PADDLE_SANDBOX=false
PADDLE_VENDOR_ID=123
PADDLE_VENDOR_AUTH_CODE=456
PADDLE_PUBLIC_KEY="-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----"

Paddle Sandbox

从版本 2.2.0 开始,此包支持 Paddle Sandbox 环境。要使用此环境,将 sandbox_environment 配置键设置为 true。这将配置 API URL 以及 Paddle JavaScript 库。如果您在使用此包的先前版本时发布了 Blade 视图,请确保重新发布视图。

php artisan vendor:publish --provider="ProtoneMedia\LaravelPaddle\PaddleServiceProvider" --tag=views

用法

API 调用通过 Paddle 门面提供。查看 文档 了解有关 Paddle API 的所有信息。您可以流畅地构建 API 调用,也可以简单地传递一个包含数据的数组。此包对给定数据有一些基本验证规则,如果您的数据无效,可能会导致 InvalidDataException。当 API 调用失败时,它将抛出 PaddleApiException

// Fluent:
$paddleResponse = Paddle::product()
    ->generatePayLink()
    ->productId($paddlePlanId)
    ->customerEmail($team->owner->email)
    ->passthrough(['team_id' => $team->id])
    ->send();

// Array with payload:
$payload = [
    'product_id' => $paddlePlanId,
    'customer_email' => $team->owner->email,
    'passthrough' => ['team_id' => $team->id],
];

$paddleResponse = Paddle::product()
    ->generatePayLink($payload)
    ->send();

return Redirect::to($paddleResponse['url']);

可用的 API 调用

// alerts
Paddle::alert()->getWebhookHistory();

// checkouts
Paddle::checkout()->getOrderDetails();
Paddle::checkout()->getUserHistory();
Paddle::checkout()->getPrices();

// products
Paddle::product()->listCoupons();
Paddle::product()->createCoupon();
Paddle::product()->updateCoupon();
Paddle::product()->deleteCoupon();

Paddle::product()->listProducts();
Paddle::product()->generateLicense();
Paddle::product()->generatePayLink();
Paddle::product()->listTransactions($entity, $id);

// subscriptions
Paddle::subscription()->listPlans();
Paddle::subscription()->createPlan();

Paddle::subscription()->listUsers();
Paddle::subscription()->updateUser();
Paddle::subscription()->previewUpdate();
Paddle::subscription()->cancelUser();

Paddle::subscription()->listModifiers();
Paddle::subscription()->createModifier();
Paddle::subscription()->deleteModifier();

Paddle::subscription()->listPayments();
Paddle::subscription()->reschedulePayment();
Paddle::subscription()->createOneOffCharge($subscriptionId);

Webhooks 和 Laravel 事件

您可以在 paddle.php 配置文件中配置您的 webhook URI。在 Paddle 中相应地更新您的 webhook 设置。默认情况下,URI 是 paddle/webhook。这意味着 webhook 调用将被发布到 https://your-domain.com/paddle/webhook

每个 webhook 都将映射到一个事件并包含 webhook 的有效载荷。例如,当调用 Subscription Created webhook 时,请求将被验证并触发一个 SubscriptionCreated 事件。

事件

  • ProtoneMedia\LaravelPaddle\Events\HighRiskTransactionCreated
  • ProtoneMedia\LaravelPaddle\Events\HighRiskTransactionUpdated
  • ProtoneMedia\LaravelPaddle\Events\LockerProcessed
  • ProtoneMedia\LaravelPaddle\Events\NewAudienceMember
  • ProtoneMedia\LaravelPaddle\Events\PaymentDisputeClosed
  • ProtoneMedia\LaravelPaddle\Events\PaymentDisputeCreated
  • ProtoneMedia\LaravelPaddle\Events\PaymentRefunded
  • ProtoneMedia\LaravelPaddle\Events\PaymentSucceeded
  • ProtoneMedia\LaravelPaddle\Events\SubscriptionCancelled
  • ProtoneMedia\LaravelPaddle\Events\SubscriptionCreated
  • ProtoneMedia\LaravelPaddle\Events\SubscriptionPaymentFailed
  • ProtoneMedia\LaravelPaddle\Events\SubscriptionPaymentRefunded
  • ProtoneMedia\LaravelPaddle\Events\SubscriptionPaymentSucceeded
  • ProtoneMedia\LaravelPaddle\Events\SubscriptionUpdated
  • ProtoneMedia\LaravelPaddle\Events\TransferCreated
  • ProtoneMedia\LaravelPaddle\Events\TransferPaid
  • ProtoneMedia\LaravelPaddle\Events\UpdateAudienceMember

一些 webhook,例如 Fulfillment Webhook,没有 alert_name 键。这些 webhook 将被映射到 ProtoneMedia\LaravelPaddle\Events\GenericWebhook 事件。

当您注册一个监听器来处理事件时,有效载荷可以轻松访问。您还可以访问原始 HTTP 请求。

<?php

namespace App\Listeners;

use ProtoneMedia\LaravelPaddle\Events\SubscriptionCreated;

class CreateSubscriptionModel
{
    public function handle(SubscriptionCreated $event)
    {
        $status = $event->status;

        $nextBillDate = $event->next_bill_date;

        // or

        $webhookData = $event->all();

        //

        $request = $event->getRequest();
    }
}

Blade 指令

此指令导入 Paddle JavaScript 库并将其配置为您的 Vendor ID。

<body>
    {{-- your app --}}

    @paddle
</body>

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

贡献

有关详细信息,请参阅 CONTRIBUTING

其他 Laravel 包

  • Inertia Table:Inertia.js 的终极表格,内置查询构建器。
  • Laravel Blade On Demand:Laravel 包,用于在内存中编译 Blade 模板。
  • Laravel Cross Eloquent Search:Laravel 包,用于在多个 Eloquent 模型中进行搜索。
  • Laravel Eloquent Scope as Select:停止在 PHP 中重复复制您的 Eloquent 查询作用域和约束。此包允许您通过将它们添加为子查询来重用查询作用域和约束。
  • Laravel FFMpeg:此包为 Laravel 提供了 FFmpeg 集成。文件的存储由 Laravel 的 Filesystem 处理。
  • Laravel MinIO Testing Tools:在 MinIO S3 服务器上运行您的测试。
  • Laravel Mixins:Laravel 的一些好东西集合。
  • Laravel Task Runner:编写类似于 Blade 组件的 Shell 脚本,并在本地或远程服务器上运行它们。
  • Laravel Verify New Email:此软件包增加了验证新电子邮件地址的支持:当用户更新其电子邮件地址时,新地址被验证之前,旧地址不会被替换。
  • Laravel XSS Protection:Laravel 中间件,用于防止跨站脚本(XSS)攻击。它清理请求数据,并且可以清理 Blade 输出语句。

安全

如果您发现任何与安全相关的问题,请通过电子邮件发送到 pascal@protone.media,而不是使用问题跟踪器。

鸣谢

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件