potelo/mo-payment

MoPayment为moip.com.br上的支付提供接口

1.1.1 2021-01-27 18:25 UTC

This package is auto-updated.

Last update: 2024-08-28 01:51:45 UTC


README

简介

MoPayment基于Laravel Cashier,为moip.com.br提供控制订阅的接口

安装Laravel 5.x

使用Composer安装此包

composer require potelo/mo-payment

如果您不使用自动发现,请将ServiceProvider添加到config/app.php中

Potelo\MoPayment\MoPaymentServiceProvider::class,

现在,配置GuPayment使用的.env中的变量

MOIP_ENV=sandbox
MOIP_MODEL=App\User
MOIP_WEBHOOK_AUTHORIZATION=seu_webhook_authorization
MOIP_APITOKEN=seu_api_token
MOIP_APIKEY=seu_api_key
MOPAYMENT_SIGNATURE_TABLE=subscriptions
MOIP_MODEL_FOREIGN_KEY=user_id
MOIP_USER_MODEL_COLUMN=moip_id
MOIP_SUBSCRIPTION_MODEL_ID_COLUMN=moip_id
MOIP_SUBSCRIPTION_MODEL_PLAN_COLUMN=moip_plan

在开始使用MoPayment之前,您需要准备数据库。首先,您需要发布迁移。

php artisan vendor:publish --tag=migrations

如果需要修改或添加订阅表中的列,只需编辑已发布的迁移。然后,只需运行php artisan migrate命令。

use Potelo\MoPayment\MoPaymentTrait;

class User extends Authenticatable
{
    use MoPaymentTrait;
}

现在,我们在config/services.php中添加两个配置。用户类、Iugu提供的API密钥和用于管理订阅的表名,这是在创建迁移时选择的。

    'moip' => [
        'model'  => App\User::class,
        'webhook_authorization' => env('MOIP_WEBHOOK_AUTHORIZATION'),
        'token' => env('MOIP_APITOKEN'),
        'key' => env('MOIP_APIKEY'),
        'signature_table' => env('MOPAYMENT_SIGNATURE_TABLE'),
        'env' => env('MOIP_ENV'),
        'model_foreign_key' => env('MOIP_MODEL_FOREIGN_KEY'),
        'subscription_model_id_column' => env('MOIP_SUBSCRIPTION_MODEL_ID_COLUMN'),
        'subscription_model_plan_column' => env('MOIP_SUBSCRIPTION_MODEL_PLAN_COLUMN'),
    ],

创建订阅

要创建订阅,首先您需要有一个扩展MoPaymentTrait的用户实例。然后,您应该使用newSubscription方法来创建订阅

$user = User::find(1);

$user->newSubscription('main',
    'plan_code',
    'CREDIT_CARD'
)->create();

覆盖计划值

如果您想覆盖计划值,请使用amount方法。例如,R$ 20.90应表示为"2090"。

$user = User::find(1);

$user->newSubscription('main',
    'plan_code',
    'CREDIT_CARD'
)->amount(2090)
->create();

折扣券

如果需要,您可以关联折扣券以提供给您的计划订阅者。要在创建订阅时提供折扣券,请使用coupon方法。

$user = User::find(1);

$user->newSubscription('main',
    'plan_code',
    'CREDIT_CARD'
)->coupon('codigo_cupom')
->create();

检查订阅状态

一旦用户在您的应用程序中订阅了计划,您可以通过一些方法来检查此订阅的状态。subscribed方法如果用户有活动的订阅(即使在试用期),则返回true。

if ($user->subscribed('main')) {
    //
}

如果您需要知道一个用户的订阅是否在试用期,您可以使用onTrial方法。此方法对于通知用户他们正在测试期很有用,例如。

if ($user->subscription('main')->onTrial()) {
    //
}

要检查订阅是否已暂停,请使用suspended方法在订阅上。

if ($user->subscription('main')->suspended()) {
    //
}

您还可以检查一个订阅是否已暂停,但用户仍然处于"宽限期"。例如,如果用户在3月5日取消订阅,但到期日是3月10日,则他们将在此宽限期内直到3月10日。要检查这一点,请使用onGracePeriod方法。

if ($user->subscription('main')->onGracePeriod()) {
    //
}

取消订阅

要取消订阅,只需在用户订阅上调用suspend方法。

$user->subscription('main')->suspend();

重新激活订阅

如果用户有一个已暂停的订阅并希望重新激活它,请使用resume方法。

$user->subscription('main')->resume();

账单

您可以通过invoices方法轻松获取用户的账单。

$invoices = $user->invoices('subscription_code');

订阅者

当您使用newSubscription方法时,客户会自动创建。但是,要手动创建客户,您可以使用createAsMoipCustomer方法。

$options = [
    'fullname' => 'Joao Silva',
    'email' => 'joao_silva@example.com',
    'phone_area_code' => '11',
    'phone_number' => '999887766',
    'cpf' => '01234567891',
    'birthdate_day' => '2',
    'birthdate_month' => '2',
    'birthdate_year' => '2000',
    'address' => [
        'street' => 'Rua de Cima',
        'number' => '1000',
        'complement' => 'Casa',
        'district' => 'Bairro Azul',
        'city' => 'São Paulo',
        'state' => 'SP',
        'country' => 'BRA',
        'zipcode' => '05015010',
    ],
    'billing_info' => [
        'credit_card' => [
            'holder_name' => 'Joao Silva',
            'number' => '4111111111111111',
            'expiration_month' => '08',
            'expiration_year' => '20'
        ]
    ]
];

// Criar assinante no Moip
$user->createAsMoipCustomer($options);

Webhooks

Webhooks是Moip触发通知的地址(URL),这些通知是与您账户中发生的一些事件相关的。要使用它,您需要为handleWebhook方法配置一个路由,这是您在Moip面板上配置的同一路由。

Route::post('webhook', '\Potelo\MoPayment\Http\Controllers\WebhookController@handleWebhook');

MoPayment 提供了方法来更新数据库,以防订阅被暂停。指向该方法的路径,这将自动执行。请记住,您需要禁用该路由的 CRSF 保护。您可以在 VerifyCsrfToken 中间件的 except 中放置该 URL

protected $except = [
   'webhook',
];

其他 webhooks

Moip 还拥有多个其他 webhooks,要为其他事件创建,只需扩展 WebhookController。您的方法应与 handle 加上 "camelCase" 中的事件名称相对应。例如,当创建新账单时,Moip 发送一个触发器,事件为 invoice.created,因此只需创建一个名为 handleInvoiceCreated 的方法即可。

Route::post('webhook', 'MeuWebhookController@handleWebhook');
<?php

namespace App\Http\Controllers;

use Potelo\GuPayment\Http\Controllers\WebhookController;

class MeuWebhookController extends WebhookController {

    public function handleInvoiceCreated(array $payload)
    {
        return 'Fatura criada: ' . $payload['resource']['id'];
    }
}

如果想要在本地环境中测试 webhooks,可以使用 ngrok