divergent / bkash
bKash支付网关用于Laravel。
This package is auto-updated.
Last update: 2024-09-05 13:02:58 UTC
README
安装与配置
进入项目目录并打开终端。然后运行以下命令
composer require divergent/bkash
对于低于5.5版本的Laravel,打开config/app文件并在providers
数组中添加以下行
如果你使用的是大于5.5版本的Laravel,则跳过此部分
Divergent\Bkash\BkashServiceProvider::class,
然后在命令行/终端中运行以下命令
php artisan vendor:publish --provider="Divergent\Bkash\BkashServiceProvider"
成功发布后,更新你的.env文件。以下是一个示例ENV文件。
你还会看到位于config
文件夹中的bkash.php
文件。在成功发布后,以下内容将出现在bkash.php
文件中。
return [
'intent' => env('BKASH_INTENT', 'sale'),
'checkout' => [
'sandbox' => env('BKASH_CHECKOUT_SANDBOX', 'true'),
'version' => env('BKASH_CHECKOUT_VERSION', 'v1.2.0-beta'),
'app_key' => env('BKASH_CHECKOUT_APP_KEY', ''),
'app_secret' => env('BKASH_CHECKOUT_APP_SECRET', ''),
'username' => env('BKASH_CHECKOUT_USER_NAME', ''),
'password' => env('BKASH_CHECKOUT_PASSWORD', ''),
'sandbox_script' => env('BKASH_CHECKOUT_SANDBOX_SCRIPT', ''),
'production_script' => env('BKASH_CHECKOUT_PRODUCTION_SCRIPT', ''),
],
'tokenized' => [
'sandbox' => env('BKASH_TOKENIZED_SANDBOX', 'true'),
'version' => env('BKASH_TOKENIZED_VERSION', 'v1.2.0-beta'),
'app_key' => env('BKASH_TOKENIZED_APP_KEY', ''),
'app_secret' => env('BKASH_TOKENIZED_APP_SECRET', ''),
'username' => env('BKASH_TOKENIZED_USER_NAME', ''),
'password' => env('BKASH_TOKENIZED_PASSWORD', ''),
'call_back_url' => env('BKASH_TOKENIZED_CALL_BACK_URL', '')
],
'recurring' => [
'merchant_short_code' => env('BKASH_RECURRING_MERCHANT_SHORT_CODE'),
'api_key' => env('BKASH_RECURRING_API_KEY', ''),
'redirect_url' => env('BKASH_RECURRING_REDIRECT_URL', ''),
'version' => env('BKASH_RECURRING_VERSION', ''),
'channelId' => env('BKASH_CHANNEL_ID_VERSION', ''),
'amountQueryUrl' => env('BKASH_AMOUNT_QUERY_URL', null),
'serviceId' => env('BKASH_RECURRING_SERVICE_ID', ''),
'maxCapAmount' => env('BKASH_RECURRING_MAX_CAP_AMOUNT', null),
'maxCapRequired' => env('BKASH_RECURRING_MAX_CAP_REQUIRED', false),
'payer' => env('BKASH_RECURRING_PAYER', null),
'payerType' => env('BKASH_RECURRING_PAYER_TYPE', 'CUSTOMER'),
'paymentType' => env('BKASH_RECURRING_PAYMENT_TYPE', 'FIXED'),
]
];
最后,只需运行以下命令
php artisan migrate
此命令将生成一些必要的数据库表,使商家能够更有效地使用此包。
注意:你可以向这些表中添加或删除任何字段(如果有需要)。
使用方法
结账
标记化
周期性
Webhook
结账支付
调用Checkout Payment
方法之前,首先需要创建CheckoutApi
类的实例。
别忘了在文件顶部导入use Divergent\Bkash\Apis\Checkout\CheckoutApi;
注意:配置将来自你在.env文件中之前设置的配置。请记住,你需要设置用于授权的令牌。
$checkout = new CheckoutApi();
//you can get token by calling getToken() method.
$token = $checkout->getToken();
//you can set token by calling setToken() method.
$checkout->setToken($token['token']);
创建支付(销售或捕获)
$amount = 'your product amount';
$invoice_no = 'any unique number used in marchant side';
$intent = env('BKASH_INTENT'); //intent will be 'sale' or 'authorization' which you have defined in .env file.
$checkout->create($amount, $invoice_no, $intent);
$merchantAssociationInfo
是可选字段。默认的$currency
是BDT
。
执行支付
$checkout->execute($paymentID);
你将从创建支付中获取$paymentID
。
查询支付
$checkout->queryPayment($paymentID);
你将从执行支付中获取$paymentID
。
捕获支付
$checkout->capture($paymentID);
你将从执行支付中获取$paymentID
。
注意:Capture Payment
将用于具有authorization
意图的支付。
取消支付
$checkout->void($paymentID);
你将从执行支付中获取$paymentID
。
注意:Void Payment
将用于具有authorization
意图的支付。
结账支付出
结账B2C支付出
$amount = 'payout amount';
$merchantInvoiceNumber = 'any unique number used in marchant side';
$receiverMSISDN = 'receiver wallet number';
$checkout->b2cPayment($amount, $merchantInvoiceNumber, $receiverMSISDN);
结账B2B支付出
$amount = 'payout amount';
$merchantInvoiceNumber = 'any unique number used in marchant side';
$receiverMSISDN = 'receiver wallet number';
$initPayout = $checkout->initiatPayout();
$payoutID = $initPayout['payoutID'];
$checkout->b2bPayout($payoutID, $amount, $merchantInvoiceNumber, $receiverMSISDN);
首先,你必须调用initiatPayout
方法,这将返回一个payoutID
。然后你可以调用b2bPayout
来执行B2B支付。
结账B2B查询支付出
$checkout->queryPayout($payoutID);
你将从结账B2B支付出中获取$payoutID
。
结账支持的操作
搜索交易
$checkout->searchTransaction($trxID);
你将从执行支付中获取$trxID
。
查询组织余额
$checkout->queryOrgBalance();
账户间转账
$amount = 'amount to transfer';
$transferType = 'transfer type'; //It can be either 'Collection2Disbursement' or 'Disbursement2Collection'.
$checkout->intraAccountTransfer($amount, $transferType);
结账退款
退款交易
$paymentID = 'payment ID';
$amount = 'refund amount';
$trxID = 'transaction ID';
$sku = 'product unique code';
$reason = 'reason for refund';
$checkout->refundTransaction($paymentID, $amount, $trxID, $sku, $reason);
$sku
和$reason
是可选字段。你将从执行支付中获取$paymentID
和$trxID
。
退款状态
$checkout->refundStatus($paymentID, $trxID);
你将从执行支付中获取$paymentID
和$trxID
。
标记化协议
调用Tokenized Agreement
方法之前,首先需要创建TokenizedApi
类的实例。
别忘了在文件顶部导入use Divergent\Bkash\Apis\Tokenized\TokenizedApi;
注意:配置将来自你在.env文件中之前设置的配置。请记住,你需要设置用于授权的令牌。
$tokenized = new TokenizedApi();
//you can get token by calling getToken() method.
$token = $tokenized->getToken();
//you can set token by calling setToken() method.
$tokenized->setToken($token['token']);
创建协议
$payerReference = 'any related reference value';
$tokenized->createAgreement(BkashConstant::CREATE_AGREEMENT, $payerReference);
要创建协议,首先需要传递BkashConstant::CREATE_AGREEMENT
参数,它允许回调URL知道要重定向到哪个页面。以下是可能的常量列表及其定义,以便更好地理解——
Bkash常量定义
BkashConstant::CREATE_AGREEMENT
- 用于创建协议。BkashConstant::WITHOUT_AGREEMENT_PAYMENT
- 用于不使用协议进行支付。BkashConstant::WITH_AGREEMENT_PAYMENT
- 用于使用协议进行支付。BkashConstant::PAYMENT
- 用于仅创建支付。
注意:**商户方必须维护数据库表以了解用户是否已创建协议。**
执行协议
$tokenized->executeAgreement($paymentID);
您将从创建协议中获取$paymentID
。
协议状态
$tokenized->status($agreementID);
您将从创建协议中获取$agreementID
。
协议取消
$tokenized->cancel($agreementID);
您将从创建协议中获取$agreementID
。
令牌化支付
令牌化创建支付(销售或捕获)
$intent = 'sale or authorization'; //better to get data from ENV.
$payerReference = 'any related reference value';
$amount = 'your product amount';
$invoice_no = 'any unique number used in marchant side';
//create payment with agreement
$tokenized->createAgreement(BkashConstant::WITH_AGREEMENT_PAYMENT, $payerReference, $amount, $invoice_no, '');
//create payment without agreement
$tokenized->create($intent, BkashConstant::WITHOUT_AGREEMENT_PAYMENT, $payerReference, $amount, $invoice_no, '');
要创建支付,首先需要传递BkashConstant::PAYMENT
参数,它允许回调URL知道要重定向到哪个页面。此常量还定义您将要调用的操作。您可以在此处了解更多信息这里。您将从创建协议中获取$agreementID
。$merchantAssociationInfo
是可选字段。默认$currency
是**BDT**。
令牌化执行支付
$tokenized->execute($paymentID);
您将从创建支付中获取$paymentID
。
令牌化查询支付
$tokenized->queryPayment($paymentID);
您将从执行支付中获取$paymentID
。
令牌化捕获支付
$tokenized->capture($paymentID);
您将从执行支付中获取$paymentID
注意:**令牌化捕获支付**将用于带有**授权**意图的支付。
令牌化取消支付
$tokenized->void($paymentID);
您将从执行支付中获取$paymentID
注意:**令牌化取消支付**将用于带有**授权**意图的支付。
令牌化支付
令牌化账户间转账
$amount = 'amount to transfer';
$transferType = 'transfer type'; //It can be either 'Collection2Disbursement' or 'Disbursement2Collection'.
$initPayout = $tokenized->initiatePayout("INTRA");
$payoutID = $initPayout['payoutID'];
$tokenized->intraAccountTransfer($amount, $transferType);
令牌化B2C支付
$amount = 'payout amount';
$merchantInvoiceNumber = 'any unique number used in marchant side';
$receiverMSISDN = 'receiver wallet number';
$initPayout = $tokenized->initiatPayout("B2C");
$payoutID = $initPayout['payoutID'];
$tokenized->b2cPayout($payoutID, $amount, $merchantInvoiceNumber, $receiverMSISDN);
令牌化B2B支付
$amount = 'payout amount';
$merchantInvoiceNumber = 'any unique number used in marchant side';
$receiverMSISDN = 'receiver wallet number';
$initPayout = $tokenized->initiatPayout("B2B");
$payoutID = $initPayout['payoutID'];
$tokenized->b2bPayout($payoutID, $amount, $merchantInvoiceNumber, $receiverMSISDN);
首先,你必须调用initiatPayout
方法,这将返回一个payoutID
。然后你可以调用b2bPayout
来执行B2B支付。
令牌化B2B查询支付
$tokenized->queryPayout($payoutID);
您将从令牌化B2B支付中获取$payoutID
。
令牌化退款
退款交易
$paymentID = 'payment ID';
$amount = 'refund amount';
$trxID = 'transaction ID';
$sku = 'product unique code';
$reason = 'reason for refund';
$tokenized->refundTransaction($paymentID, $amount, $trxID, $sku, $reason);
$sku
和$reason
是可选字段。您将从执行支付中获取$paymentID
和$trxID
。
退款状态
$tokenized->refundStatus($paymentID, $trxID);
您将从执行支付中获取$paymentID
和$trxID
。
周期性订阅
要调用**周期性订阅**方法,首先需要创建**Subscription**类的实例。
别忘了在文件顶部导入use Divergent\Bkash\Apis\Recurring\Subscription;
。
注意:配置将从前面的**.env**文件中获取。
$subscription = new Subscription();
创建订阅
$data = [
"subscriptionRequestId" => "System generated unique id",
"serviceId" => "Provided by bKash",
"paymentType" => "FIXED",
"subscriptionType" => "BASIC - indicates only scheduled payment and WITH_PAYMENT - indicates a mandatory immediate payment for subscription creation",
"amountQueryUrl" => null,
"amount" => "Amount that will be recurrently paid",
"firstPaymentAmount" => "Amount needs to be paid when subscription is created for the first time",
"currency" => "BDT",
"firstPaymentIncludedInCycle" => "If subscription has first payment during registration",
"maxCapAmount" => "Maximum value of a payment",
"maxCapRequired" => false,
"frequency" => "Cycles for each subscriptions",
"startDate" => "From this date, payment deduction will take place",
"expiryDate" => "After this date, no payment will take place",
"payerType" => " Whether it is Customer or any partner organization",
"payer" => "Wallet ID of a customer",
"subscriptionReference" => "subscription reference shared by merchant",
"extraParams" => "Optional parameter if needed (should be key value pair)",
"redirectUrl" => "fetch from env file",
"merchantShortCode" => "fetch from env file"
];
$subscription->create($data);
以下列出了可用的周期性周期——
DAILY
WEEKLY
FIFTEEN_DAYS
THIRTY_DAYS
NINETY_DAYS
ONE_EIGHTY_DAYS
CALENDAR_MONTH
CALENDAR_YEAR
通过请求ID查询订阅
$subscription->queryBySubscriptionRequestID($requestId);
您将从创建订阅中获取$requestId
。
通过订阅ID查询订阅
$subscription->queryBySubscriptionID($subscriptionID);
您将从通过请求ID查询订阅中获取$subscriptionID
。
取消订阅
$subscription->cancelSubscription($subscriptionID, $reason);
您将从通过请求ID查询订阅中获取$subscriptionID
。**$reason**是可选值,包含字符串值。
订阅列表
$subscription->subscriptionList($page, $size);
$page
表示您想要查看的订阅列表的起始页面,$size
表示您想要显示的行数。
周期性付款
在调用 周期性付款 方法之前,您首先需要创建 Payment 类的实例。
请别忘了在文件顶部导入 use Divergent\Bkash\Apis\Recurring\Payment;
。
注意:配置将从前面的**.env**文件中获取。
$payment = new Payment();
按订阅ID获取付款列表
$payment->paymentListBySubscriptionID($subscriptionID);
您将从通过请求ID查询订阅中获取$subscriptionID
。
按付款ID获取付款信息
$payment->paymentInfoByPaymentID($paymentId);
您可以从 按订阅ID获取付款列表 获取 $paymentId
。
付款计划
$payment->schedule($frequency, $startDate, $expiryDate);
$frequency
定义了每个订阅的周期。以下是可用的周期性周期:
DAILY
WEEKLY
FIFTEEN_DAYS
THIRTY_DAYS
NINETY_DAYS
ONE_EIGHTY_DAYS
CALENDAR_MONTH
CALENDAR_YEAR
$startDate
和 $expiryDate
表示付款计划的有效期,即付款的起始和结束日期。
付款退款
$payment->refund($paymentId, $amount);
您可以从 按订阅ID获取付款列表 获取 $paymentId
。要退款的金额为 $amount
。
Webhook
要将 webhook 集成到您的网站中,您需要创建 两个 URL(路由)。
- 通用 webhook URL
- 周期性 webhook URL
一个用于接收来自 结账、令牌化 操作的通知,另一个用于 周期性 产品。
在调用 Webhook 方法之前,您首先需要创建 Webhook 类的实例。
请别忘了在文件顶部导入 use Divergent\Bkash\Apis\Webhook\Webhook;
。
$webhook = new Webhook();
通用Webhook
$webhook->processWebhookRequest();
周期性Webhook
$webhook->processRecurringWebhookRequest();
如果您在阅读此文档时发现实施过程中存在复杂性,请不要担心。这里 是一个示例项目。您可以自由使用此代码。❤️
支持
此版本支持 Laravel 5.0 或更高版本。
- 如有任何问题,请在 问题 部分创建一个问题。
- 您可以通过电子邮件
laravelpgw.support@bkash.com
获取支持。