karim007 / laravel-bkash-tokenize
这是为 Laravel 开发的 bKash tokenize 支付网关
v2.3
2024-06-02 05:59 UTC
Requires
- php: ^7.4|^8.0|^8.1|^8.2
- ext-curl: *
README
特性
这是一个为 Bkash 开发的 php/laravel 封装包
要求
- PHP >=7.4
- Laravel >= 6
安装
composer require karim007/laravel-bkash-tokenize
示例
点击下面的图片或 https://youtu.be/xue4EP5et58 查看视频教程
发布到 vendor(配置)
php artisan vendor:publish --provider="Karim007\LaravelBkashTokenize\BkashTokenizeServiceProvider" --tag="config"
发布配置文件后,设置您的凭证。您可以在 config 目录中的 bkash.php 文件中看到它
"sandbox" => env("BKASH_SANDBOX", true),
"bkash_app_key" => env("BKASH_APP_KEY", ""),
"bkash_app_secret" => env("BKASH_APP_SECRET", ""),
"bkash_username" => env("BKASH_USERNAME", ""),
"bkash_password" => env("BKASH_PASSWORD", ""),
"bkash_app_key_2" => env("BKASH_APP_KEY_2", ""),
"bkash_app_secret_2" => env("BKASH_APP_SECRET_2", ""),
"bkash_username_2" => env("BKASH_USERNAME_2", ""),
"bkash_password_2" => env("BKASH_PASSWORD_2", ""),
//so on ...
"callbackURL" => env("BKASH_CALLBACK_URL", "http://127.0.0.1:8000/bkash/callback"),
'timezone' => 'Asia/Dhaka',
设置 .env 配置
BKASH_SANDBOX=true #for production use false
BKASH_APP_KEY=""
BKASH_APP_SECRET=""
BKASH_USERNAME=""
BKASH_PASSWORD=""
#for multi account
BKASH_APP_KEY_2=""
BKASH_APP_SECRET_2=""
BKASH_USERNAME_2=""
BKASH_PASSWORD_2=""
#so on just use _number likes _3, _4, _5
BKASH_CALLBACK_URL=""
用法
1. 发布控制器
php artisan vendor:publish --provider="Karim007\LaravelBkashTokenize\BkashTokenizeServiceProvider" --tag="controllers"
2. 您可以覆盖路由
Route::group(['middleware' => ['web']], function () { // Payment Routes for bKash Route::get('/bkash/payment', [App\Http\Controllers\BkashTokenizePaymentController::class,'index']); Route::get('/bkash/create-payment', [App\Http\Controllers\BkashTokenizePaymentController::class,'createPayment'])->name('bkash-create-payment'); Route::get('/bkash/callback', [App\Http\Controllers\BkashTokenizePaymentController::class,'callBack'])->name('bkash-callBack'); //search payment Route::get('/bkash/search/{trxID}', [App\Http\Controllers\BkashTokenizePaymentController::class,'searchTnx'])->name('bkash-serach'); //refund payment routes Route::get('/bkash/refund', [App\Http\Controllers\BkashTokenizePaymentController::class,'refund'])->name('bkash-refund'); Route::get('/bkash/refund/status', [App\Http\Controllers\BkashTokenizePaymentController::class,'refundStatus'])->name('bkash-refund-status'); });
3. 支付页面
您可以在 App\Http\Controllers\BkashTokenizePaymentController 中找到它
public function index()
{
return view('bkashT::bkash-payment');
}
4. 创建支付
public function createPayment(Request $request) { $inv = uniqid(); $request['intent'] = 'sale'; $request['mode'] = '0011'; $request['payerReference'] = $inv; $request['currency'] = 'BDT'; $request['amount'] = 100; $request['merchantInvoiceNumber'] = $inv; $request['callbackURL'] = config("bkash.callbackURL");; $request_data_json = json_encode($request->all()); $response = BkashPaymentTokenize::cPayment($request_data_json); //$response = BkashPaymentTokenize::cPayment($request_data_json,1); //last parameter is your account number for multi account its like, 1,2,3,4,cont.. default param is 1 //store paymentID and your account number for matching in callback request // dd($response) //if you are using sandbox and not submit info to bkash use it for 1 response if (isset($response['bkashURL'])) return redirect()->away($response['bkashURL']); else return redirect()->back()->with('error-alert2', $response['statusMessage']); }
###创建支付响应
array[
"statusCode" => "0000"
"statusMessage" => "Successful"
"paymentID" => "Your payment id"
"bkashURL" => "https://sandbox.payment.bkash.com/redirect/tokenized/?paymentID=your_payment_id&hash=your_hash"
"callbackURL" => "base_url/bkash/callback"
"successCallbackURL" => "base_url/bkash/callback?paymentID=your_payment_id&status=success"
"failureCallbackURL" => "base_url/bkash/callback?paymentID=your_payment_id&status=failure"
"cancelledCallbackURL" => "base_url/bkash/callback?paymentID=your_payment_id&status=cancel"
"amount" => "100"
"intent" => "sale"
"currency" => "BDT"
"paymentCreateTime" => "2023-01-23T02:16:57:784 GMT+0600"
"transactionStatus" => "Initiated"
"merchantInvoiceNumber" => "merchant_invoice_no"
]
5. 回调函数
public function callBack(Request $request) { //callback request params // paymentID=your_payment_id&status=success&apiVersion=1.2.0-beta //using paymentID find the account number for sending params if ($request->status == 'success'){ $response = BkashPaymentTokenize::executePayment($request->paymentID); //$response = BkashPaymentTokenize::executePayment($request->paymentID, 1); //last parameter is your account number for multi account its like, 1,2,3,4,cont.. if (!$response){ $response = BkashPaymentTokenize::queryPayment($request->paymentID); //$response = BkashPaymentTokenize::queryPayment($request->paymentID,1); //last parameter is your account number for multi account its like, 1,2,3,4,cont.. } if (isset($response['statusCode']) && $response['statusCode'] == "0000" && $response['transactionStatus'] == "Completed") { /* * for refund need to store * paymentID and trxID * */ return BkashPaymentTokenize::success('Thank you for your payment', $response['trxID']); } return BkashPaymentTokenize::failure($response['statusMessage']); }else if ($request->status == 'cancel'){ return BkashPaymentTokenize::cancel('Your payment is canceled'); }else{ return BkashPaymentTokenize::failure('Your transaction is failed'); } }
5. 执行支付响应
{ "statusCode":"0000", "statusMessage":"Successful", "paymentID":"your_payment_id", "payerReference":"your_ref_id", "customerMsisdn":"customer_msi", "trxID":"your_tnx_id", "amount":"100", "transactionStatus":"Completed", "paymentExecuteTime":"2023-01-23T02:04:05:736 GMT+0600", "currency":"BDT", "intent":"sale" }
6. 查询支付响应
{ "paymentID":"your_payment_id", "mode":"0011", "paymentCreateTime":"2023-01-23T02:01:06:713 GMT+0600", "paymentExecuteTime":"2023-01-23T02:04:05:736 GMT+0600", "amount":"100", "currency":"BDT", "intent":"sale", "merchantInvoice":"merchant_inv_no", "trxID":"tnx_no", "transactionStatus":"Completed", "verificationStatus":"Complete", "statusCode":"0000", "statusMessage":"Successful", "payerReference":"pay_ref" }
7. 搜索交易
public function searchTnx($trxID) { //response /*{ "trxID":"tnx_no", "initiationTime":"2023-01-23T12:06:05:000 GMT+0600", "completedTime":"2023-01-23T12:06:05:000 GMT+0600", "transactionType":"bKash Tokenized Checkout via API", "customerMsisdn":"customer_msi", "transactionStatus":"Completed", "amount":"20", "currency":"BDT", "organizationShortCode":"og_short_code", "statusCode":"0000", "statusMessage":"Successful" }*/ return BkashPaymentTokenize::searchTransaction($trxID); //return BkashPaymentTokenize::searchTransaction($trxID,1); //last parameter is your account number for multi account its like, 1,2,3,4,cont.. }
8. 退款交易
public function refund(Request $request) { $paymentID='paymentID'; $trxID='trxID'; $amount=5; $reason='this is test reason'; $sku='abc'; //response /*{ "statusCode":"0000", "statusMessage":"Successful", "originalTrxID":"or_tnx_no", "refundTrxID":"refund_tnx", "transactionStatus":"Completed", "amount":"5", "currency":"BDT", "charge":"0.00", "completedTime":"2023-01-23T15:53:29:120 GMT+0600" }*/ return BkashRefundTokenize::refund($paymentID,$trxID,$amount,$reason,$sku); //return BkashRefundTokenize::refund($paymentID,$trxID,$amount,$reason,$sku, 1); //last parameter is your account number for multi account its like, 1,2,3,4,cont.. }
9. 退款状态检查
public function refundStatus(Request $request) { $paymentID='paymentID'; $trxID='trxID'; /*{ "statusCode":"0000", "statusMessage":"Successful", "originalTrxID":"ori_tx", "refundTrxID":"ref_tx", "transactionStatus":"Completed", "amount":"5", "currency":"BDT", "charge":"0.00", "completedTime":"2023-01-23T15:53:29:120 GMT+0600" }*/ return BkashRefundTokenize::refundStatus($paymentID,$trxID); //return BkashRefundTokenize::refundStatus($paymentID,$trxID, 1); //last parameter is your account number for multi account its like, 1,2,3,4,cont.. }
注意:如果您使用单个账户,不需要考虑账户参数,忽略它,只需像平常一样使用即可
必需的 API
- 开发者门户(详细产品、工作流程、API 信息):https://developer.bka.sh/docs/checkout-process-overview
- 授权令牌: https://developer.bka.sh/v1.2.0-beta/reference#gettokenusingpost
- 创建支付: https://developer.bka.sh/v1.2.0-beta/reference#createpaymentusingpost
- 执行支付: https://developer.bka.sh/v1.2.0-beta/reference#executepaymentusingpost
- 查询支付: https://developer.bka.sh/v1.2.0-beta/reference#querypaymentusingget
- 搜索交易详情: https://developer.bka.sh/v1.2.0-beta/reference#searchtransactionusingget
查看演示
- 前往 https://merchantdemo.sandbox.bka.sh/frontend/checkout/version/1.2.0-beta
- 钱包号码 01770618575
- OTP 123456
- PIN 12121
欢迎为 Bkash 支付网关包做出贡献。在提交您的 pull request 之前,请注意以下指南。
- 遵循 PSR-4 编码标准。
- 首先阅读 bkash API 文档。请联系 bkash 以获取其 API 文档和沙盒访问权限。
许可证
此存储库受 MIT 许可证 的许可。
版权 2022 md abdul karim。我们与 bkash 无关,不提供任何保证。