itsrafsanjani/laravel-bkash

Bkash支付网关的Laravel插件

1.0.0 2023-09-21 15:57 UTC

This package is auto-updated.

Last update: 2024-09-08 21:33:03 UTC


README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

Laravel Bkash是一个为Bkash支付网关设计的Laravel插件。它使用了Bkash的Token化API。

安装

您可以通过composer安装此包

composer require itsrafsanjani/laravel-bkash

您可以使用以下命令发布配置文件

php artisan vendor:publish --tag="laravel-bkash-config"

这是发布后的配置文件内容

return [
    'sandbox' => env('BKASH_SANDBOX', true), // true for testing, false for production

    'app_key' => env('BKASH_APP_KEY', ''),
    'app_secret' => env('BKASH_APP_SECRET', ''),
    'username' => env('BKASH_USERNAME', ''),
    'password' => env('BKASH_PASSWORD', ''),

    // bkash will send data to this url
    'callbackURL' => env('BKASH_CALLBACK_URL', 'http://127.0.0.1:8000/bkash/callback'),
    'timezone' => 'Asia/Dhaka',
];

配置

  • 设置.env
# true for testing, false for production
BKASH_SANDBOX=true
BKASH_APP_KEY=
BKASH_APP_SECRET=
BKASH_USERNAME=
BKASH_PASSWORD=
# bkash will send data to this url
BKASH_CALLBACK_URL=http://127.0.0.1:8000/bkash/callback
  • routes/web.php中为bkash创建路由
Route::get('/bkash/callback', [PaymentController::class, 'callback']);
  • app\Http\Middleware\VerifyCsrfToken.php中添加异常处理
protected $except = [
    'bkash/*',
];

使用方法

支付和回调(控制器示例代码)

use Illuminate\Http\Request;
use ItsRafsanJani\Bkash\Data\CreatePaymentData;
use ItsRafsanJani\Bkash\Facades\Bkash;

class PaymentController extends Controller
{
    public function pay()
    {
        // ..
        // save payment related data in your database or anything
        // ..

        $invoiceId = uniqid(); // could be any string

        $response = Bkash::createPayment(
            new CreatePaymentData(
                amount: 20.50,
                payerReference: $invoiceId,
            )
        );

        // dd($response);

        return redirect()->away($response->bkashURL);
    }

    public function callback(Request $request)
    {
        // first you need to execute
        $executeResponse = Bkash::executePayment($request->paymentID);

        // then query
        $queryResponse =  Bkash::queryPayment($request->paymentID);
        
        // ..
        // update payment status
        // ..
    }
}

可用方法和响应

创建支付

$invoiceId = uniqid(); // could be any string

$response = Bkash::createPayment(
    new CreatePaymentData(
        amount: 20.50,
        payerReference: $invoiceId,
    )
);

return response()->json($response);

示例响应

{
    "statusCode": "0000",
    "statusMessage": "Successful",
    "paymentID": "TR0011J9EMqSy16948652*****",
    "bkashURL": "https://sandbox.payment.bkash.com/redirect/tokenized/?paymentID=TR0011J9EMqSy16948652*****&hash=4kRP(RZBQ8Xn15a_0x4gW79V0EUZoaJJJv!UJmd10(s1Cl3ciz8aolIOsQ!3vlOno*vkq3jO-76BCoN7f4c8Zfykw1vaPsarABG21694865217269&mode=0011&apiVersion=v1.2.0-beta",
    "callbackURL": "https://:8000/api/bkash-callback",
    "successCallbackURL": "https://:8000/api/bkash-callback?paymentID=TR0011J9EMqSy16948652*****&status=success",
    "failureCallbackURL": "https://:8000/api/bkash-callback?paymentID=TR0011J9EMqSy16948652*****&status=failure",
    "cancelledCallbackURL": "https://:8000/api/bkash-callback?paymentID=TR0011J9EMqSy16948652*****&status=cancel",
    "amount": "10",
    "intent": "sale",
    "currency": "BDT",
    "paymentCreateTime": "2023-09-16T17:53:37:268 GMT+0600",
    "transactionStatus": "Initiated",
    "merchantInvoiceNumber": "65059731*****"
}

执行支付

$response = Bkash::executePayment($request->paymentID);

return response()->json($response);

示例响应

{
  "statusCode": "0000",
  "statusMessage": "Successful",
  "paymentID": "TR0011f0CE1zl16944532*****",
  "payerReference": "64ff4dd*****",
  "customerMsisdn": "018777*****",
  "trxID": "AIB10*****",
  "amount": "10",
  "transactionStatus": "Completed",
  "paymentExecuteTime": "2023-09-11T23:31:24:581 GMT+0600",
  "currency": "BDT",
  "intent": "sale",
  "merchantInvoiceNumber": "64ff4dd6*****"
}

查询支付

$response =  Bkash::queryPayment($request->paymentID);

return response()->json($response);

示例响应

{
  "paymentID": "TR0011f0CE1zl16944532*****",
  "mode": "0011",
  "paymentCreateTime": "2023-09-11T23:26:49:676 GMT+0600",
  "paymentExecuteTime": "2023-09-11T23:31:24:581 GMT+0600",
  "amount": "10",
  "currency": "BDT",
  "intent": "sale",
  "merchantInvoice": "64ff4dd6*****",
  "trxID": "AIB10DO2ON",
  "transactionStatus": "Completed",
  "verificationStatus": "Complete",
  "statusCode": "0000",
  "statusMessage": "Successful",
  "payerReference": "64ff4dd*****"
}

搜索交易

$searchTransactionResponse = Bkash::searchTransaction($response['trxID']);

return response()->json($searchTransactionResponse);

示例响应

{
  "trxID": "AIB10*****",
  "initiationTime": "2023-09-11T23:31:22:000 GMT+0600",
  "completedTime": "2023-09-11T23:31:22:000 GMT+0600",
  "transactionType": "bKash Tokenized Checkout via API",
  "customerMsisdn": "018777*****",
  "transactionStatus": "Completed",
  "amount": "10",
  "currency": "BDT",
  "organizationShortCode": "50***",
  "statusCode": "0000",
  "statusMessage": "Successful"
}

测试

./vendor/bin/pest

更新日志

请参阅更新日志以获取最近更改的更多信息。

贡献

请参阅贡献指南以获取详细信息。

安全漏洞

请查看我们的安全策略了解如何报告安全漏洞。

致谢

许可协议

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