codejutsu1 / laravel-paystack-transfer
一个优雅的laravel包,用于使用paystack进行单笔和批量转账。
Requires
- php: ^8.2
- illuminate/contracts: ^9.0 ||^10.0||^11.0
- laravel/framework: ^9.0 || ^10.0 || ^11.0
- saloonphp/saloon: ^3.8
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- laravel/pint: ^1.14
- nunomaduro/collision: ^8.1.1||^7.10.0
- orchestra/testbench: ^9.0.0||^8.22.0
- pestphp/pest: ^2.34
- pestphp/pest-plugin-arch: ^2.7
- pestphp/pest-plugin-laravel: ^2.3
README
一个用于通过 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=
目录
支付流程
- 要使用此包进行转账(单笔或批量),您需要提供一个包含四个参数的数组
- amount - 要发送的金额。
- reference(转账参考)- 一个唯一标识符,将用于跟踪您的交易。此包提供了一个辅助函数,
generateTransferReference(),它返回一个您可以用作唯一参考的UUID。 - recipient(转账接收方)- 转账接收方是您可以向其发送资金的受益人。要创建转账接收方,您需要先收集其详细信息。
- reason - 转账的原因。
- currency -(可选)默认为
NGN,但您可以指定您的货币。
<?php $transfers = [ "amount": "37800", "reference": "your-unique-reference", "recipient": "RCP_t0ya41mp35flk40", "reason": "Holiday Flexing" ];
- 每个请求都返回一个包含以下内容的对象响应
- 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 解决账户。
转账
单笔转账
要进行单次转账,您需要将这些参数作为数组提供
- 原因
- 金额
- 参考
- 接收人
默认情况下,currency 是 NGN。您可以通过将其添加到数组中覆盖默认货币。对于 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)。请参阅许可文件以获取更多信息。