jgroup / laravel-bank-id

用于在Laravel应用程序中集成瑞典BankID的软件包

v1.0.0 2024-01-28 20:37 UTC

This package is auto-updated.

Last update: 2024-09-08 12:32:11 UTC


README

用于在您的Laravel应用程序中集成瑞典BankID的软件包。

源代码基于BankID提供的示例应用程序,该应用程序使用Java和Spring编写。

此软件包使用Laravel 8开发,尚未在早期版本上进行测试。

入门

使用Composer安装软件包。

composer require jgroup/laravel-bank-id

通过运行以下命令发布配置和证书(测试证书和生产ca根证书):

php artisan vendor:publish --provider="Jgroup\BankID\BankIDServiceProvider"

生产证书

将生产证书从PKCS_12格式转换为两个PEM文件,准备使用,运行以下命令:

openssl pkcs12 -in /path/to/certificate.p12 -passin pass:password_for_certificate_p12 -out /destination/folder/certificate.pem -clcerts -nokeys

openssl pkcs12 -in /path/to/certificate.p12 -passin pass:password_for_certificate_p12 -out /destination/folder/key.pem -nocerts -nodes

快速认证示例

// routes/web.php

<?php

use App\Models\User;
use Illuminate\Http\Response;
use Jgroup\BankID\Facades\BankID;
use Illuminate\Support\Facades\Route;

Route::post('/auth/bankid', function(Request $request) {
    return BankID::auth(
        $request->getClientIp(),
        'Text to display to the user'
    );
});

Route::post('/auth/bankid/collect', function(Request $request) {
    $response = BankID::collect();

    if ($response->getStatus() === 'complete') {
        $personalNumber = $response->getCollectResult()
            ->getCompletionResult()
            ->getPersonalNumber();

        $user = User::where('pnr', $personalNumber)->firstOrFail();

        // clear session transaction when completed
        BankID::setSessionTransaction(null);

        Auth::login($user);
    }

    return $response;
});

快速签名示例

// routes/web.php

<?php

use Illuminate\Http\Response;
use Illuminate\Validation\Rule;
use Jgroup\BankID\Facades\BankID;
use Jgroup\BankID\Rules\SignCompleted;
use Illuminate\Support\Facades\Route;

const SIGN_TEXT = 'Text to sign';

Route::post('/bankid/collect', function(Request $request) {
    return BankID::collect();
});

Route::post('/submit-form/sign', function(Request $request) {
    return BankID::sign(
        $request->getClientIp(),
        SIGN_TEXT
    );
});

Route::post('/submit-form', function(Request $request) {

    $request->validate([
        // transactionId should be sent along with the form data
        'transactionId' => [
            new SignCompleted(SIGN_TEXT)
        ],
        // your validation rules
    ]);

    // logic for handling form submission

    // clear session transaction if submission was processed successfully
    BankID::setSessionTransaction(null);
});