payzeio/laravel-payze

此包已被废弃且不再维护。未建议替代包。

Payze.io Payment Integration for Laravel

v3.0.4 2023-07-24 11:01 UTC

README

Latest Stable Version Total Downloads Downloads Month

此包允许您从Laravel应用程序中处理Payze.io的支付。

Laravel Payze.io Integration

变更日志

有关最近更改的更多信息,请参阅变更日志

升级

升级到新版本后,请确保运行发布命令以发布最新的迁移。此外,请将新的配置文件内容复制到现有的配置文件中。

目录

安装

composer require payzeio/laravel-payze

适用于Laravel <= 5.4

如果您使用的是Laravel 5.4或更低版本,您必须手动在您的config/app.php文件中添加服务提供者。打开config/app.php并将PayzeServiceProvider添加到providers数组中。

'providers' => [
    # Other providers
    PayzeIO\LaravelPayze\PayzeServiceProvider::class,
],

通过运行发布迁移和配置

php artisan vendor:publish --provider="PayzeIO\LaravelPayze\PayzeServiceProvider"

运行迁移

php artisan migrate

API密钥

访问Payze.io网站并生成API密钥。将密钥和密钥保存到.env文件中

PAYZE_API_KEY=PayzeApiKey
PAYZE_API_SECRET=PayzeApiSecret

定义路由

您必须定义应用程序中的成功和失败路由以完成交易。转到您的web.php(或存储路由的地方)并添加以下内容

routes()函数接受3个可选参数

控制器:控制器名称,默认:App\Http\Controller\PayzeController

成功方法:成功方法名称,默认:success

失败方法:失败方法名称,默认:fail

use PayzeIO\LaravelPayze\Facades\Payze;

// Other routes...

Payze::routes();

这些路由将具有payze.successpayze.fail的名称。如果您在某个命名空间下定义了它们,则可以更新配置中的名称。例如,如果您在api.php中定义了payze路由,并且该文件名为api.,则您的路由将是api.payze.successapi.payze.fail。在config/payze.php文件中更新它们,该文件存储在routes数组中。

配置

通用变量存储在config/payze.php文件中。更多详情

日志

在每个请求/交易中启用/禁用数据库详细日志记录。默认情况下,仅在本地环境中启用日志记录。您可以从.env或直接从配置文件中覆盖此值。

SSL验证

在Guzzle客户端中启用/禁用SSL验证以避免某些服务器上的SSL问题。默认启用。

路由

成功和失败路由名称,用于识别完成的交易并在数据库中更新交易状态。

只有当您在另一个命名空间(如api)中定义了路由时,才更新路由名称。例如,您将拥有api.payze.successapi.payze.fail URL。

视图

交易完成后显示的成功和失败视图名称。您可以覆盖它们并使用带有自己布局的自己的页面。

默认情况下,它使用一个空页面,仅包含状态文本(绿色/红色颜色)和“返回首页”按钮。

交易表

数据库中存储所有交易的表的名称。

日志表

数据库中存储关于交易和API请求详细日志的表的名称。

卡令牌表

数据库中存储所有已保存的卡令牌的表的名称。

API密钥

Payze.io账户的API密钥。

API密钥

Payze.io账户的API密钥。

支付与请求

所有请求都由相应的类发送,这些类扩展了相同的类(PayzeIO\LaravelPayze\Concerns\ApiRequest)。

所有请求都通过request()函数(传递构造函数数据)静态调用,然后链式调用所有需要的数据,然后调用process()

有关所需数据和选项的详细说明请参阅下一节

直接支付

如果您需要一次性支付,则应使用Just Pay功能。

参数

  • Amount - float,必需

返回: Illuminate\Http\RedirectResponse

use PayzeIO\LaravelPayze\Requests\JustPay;

return JustPay::request(1)
    ->for($order) // optional
    ->preauthorize() // optional
    ->process();

添加(保存)卡

保存一张卡会为您提供一张卡令牌,您可以使用它进行进一步的手动收费而无需与客户互动。您可以收费任何金额,也可以在单个操作中保存一张卡,或者您可以将金额设置为0以仅保存一张卡(某些银行可能收取0.1GEL并退款以保存卡)。

卡令牌保存在数据库中,可以通过PayzeCardToken模型或cards relationship访问。

请求支付后,数据库中会创建一个处于非活动状态的卡令牌。在成功收费后,卡令牌会自动变为活动状态。

重要!如果您想将卡令牌与用户关联,以及将交易与订单关联,则应使用接收卡令牌所有者模型实例的assignTo方法。

参数

  • Amount - float,可选,默认:0

方法

  • assignTo - Illuminate\Database\Eloquent\Model,可选,默认:null

返回: Illuminate\Http\RedirectResponse

use PayzeIO\LaravelPayze\Requests\AddCard;

return AddCard::request(1)
    ->for($order) // transaction will be assigned to order
    ->assignTo($user) // optional: card token will be assigned to user. if not present, then will be assigned to order
    ->process();

使用已保存的卡支付

您可以在不与客户互动的情况下随时使用已保存的卡令牌进行支付。

可以通过PayzeCardToken模型或cards relationship访问卡令牌。有关卡令牌模型的更多信息,请参阅此处

参数

  • CardToken - PayzeIO\LaravelPayze\Models\PayzeCardToken,必需
  • Amount - float,可选,默认:0

返回: PayzeIO\LaravelPayze\Models\PayzeTransaction

use PayzeIO\LaravelPayze\Requests\PayWithCard;

// Get user's non-expired, default card
$card = $user->cards()->active()->default()->firstOrFail();

return PayWithCard::request($card, 15)
    ->for($order) // optional
    ->process();

提交

提交(收费)已冻结(预先授权)的交易。

参数

  • TransactionId - string|PayzeIO\LaravelPayze\Models\PayzeTransaction,必需
  • Amount - float,可选,默认:0,(可以部分收费)。0将收费全部金额

返回: PayzeIO\LaravelPayze\Models\PayzeTransaction

use PayzeIO\LaravelPayze\Requests\Commit;

return Commit::request($transaction)->process();

退款

退还可退还的交易。

参数

  • TransactionId - string|PayzeIO\LaravelPayze\Models\PayzeTransaction,必需
  • Amount - float,可选,默认:0,(可以部分退还)。0将退还全部金额

返回: PayzeIO\LaravelPayze\Models\PayzeTransaction

use PayzeIO\LaravelPayze\Models\PayzeTransaction;
use PayzeIO\LaravelPayze\Requests\Refund;

$transaction = PayzeTransaction::refundable()->latest()->firstOrFail();

return Refund::request($transaction)->process();

交易信息

获取交易信息并更新数据库。

参数

  • TransactionId - string|PayzeIO\LaravelPayze\Models\PayzeTransaction,必需

返回: PayzeIO\LaravelPayze\Models\PayzeTransaction

use PayzeIO\LaravelPayze\Models\PayzeTransaction;
use PayzeIO\LaravelPayze\Requests\GetTransactionInfo;

$transaction = PayzeTransaction::latest()->firstOrFail();

return GetTransactionInfo::request($transaction)->process();

商户余额

从商户账户获取余额信息。

返回: array

use PayzeIO\LaravelPayze\Requests\GetBalance;

return GetBalance::request()->process();

支付请求选项

您可以将这些参数传递给Payze包中的所有支付请求。

金额

所有支付请求在构造函数中都有一个金额,但也有一個单独的方法可以更改金额。

use PayzeIO\LaravelPayze\Requests\JustPay;

// Request 1 GEL originally
$request = JustPay::request(1);

// Some things happened, updating amount
return $request->amount(10)->process();

货币

您可以通过在请求上调用 currency() 函数来更改您的支付货币。默认:GEL

查看支持货币请参阅 货币枚举文件

建议:使用枚举传递货币而不是直接传递字符串。

use PayzeIO\LaravelPayze\Enums\Currency;
use PayzeIO\LaravelPayze\Requests\JustPay;

return JustPay::request(1)->currency(Currency::USD)->process();

语言

您可以通过在请求上调用 language() 函数来更改您的支付页面语言。默认:ge

查看支持的语言请参阅 语言枚举文件

建议:使用枚举传递语言而不是直接传递字符串。

use PayzeIO\LaravelPayze\Enums\Language;
use PayzeIO\LaravelPayze\Requests\JustPay;

return JustPay::request(1)->language(Language::ENG)->process();

预授权

预授权方法用于暂时锁定金额,然后手动(提交)交易。例如,如果您销售需要订单后生产的商品,则在订单时锁定(预授权)交易,然后在您的产品准备好后手动(提交)。

关联模型

您可以通过在请求上调用 for() 函数将任何 Eloquent 模型关联到交易。例如,将订单实例传递到支付请求以检查支付后的订单状态。

use App\Models\Order;
use PayzeIO\LaravelPayze\Requests\JustPay;

$order = Order::findOrFail($orderId);

return JustPay::request(1)->for($order)->process();

分割资金

您可以将在不同银行账户之间分割资金。例如,您有一个市场,用户在那里销售他们的产品,您为此收取佣金。您可以直接轻松分割转账资金,而不是在每次订单中手动从银行账户转账到卖家。

您必须在请求上调用 split() 函数,该函数接受 PayzeIO\LaravelPayze\Objects\Split 对象的列表/数组。

分割对象有三个参数:Amount(金额)、Receiver's IBAN(收款人的 IBAN)和Pay In(可选)(转账前延迟的天数)。

例如,一个产品的成本是 20GEL。您需要获得您的佣金(10%)并将剩余部分转账给卖家。

use PayzeIO\LaravelPayze\Objects\Split;
use PayzeIO\LaravelPayze\Requests\JustPay;

return JustPay::request(20)
    ->split(
        new Split(2, "Your IBAN"), // Transfer 2GEL immediately
        new Split(18, "Seller's IBAN", 3) // Transfer 18GEL after 3 days (for example, as an insurance before processing the order)
    )->process();

原始数据

默认情况下,当您请求支付时,它将返回一个 RedirectResponse。您可以通过调用 raw() 函数,支付请求将返回原始数据而不是 RedirectResponse。

use PayzeIO\LaravelPayze\Requests\JustPay;

$request = JustPay::request(20)->raw()->process();

log($request['transactionId']);

return $request['transactionUrl'];

控制器

默认控制器应在运行安装部分中的发布命令后发布。您可以在控制器中的 successResponsefailResponse 方法中添加您的自定义逻辑。例如,您可以从这些方法中设置闪存消息,发送通知,标记订单为完成或您需要做任何事情。

重要:如果您从 successResponsefailResponse 方法返回任何非 NULL 值,则该响应将用于成功/失败路由。否则将使用 默认逻辑

事件

在成功或失败的交易之后会触发事件。您可以在您的应用程序中 定义监听器 以标记订单为已支付,通知客户或您需要的任何操作。

这两个事件都有 $transaction 属性。

已支付事件:PayzeIO\LaravelPayze\Events\PayzeTransactionPaid

失败事件:PayzeIO\LaravelPayze\Events\PayzeTransactionFailed

关系

您可以使用特质将 transactionscards 关系添加到您的模型中,以便轻松访问关联条目。

交易关系

HasTransactions 特质添加到您的模型。

use PayzeIO\LaravelPayze\Traits\HasTransactions;

class Order extends Model
{
    use HasTransactions;
}

现在您可以通过调用 $order->transactions 访问交易。

卡关系

HasCards 特质添加到您的模型。

use PayzeIO\LaravelPayze\Traits\HasCards;

class User extends Model
{
    use HasCards;
}

现在您可以通过调用 $user->cards 访问已保存的卡片。

模型

交易模型

您可以通过 PayzeIO\LaravelPayze\Models\PayzeTransaction 模型访问数据库中记录的所有交易。

获取所有交易

use PayzeIO\LaravelPayze\Models\PayzeTransaction;

PayzeTransaction::all();

已支付范围

使用 paid() 范围过滤已支付交易。

use PayzeIO\LaravelPayze\Models\PayzeTransaction;

PayzeTransaction::paid()->get();

未支付范围

使用 unpaid() 范围过滤未支付交易。

use PayzeIO\LaravelPayze\Models\PayzeTransaction;

PayzeTransaction::unpaid()->get();

已完成范围

使用 completed() 范围过滤已完成交易。

use PayzeIO\LaravelPayze\Models\PayzeTransaction;

PayzeTransaction::completed()->get();

不完整范围

使用 incomplete() 范围过滤不完整的交易。

use PayzeIO\LaravelPayze\Models\PayzeTransaction;

PayzeTransaction::incomplete()->get();

可退款范围

使用 refundable() 范围过滤可退款交易。

use PayzeIO\LaravelPayze\Models\PayzeTransaction;

PayzeTransaction::refundable()->get();

不可退款范围

使用 nonrefundable() 范围过滤不可退款交易。

use PayzeIO\LaravelPayze\Models\PayzeTransaction;

PayzeTransaction::nonrefundable()->get();

卡令牌模型

您可以通过 PayzeIO\LaravelPayze\Models\PayzeCardToken 模型访问数据库中记录的所有已保存的卡令牌。

注意:开始 AddCard 支付后,会创建一个新的非活动令牌数据库条目,该令牌在支付成功后激活。因此,“活动”卡指的是有效的令牌,可用于未来的支付。

获取所有活动令牌

令牌会自动按全局范围过滤,并只返回活动令牌。

use PayzeIO\LaravelPayze\Models\PayzeCardToken;

PayzeCardToken::all();

活动卡令牌具有 card_maskcardholderbrandexpiration_date 属性,这些属性有助于用户选择正确的卡。

活动(未过期)范围

由于令牌会自动按全局范围过滤,因此 active() 范围现在根据到期日期返回非过期卡令牌。

使用 active() 范围过滤活动(未过期)卡令牌。

use PayzeIO\LaravelPayze\Models\PayzeCardToken;

PayzeCardToken::active()->get();

带有非活动范围

令牌会自动按全局范围过滤,并只返回活动令牌。如果您想将非活动卡令牌包含在列表中,应在查询中添加 withInactive() 范围。

use PayzeIO\LaravelPayze\Models\PayzeCardToken;

PayzeCardToken::withInactive()->get();

非活动范围

使用 inactive() 范围过滤非活动卡令牌。此方法已包含 withInactive() 范围,因此您无需手动指定。

use PayzeIO\LaravelPayze\Models\PayzeCardToken;

PayzeCardToken::inactive()->get();

是否过期

您可以检查已检索的 PayzeCardToken 模型实例是否过期。

如果数据库中未填写到期日期,则方法将返回 false。

use PayzeIO\LaravelPayze\Models\PayzeCardToken;

$token = PayzeCardToken::latest()->get();

$token->isExpired();

是否活动(非过期)

您可以检查已检索的 PayzeCardToken 模型实例是否过期。

如果数据库中未填写到期日期,则方法将返回 true。

use PayzeIO\LaravelPayze\Models\PayzeCardToken;

$card = PayzeCardToken::latest()->get();

$card->isActive();

标记为默认

您可以设置当前卡为默认卡。所有其他卡将自动取消标记。

use PayzeIO\LaravelPayze\Models\PayzeCardToken;

$card = PayzeCardToken::latest()->get();

$card->markAsDefault();

日志模型

您可以通过 PayzeIO\LaravelPayze\Models\PayzeLog 模型访问数据库中的所有日志。

获取所有日志

use PayzeIO\LaravelPayze\Models\PayzeLog;

PayzeLog::all();

废弃的交易

状态为 Created 的已弃用交易在约 10 分钟后自动拒绝,因此您必须运行计划任务来更新这些交易的状态。

如果您尚未配置计划任务,请在此处阅读如何配置

app/Console/Kernel.php$commands 变量中注册我们的控制台命令

use PayzeIO\LaravelPayze\Console\Commands\UpdateIncompleteTransactions;

protected $commands = [
    // Other commands
    UpdateIncompleteTransactions::class,
];

然后,在 app/Console/Kernel.phpschedule 函数中添加一个命令。我们建议每 30 分钟运行一次作业,但这完全取决于您和您的应用程序需求。

use PayzeIO\LaravelPayze\Console\Commands\UpdateIncompleteTransactions;

protected function schedule(Schedule $schedule)
{
    // Other commands
    $schedule->command(UpdateIncompleteTransactions::class)->everyThirtyMinutes();
}

作者