bkpsdm-karawang/sim-asn-php-client

BKPSDM Karawang SIM-ASN 服务 PHP 客户端

3.0.2 2024-08-06 06:25 UTC

This package is auto-updated.

Last update: 2024-09-06 06:40:33 UTC


README

这是BKPSDM Kabupaten Karawang的SIM-ASN api服务的php客户端SDK

安装

通过composer安装此包

composer require bkpsdm-karawang/sim-asn-php-client

将环境值添加到.env

SIM_ASN_CLIENT_ID=xxxx
SIM_ASN_CLIENT_SECRET=xxxx

我们推荐向用户表添加两个字段

    $table->uuid('sim_asn_user_id')->nullable()->default(null);
    $table->json('sim_asn_token')->nullable()->default(null);

AppServiceProvider.php的boot方法中添加刷新令牌处理器

    use SIM_ASN\Laravel\Facades\UserClient;
    use SIM_ASN\Models\AccessToken;
    ...
    /**
     * Register any application services.
     *
     * @return void
     */
    public function boot(Request $request)
    {
        $user = $request->user();

        if ($user) {
            if ($user->sim_asn_token) {
                UserClient::setAccessToken($user->sim_asn_token);
            }

            UserClient::onRefreshToken(function(AccessToken $accessToken) use ($user) {
                $user->sim_asn_token = $accessToken;
                $user->save();
            });
        }
    }

用法

创建回调处理器路由

    use SIM_ASN\Laravel\Facades\OauthClient;
    use SIM_ASN\Models\AccessToken;
    use SIM_ASN\Models\User as UserSimASN;

    /**
     * callback sim-asn
     */
    public function callbackSimASN(Request $request)
    {
        return OauthClient::handleCallback($request, function (UserSimASN $userSimASN, AccessToken $token) {
            $user = User::whereSimAsnUserId($userSimASN->id)->first();

            if ($user) {
                $user->sim_asn_token = $token;
                $user->save();
                return Auth::login($user);
            }

            return null;
        });
    }

通过响应码手动获取访问令牌

$accessToken = OauthClient::requestAccessToken($request->code);

获取用户资料

$user = UserClient::setAccessToken($accessToken)->getUser();

App客户端或用户客户端是guzzle客户端的扩展类,因此您可以直接使用http guzzle客户端

use SIM_ASN\Laravel\Facades\AppClient;
...
AppClient::get('/api/endpoint');
AppClient::post('/api/endpoint', [
    'body' => ['foo' => 'bar']
]);