codejutsu1/laravel-paystack-transfer

一个优雅的laravel包,用于使用paystack进行单笔和批量转账。

v1.0.1 2024-04-13 19:24 UTC

This package is auto-updated.

Last update: 2024-09-13 20:20:18 UTC


README

Latest Version on Packagist GitHub Tests Action Status License Total Downloads

一个用于通过 Paystack 进行单笔和批量转账的Laravel包。

安装

需要PHP 8.2+ 和 Composer

兼容Laravel 9, 10, 11。

  • 通过composer安装此包

    composer require codejutsu1/laravel-paystack-transfer
  • 可选 您可以通过以下命令发布配置文件

    php artisan paystack-transfer:install

    名为 paystack-transfer.php 的配置文件将放置在您的laravel应用的 config 文件夹中

    <?php
    
    // config for Codejutsu1/LaravelPaystackTransfer
    return [
        /**
         * Public Key From Paystack Dashboard
         *
         */
        'public_key' => env('PAYSTACK_PUBLIC_KEY'),
    
        /**
         * Secret Key From Paystack Dashboard
         *
         */
        'secret_key' => getenv('PAYSTACK_SECRET_KEY'),
    
    ];

用法

打开您的 .env 文件并添加您的公共和秘密API密钥。

PAYSTACK_PUBLIC_KEY=
PAYSTACK_SECRET_KEY=

目录

支付流程

  1. 要使用此包进行转账(单笔或批量),您需要提供一个包含四个参数的数组
    • amount - 要发送的金额。
    • reference(转账参考)- 一个唯一标识符,将用于跟踪您的交易。此包提供了一个辅助函数,generateTransferReference(),它返回一个您可以用作唯一参考的UUID。
    • recipient(转账接收方)- 转账接收方是您可以向其发送资金的受益人。要创建转账接收方,您需要先收集其详细信息。
    • reason - 转账的原因。
    • currency -(可选)默认为 NGN,但您可以指定您的货币。
<?php

$transfers = [
    "amount": "37800",
    "reference": "your-unique-reference", 
    "recipient": "RCP_t0ya41mp35flk40", 
    "reason": "Holiday Flexing" 
];
  1. 每个请求都返回一个包含以下内容的对象响应
    • status(布尔值)
    • message(字符串)
    • data(数组)
    • meta(数组)

转账接收方

创建单个转账接收方

要创建单个转账接收方

<?php 

$data = [
    "type" => "nuban", //Recipient type, either nuban, ghipps, mobile_money or bass
    "name" => "Daniel Dunu", //Recipient name
    "account_number" => "01000000010", // Recipient Account Number
    "bank_code" => "058", // Recipient bank code
    "currency" => "NGN", // Recipient Currency
];

try{
    $response = PaystackTransfer::createTransferRecipient($data);
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

if($response->status){
    // Your code Logic
}

重要

将recipient_code存储在您的数据库中,与接收方一起。有关更多信息,请访问 Paystack 创建转账接收方

创建批量转账接收方

无论批次数量如何,您都可以创建多个转账接收方。要创建多个转账接收方

<?php 

$data = [
    [
        "type" => "nuban", //Recipient type, either nuban, ghipps, mobile_money or bass
        "name" => "Daniel Dunu", //Recipient name
        "account_number" => "01000000010", // Recipient Account Number
        "bank_code" => "058", // Recipient bank code
        "currency" => "NGN", // Recipient Currency
    ],
    [
        "type" => "ghipps", //Recipient type, either nuban, ghipps, mobile_money or bass
        "name" => "John Doe", //Recipient name
        "account_number" => "02000000020", // Recipient Account Number
        "bank_code" => "018", // Recipient bank code
        "currency" => "NGN", // Recipient Currency
    ],
];

try{
    $response = PaystackTransfer::bulkTransferRecipient($data);
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

if($response->status){
    // Your code Logic
}

注意

有关更多信息,请访问 Paystack 批量创建转账接收方

列出转账接收方

要列出所有转账接收方

<?php

try{
    $response = PaystackTransfer::listTransferRecipients();
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

if($response->status){
    // Eg of code logic
    $transferRecipients = collect($response->data);

    return $transferRecipients;
}

您还可以提供查询参数作为数组

<?php

$queryParameters = [
    "perPage" => 30, //Integer(optional), Records per page.
    "page" => 2, //Integer(optional), exact page to retrieve.
    "from" => "2016-09-24T00:00:05.000Z", //dateTime(optional), Timestamp to start listing transfer recipient.
    "to" => "2016-09-24T00:00:05.000Z", //dateTime(optional), Timestamp to stop listing transfer recipient
];

try{
    $response = PaystackTransfer::listTransferRecipients($queryParameters);
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

return $response;

注意

有关更多信息,请访问 Paystack 列出转账接收方

获取转账接收方

要获取转账接收方,您需要提供接收方的id或recipient code

<?php

try{
    $response = PaystackTransfer::fetchTransferRecipient("RCP_2x5j67tnnw1t98k");
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

if($response->status){
    // Your code logic here
}

注意

有关更多信息,请访问 Paystack 获取转账接收方

更新转账接收方

要更新转账接收方的详细信息,您需要提供接收方的id或recipient code以及要更新的详细信息(姓名和/或电子邮件)

<?php

$data = [
    'email' => 'danieldunu001@gmail.com'
];

try{
    $response = transfer()->updateTransferRecipient("RCP_2x5j67tnnw1t98k", $data);
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

if($response->status){
    // Your code logic here
}

注意

有关更多信息,请访问 Paystack 更新转账接收方

删除转账接收方

要删除转账接收人,您需要提供接收人的id或接收人代码

<?php

try{
    $response = transfer()->deleteTransferRecipient("RCP_2x5j67tnnw1t98k");
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

if($response->status){
    // Your code logic here
}

注意

更多信息,请访问 Paystack 删除转账接收人

银行

获取银行API

获取尼日利亚银行列表

<?php

try{
    $response = transfer()->getBanks();
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

if($response->status){
    $banks = collect($response->data); // To a collection.

    // Your logic
}

您还可以提供查询参数作为数组

<?php 

$queryParameters = [
    "country" => "ghana", //String(Optional), nigeria or ghana, default is nigeria
    "perPage" => 50,  //Integer(optional), Records per page.
    //Other query parameters in the documentation.
];

try{
    $response = transfer()->getBanks($queryParameters);
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

return $response;

注意

更多信息,请访问 Paystack 列出银行 API

获取银行代码

要获取银行代码,您需要从 获取银行 API 提供银行名称

<?php 

try{
    $code = transfer()->getBankCode("United Bank For Africa");
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

return $code;

验证账户号码

要确认账户属于正确的客户,您需要提供客户的账户号码和银行代码,两者均为字符串

<?php

try{
    $response = PaystackTransfer::verifyAccountNumber(accountNumber:"2134288420", bankCode:"022");
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

if($response->status){
    //Your logic
}

注意

更多信息,请访问 Paystack 解决账户

转账

单笔转账

要进行单次转账,您需要将这些参数作为数组提供

  • 原因
  • 金额
  • 参考
  • 接收人

默认情况下,currencyNGN。您可以通过将其添加到数组中覆盖默认货币。对于 source,我们通过合并数组并使用值 balance 来处理。

<?php

$parameters = [
	"reason": "Savings",
	"amount": 300000, //NGN3000, converted to kobo. 
	"reference": "your-unique-reference",
	"recipient": "RCP_1a25w1h3n0xctjg"
];
try{
    $response = PaystackTransfer::singleTransfer($parameters);
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

if($response->status){
    //Your code logic
}

注意

更多信息,请访问 Paystack 单次转账

完成转账

使用 OTP启用 进行单次转账后,您将需要通过提供 OTP转账代码 作为字符串来完成您的转账

<?php

try{
    $response = transfer()->finalizeTransfer(transfer_code:"TRF_vsyqdmlzble3uii", otp: "930322");
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

if($response->status){
    //Your logic
}

注意

更多信息,请访问 Paystack 完成转账

批量转账

要向多个接收人发送资金,您需要以 批次 的形式发送请求。一个 批次 是一个包含 转账参数 的数组数组。一个 批次 不应包含超过 100 个数组

<?php

$transfers = [
    [
        "amount"=> 20000,
        "reference"=> "588YtfftReF355894J",
        "reason"=> "Why not?",
        "recipient"=> "RCP_2tn9clt23s7qr28",    
    ],
    [
        "amount"=> 30000,
        "reference"=> "YunoTReF35e0r4J",
        "reason"=> "Because I can",
        "recipient"=> "RCP_1a25w1h3n0xctjg",    
    ],
    [
        "amount"=> 40000,
        "reference"=> generateTransferReference(),
        "reason"=> "Go buy your mama a house",
        "recipient"=> "RCP_aps2aibr69caua7",
    ]
];

try{
    $response = PaystackTransfer::bulkTransfer($transfers);
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

if($response->status){
    //Your logic
}

如果批次应包含超过 100 个数组,则应将其分解为批次,每个批次包含 100 个数组,并且每个批次应每 5 秒发送一次。

但您不必担心这一点,只需将批次(即使其包含超过 100 个数组)作为参数传递给 batchTransfer 方法。此包将将其分解为批次,每个批次包含不超过 100 个数组,并且每 5 秒进行一次请求。

注意

它将返回一个响应数组,而不是每个请求的对象。

<?php

$transfers = [
    [
        "amount"=> 20000,
        "reference"=> "588YtfftReF355894J",
        "reason"=> "Why not?",
        "recipient"=> "RCP_2tn9clt23s7qr28",    
    ],
    [
        "amount"=> 30000,
        "reference"=> "YunoTReF35e0r4J",
        "reason"=> "Because I can",
        "recipient"=> "RCP_1a25w1h3n0xctjg",    
    ],
    [
        "amount"=> 40000,
        "reference"=> generateTransferReference(),
        "reason"=> "Go buy your mama a house",
        "recipient"=> "RCP_aps2aibr69caua7",
    ],
    //.... > 97 more arrays
];

try{
    $response = PaystackTransfer::batchTransfer($transfers);
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

if($response->status){
    //Your logic
}

注意

您需要设置webhooks以跟踪您的转账。更多信息,请访问 Paystack 批量转账

列出转账

Paystack为您提供获取所有转账列表的选项

<?php

try{
    $response = PaystackTransfer::listTransfers();
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

if($response->status){
    //Your logic
}

您还可以提供查询参数作为数组

$queryParameters = [
    "perPage" => 30, //Integer(optional), Records per page.
    "page" => 2, //Integer(optional), exact page to retrieve.
    "customer" => "12121", //String(optional), filter by id.
    "from" => "2016-09-24T00:00:05.000Z", //dateTime(optional), Timestamp to start listing transfer recipient.
    "to" => "2016-09-24T00:00:05.000Z", //dateTime(optional), Timestamp to stop listing transfer recipient
];

try{
    $response = PaystackTransfer::listTransfers($queryParameters);
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

return $response;

注意

更多信息,请访问 Paystack 列出转账

获取转账

获取转账详情。您需要提供转账id。

<?php

try{
    $response = PaystackTransfer::fetchTransfer("14938");
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

if($response->status){
    //Your logic
}

注意

更多信息,请访问 Paystack 获取转账

验证转账

验证转账状态。您需要提供转账参考。

try{
    $response = PaystackTransfer::verifyTransfer("your_reference");
}catch(\Exception $e){
    return redirect()->back()->withMessage($e->getMessage());
}

if($response->status){
    //Your code logic
} 

注意

更多信息,请访问 Paystack 验证转账

测试

composer test

变更日志

请参阅 CHANGELOG 了解最近更改的信息。

贡献

请随时提交问题(有关错误或建议)和拉取请求(到dev分支)。

安全漏洞

如果您在此包中发现安全漏洞,请将电子邮件发送到Daniel Dunu的danieldunu001@gmail.com。所有安全漏洞都将得到及时处理。

待办事项

  • 编写集成第三方API的测试。
  • 如果您的业务是 已注册的业务,则使用您的测试API密钥测试转账功能并提供反馈。

鸣谢

许可协议

MIT许可协议(MIT)。请参阅许可文件以获取更多信息。