{"id":30671532,"url":"https://github.com/programmerhasan/bkash","last_synced_at":"2026-05-15T12:07:00.254Z","repository":{"id":309671076,"uuid":"1037069289","full_name":"ProgrammerHasan/bkash","owner":"ProgrammerHasan","description":"Laravel package for seamless bKash payment gateway integration — supports Checkout (URL), Auth \u0026 Capture, Refund, and Search transactions with easy configuration, including automatic caching of grantToken for 1 hour to comply with bKash tokenized API rules.","archived":false,"fork":false,"pushed_at":"2025-08-14T14:38:53.000Z","size":39,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-12-16T02:56:07.238Z","etag":null,"topics":["bangladesh","bkash","bkash-payment-gateway","laravel","mobile-payment","php"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ProgrammerHasan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-08-13T02:51:05.000Z","updated_at":"2025-08-14T14:38:57.000Z","dependencies_parsed_at":"2025-08-13T07:23:27.837Z","dependency_job_id":null,"html_url":"https://github.com/ProgrammerHasan/bkash","commit_stats":null,"previous_names":["programmerhasan/bkash"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/ProgrammerHasan/bkash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProgrammerHasan%2Fbkash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProgrammerHasan%2Fbkash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProgrammerHasan%2Fbkash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProgrammerHasan%2Fbkash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ProgrammerHasan","download_url":"https://codeload.github.com/ProgrammerHasan/bkash/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ProgrammerHasan%2Fbkash/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33066161,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T11:35:32.926Z","status":"ssl_error","status_checked_at":"2026-05-15T11:35:31.362Z","response_time":103,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bangladesh","bkash","bkash-payment-gateway","laravel","mobile-payment","php"],"created_at":"2025-09-01T03:19:02.652Z","updated_at":"2026-05-15T12:07:00.242Z","avatar_url":"https://github.com/ProgrammerHasan.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BKash Payment Gateway for Laravel\n\nWelcome to the **bKash Laravel Package**!  \nThis package allows seamless integration with the bKash payment gateway in Laravel, making transactions quick and hassle-free.\n\nIt supports Checkout (URL), Auth \u0026 Capture, Refund, and Search Transactions with easy configuration.\nBuilt-in automatic grantToken caching (1 hour) ensures full compliance with the latest bKash Tokenized API rules and prevents account lock issues.\n\n---\n\n## ✨ Features\n- ⚡ **Clean and easy to integrate** with any Laravel project.\n- 🧪 Supports **sandbox and production mode** for Bkash payments.\n- 🔑 Supports **Auth \u0026 Capture** for tokenized payments.\n- ↩️ Supports **Refunds** and **Search Transactions**.\n- ⚙️ Built-in **automatic grantToken caching (1 hour)** to comply with bKash Tokenized API rules.\n- 💰 Enables creating, executing, and querying **payments** via Bkash API.\n- 📄 Provides **payment status verification** and transaction history.\n- 📝 Enables logging of Bkash payment activities in **sandbox mode only**.\n- 🛠️ Follows **Laravel conventions** for service providers and facades.\n- 🧩 Provides clean **helper methods** for easy integration into controllers and services.\n\n## 🛠️ Requirements\n- 🐘 **PHP:** ^7.4 | ^8.0 | ^8.1 | ^8.2\n- ⚡ **Laravel (illuminate/support):** ~6 | ~7 | ~8 | ~9 | ^10 | ^11 | ^12\n- 🌐 **cURL enabled** in PHP\n- 🔑 **bKash Merchant Account** (sandbox or production)\n\n## 📦 Installation\n\n```bash\ncomposer require programmerhasan/bkash\n```\n\n### ⚙️ Vendor publish (config)\n\n```bash\nphp artisan vendor:publish --provider=\"ProgrammerHasan\\Bkash\\BkashServiceProvider\" --tag=\"config\"\n```\nAfter publish config file setup your credential. you can see this in your config directory bkash.php file\n```\n\u003c?php\n\nreturn [\n    /*\n    |--------------------------------------------------------------------------\n    | Enable or Disable bKash Log\n    |--------------------------------------------------------------------------\n    | Logging is only recommended in sandbox/testing mode.\n    | In production, keep logging disabled to avoid exposing sensitive payment data.\n    | Logs will be saved in the /storage/logs/laravel.log file.\n    |\n    | Usage:\n    |   - Sandbox: BKASH_SANDBOX=true → logs enabled\n    |   - Production: BKASH_SANDBOX=false → logs disabled\n    */\n    \"bkash_log_enabled\" =\u003e env(\"BKASH_SANDBOX\", false),\n\n    \"bkash_sandbox\" =\u003e env(\"BKASH_SANDBOX\", false),\n    \"bkash_username\" =\u003e env(\"BKASH_USERNAME\"),\n    \"bkash_password\" =\u003e env(\"BKASH_PASSWORD\"),\n    \"bkash_app_key\" =\u003e env(\"BKASH_APP_KEY\"),\n    \"bkash_app_secret\" =\u003e env(\"BKASH_APP_SECRET\"),\n    \"bkash_base_url_sandbox\" =\u003e \"https://tokenized.sandbox.bka.sh/v1.2.0-beta/tokenized\",\n    \"bkash_base_url_production\" =\u003e \"https://tokenized.Pay.bka.sh/v1.2.0-beta/tokenized\",\n    \"bkash_callback_url\" =\u003e env(\"BKASH_CALLBACK_URL\", \"http://127.0.0.1:8000/bkash/callback\"),\n];\n```\n\n### 📝 Set .env configuration\nAdd your Bkash credentials and environment settings in the `.env` file:\n```bash\n BKASH_SANDBOX=true\n BKASH_USERNAME = ''\n BKASH_PASSWORD = ''\n BKASH_APP_KEY = ''\n BKASH_APP_SECRET = ''\n BKASH_CALLBACK_URL='Your defined Callback URl //default Callback Url =\u003e http://127.0.0.1:8000/bkash/callback'\n```\n### 📝 Enable or Disable bKash Log\nYou can turn bKash logging on or off. (Only sandbox/testing mode.)\n\nLogs will be saved in the /storage/logs/laravel.log file.\n\n```bash\n\"bkash_log_enabled\" =\u003e env(\"BKASH_SANDBOX\", false),\n```\n\n## 🚀 Usage\n### Publish a route\n\n```bash\nphp artisan vendor:publish --provider=\"ProgrammerHasan\\Bkash\\BkashServiceProvider\" --tag=\"routes\"\n```\n\"bkash.php\" Route include in web.php (require 'bkash2.php';)\n\n### Publish a controller\n\n```bash\nphp artisan vendor:publish --provider=\"ProgrammerHasan\\Bkash\\BkashServiceProvider\" --tag=\"controllers\"\n```\n### You can override the routes\n```\nRoute::group(['middleware' =\u003e ['web']], static function () {\n    // Payment routes for bKash\n    Route::get('/bkash/payment', [BkashPaymentController::class, 'index']);\n    Route::get('/bkash/create-payment', [BkashPaymentController::class, 'createPayment'])-\u003ename('bkash.payment.create');\n    Route::get('/bkash/callback', [BkashPaymentController::class, 'callBack'])-\u003ename('bkash.payment.callback');\n\n    Route::get(\"bkash/failed\", [BkashPaymentController::class, 'failed'])-\u003ename('bkash.payment.fail');\n    Route::get(\"bkash/success\", [BkashPaymentController::class, 'success'])-\u003ename('bkash.payment.success');\n\n    // Search payment\n    Route::get('/bkash/search/{trxID}', [BkashPaymentController::class, 'searchTnx'])-\u003ename('bkash.payment.search');\n\n    // Refund payment routes\n    Route::get('/bkash/refund', [BkashPaymentController::class, 'refund'])-\u003ename('bkash.payment.refund');\n    Route::get('/bkash/refund/status', [BkashPaymentController::class, 'refundStatus'])-\u003ename('bkash.payment.refund.status');\n});\n```\n\n### Use route('bkash.payment.create') in blade\n\n```\n\u003cform action=\"{{ route('bkash.payment.create') }}\" method=\"POST\"\u003e\n        @csrf\n        \u003cbutton type=\"submit\"\u003ePay with bkash\u003c/button\u003e\n    \u003c/form\u003e\n```\n\n## [Checkout (URL Based)](https://developer.bka.sh/docs/checkout-url-process-overview)\n\n### 1. Create Payment\n\n```\npublic function createPayment(Request $request)\n{\n    $request-\u003evalidate([\n        'payment_uid' =\u003e 'required',\n        'amount' =\u003e 'required',\n        'invoice_no' =\u003e 'required',\n    ]);\n        \n    $data = [\n        'payerReference' =\u003e $request-\u003eget('payment_uid'), // your payments table uid\n        'amount' =\u003e $request-\u003eget('amount'),\n        'merchantInvoiceNumber' =\u003e $request-\u003eget('invoice_no'),\n        'callbackURL' =\u003e $request-\u003eget('bkash_callback_url'), // optional\n    ];\n\n    $response = (array) BkashPayment::create($data);\n\n    if (isset($response['bkashURL'])) return redirect()-\u003eaway($response['bkashURL']);\n    else return redirect()-\u003eback()-\u003ewith('error-alert2', $response['statusMessage']);\n}\n```\n### Create payment response\n```\narray[\n  \"statusCode\" =\u003e \"0000\"\n  \"statusMessage\" =\u003e \"Successful\"\n  \"paymentID\" =\u003e \"Your payment id\"\n  \"bkashURL\" =\u003e \"https://sandbox.payment.bkash.com/redirect/tokenized/?paymentID=your_payment_id\u0026hash=your_hash\"\n  \"callbackURL\" =\u003e \"base_url/bkash/callback\"\n  \"successCallbackURL\" =\u003e \"base_url/bkash/callback?paymentID=your_payment_id\u0026status=success\"\n  \"failureCallbackURL\" =\u003e \"base_url/bkash/callback?paymentID=your_payment_id\u0026status=failure\"\n  \"cancelledCallbackURL\" =\u003e \"base_url/bkash/callback?paymentID=your_payment_id\u0026status=cancel\"\n  \"amount\" =\u003e \"100\"\n  \"intent\" =\u003e \"sale\"\n  \"currency\" =\u003e \"BDT\"\n  \"paymentCreateTime\" =\u003e \"2025-07-22T02:16:57:784 GMT+0600\"\n  \"transactionStatus\" =\u003e \"Initiated\"\n  \"merchantInvoiceNumber\" =\u003e \"merchant_invoice_no\"\n]\n```\n\n### 2. Add callback function\n\n```\npublic function callback(Request $request)\n{\n    // Callback request params\n    // paymentID=your_payment_id\u0026status=success\u0026apiVersion=1.2.0-beta\n    // using paymentID find the account number for sending params\n        \n    $status = $request-\u003einput('status');\n    $paymentId = $request-\u003einput('paymentID');\n\n    if ($status === 'success')\n    {\n        $response = BkashPayment::verify($paymentId);\n\n        if ($response-\u003estatusCode !== '0000')\n        {\n        return BkashPayment::failed($response-\u003estatusMessage);\n        }\n\n        if (isset($response-\u003etransactionStatus)\u0026\u0026($response-\u003etransactionStatus=='Completed'||$response-\u003etransactionStatus=='Authorized'))\n        {\n             //Database Insert Operation\n            return BkashPayment::success($response-\u003etrxID.\"({$response-\u003etransactionStatus})\");\n        }\n        else if($response-\u003etransactionStatus=='Initiated')\n        {\n            return BkashPayment::failed(\"Try Again\");\n        }\n    }\n\n    else\n    {\n      return BkashPayment::failed($status);\n    }\n}\n```\n### Execute payment response\n\n```\n{\n   \"statusCode\":\"0000\",\n   \"statusMessage\":\"Successful\",\n   \"paymentID\":\"your_payment_id\",\n   \"payerReference\":\"your_ref_id\",\n   \"customerMsisdn\":\"customer_msi\",\n   \"trxID\":\"your_tnx_id\",\n   \"amount\":\"100\",\n   \"transactionStatus\":\"Completed\",\n   \"paymentExecuteTime\":\"2023-01-23T02:04:05:736 GMT+0600\",\n   \"currency\":\"BDT\",\n   \"intent\":\"sale\"\n}\n```\n\n### Query payment response\n\n```\n{\n   \"paymentID\":\"your_payment_id\",\n   \"mode\":\"0011\",\n   \"paymentCreateTime\":\"2023-01-23T02:01:06:713 GMT+0600\",\n   \"paymentExecuteTime\":\"2023-01-23T02:04:05:736 GMT+0600\",\n   \"amount\":\"100\",\n   \"currency\":\"BDT\",\n   \"intent\":\"sale\",\n   \"merchantInvoice\":\"merchant_inv_no\",\n   \"trxID\":\"tnx_no\",\n   \"transactionStatus\":\"Completed\",\n   \"verificationStatus\":\"Complete\",\n   \"statusCode\":\"0000\",\n   \"statusMessage\":\"Successful\",\n   \"payerReference\":\"pay_ref\"\n}\n```\n### 3. Search Transaction\n```\npublic function searchTnx($trxID)\n{\n   return BkashPayment::searchTransaction($trxID);\n}\n```\n### Response\n```\n {\n   \"trxID\":\"tnx_no\",\n   \"initiationTime\":\"2023-01-23T12:06:05:000 GMT+0600\",\n   \"completedTime\":\"2023-01-23T12:06:05:000 GMT+0600\",\n   \"transactionType\":\"bKash Tokenized Checkout via API\",\n   \"customerMsisdn\":\"customer_msi\",\n   \"transactionStatus\":\"Completed\",\n   \"amount\":\"20\",\n   \"currency\":\"BDT\",\n   \"organizationShortCode\":\"og_short_code\",\n   \"statusCode\":\"0000\",\n   \"statusMessage\":\"Successful\"\n }\n```\n\n### 4. Refund Transaction\n\n```\npublic function refund(Request $request)\n{\n    $paymentID = 'Your payment id';\n    $trxID = 'your transaction no';\n    $amount = 5;\n    $reason = 'this is test reason';\n    $sku = 'abc';\n    return BkashPayment::refund($paymentID, $trxID, $amount, $reason, $sku);\n}\n```\n### Response\n```\n {\n    \"statusCode\":\"0000\",\n    \"statusMessage\":\"Successful\",\n    \"originalTrxID\":\"or_tnx_no\",\n    \"refundTrxID\":\"refund_tnx\",\n    \"transactionStatus\":\"Completed\",\n    \"amount\":\"5\",\n    \"currency\":\"BDT\",\n    \"charge\":\"0.00\",\n    \"completedTime\":\"2023-01-23T15:53:29:120 GMT+0600\"\n }\n```\n### 5. Refund status check\n```\npublic function refundStatus(Request $request)\n{\n    $paymentID = 'Your payment id';\n    $trxID = 'your transaction no';\n    return BkashPayment::refundStatus($paymentID, $trxID);\n}\n```\n### Response\n```\n{\n    \"statusCode\":\"0000\",\n    \"statusMessage\":\"Successful\",\n    \"originalTrxID\":\"ori_tx\",\n    \"refundTrxID\":\"ref_tx\",\n    \"transactionStatus\":\"Completed\",\n    \"amount\":\"5\",\n    \"currency\":\"BDT\",\n    \"charge\":\"0.00\",\n    \"completedTime\":\"2023-01-23T15:53:29:120 GMT+0600\"\n}\n```\n\n## [Auth \u0026 Capture (URL)](https://developer.bka.sh/docs/auth-capture-process-overview)\n\n### Create Payment\n\n```\n$request['payerReference'] = $paymentUid;\n$request['amount'] = $amount;\n$request['merchantInvoiceNumber'] = $paymentUid;\n$request['callbackURL'] = $onBkashCallbackURL;\n\n$response = BkashPayment::create($request);\nreturn redirect($response-\u003ebkashURL);\n```\n\n### [Capture](https://developer.bka.sh/docs/auth-capture-process-overview)\n\n```\nBkashPayment::capture($paymentID);\n```\n\n### [Void](https://developer.bka.sh/docs/void)\n\n```\nBkashPayment::void($paymentID);\n```\n\n---\n\n### Required APIs\n0. **Developer Portal** (detail Product, workflow, API information): https://developer.bka.sh/docs/checkout-process-overview\n1. **Grant Token :** https://developer.bka.sh/v1.2.0-beta/reference#gettokenusingpost\n2. **Create Payment :** https://developer.bka.sh/v1.2.0-beta/reference#createpaymentusingpost\n3. **Execute Payment :** https://developer.bka.sh/v1.2.0-beta/reference#executepaymentusingpost\n4. **Query Payment :** https://developer.bka.sh/v1.2.0-beta/reference#querypaymentusingget\n5. **Search Transaction Details :** https://developer.bka.sh/v1.2.0-beta/reference#searchtransactionusingget\n\n### Tokenized Checkout (v2) Demo\n0. Bkash: https://merchantdemo.sandbox.bka.sh/\n1. Go to https://merchantdemo.sandbox.bka.sh/tokenized-checkout/version/v2\n2. **Wallet Number:** 01770618575\n3. **OTP:** 123456\n4. **Pin:** 12121\n\n## License\n\nThis repository is licensed under the [MIT License](http://opensource.org/licenses/MIT).\n\nCopyright 2025 [ProgrammerHasan](https://github.com/ProgrammerHasan). ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprogrammerhasan%2Fbkash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprogrammerhasan%2Fbkash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprogrammerhasan%2Fbkash/lists"}