sausin / signere-sdk
用于与Signere.no API一起工作的银行ID实现包。
Requires
- php: >=7.0
- guzzlehttp/guzzle: ^6.3
- illuminate/contracts: 5.4.*|5.5.*
- jakeasmith/http_build_url: ^1.0
- nesbot/carbon: ~1.0
Requires (Dev)
- mockery/mockery: ~1.0
- orchestra/testbench: ~3.4
- phpunit/phpunit: 5.7.*|6.3.*
- spatie/phpunit-watcher: ^1.3
README
Signere 提供API以使用各种识别系统对文档进行身份验证和签名。
此包使用Signere提供的公开API文档,并使其易于与这些API一起使用。
虽然它创建得与Laravel很好地配合,但也可以使用此包的功能与任何PHP环境一起使用。在非Laravel环境中需要实现Illuminate\Contracts\Config\Repository
以提供包的配置输入。
Laravel使用其强大的服务容器来处理依赖注入。如果在不使用Laravel的情况下使用此包,则您的应用程序需要自己管理依赖注入并注入相关类。
请注意,控制器、服务提供者、路由和资源只能在Laravel中使用。
安装
通过composer安装
composer require sausin/signere-sdk
当使用Laravel 5.5及以上版本的包时,服务提供者将自动注册。对于Laravel 5.4,需要在config/app.php
文件中注册服务提供者,如下所示
Sausin\Signere\SignereServiceProvider::class
应使用以下Artisan命令发布配置文件
php artisan vendor:publish --provider="Sausin\Signere\SignereServiceProvider"
配置文件为包正确运行设置了以下键
'mode' => null, 'id' => env('SIGNERE_API_ID', 'id'), 'primary_key' => env('SIGNERE_KEY_PRIMARY', 'primary_key'), 'secondary_key' => env('SIGNERE_KEY_SECONDARY', 'secondary_key'), 'ping_token' => env('PINGTOKEN', 'ping_token'), 'cancel_url' => 'https://abc.com/auth/abort?requestid=[1]&externalid=[2]', 'error_url' => 'https://abc.com/auth/error?status=[0]', 'success_url' => 'https://abc.com/auth/success?requestid=[1]&externalid=[2]', 'sign_cancel_url' => 'https://abc.com/auth/abort?requestid=[1]&externalid=[2]', 'sign_error_url' => 'https://abc.com/auth/error?status=[0]', 'sign_success_url' => 'https://abc.com/auth/success?requestid=[1]&externalid=[2]', 'identity_provider' => 'NO_BANKID_WEB',
先决条件
键
在SDK使用的项目中,.env
文件应定义以下键
SIGNERE_API_ID
SIGNERE_KEY_PRIMARY
SIGNERE_KEY_SECONDARY
PINGTOKEN
这些键是在您向Signere注册时由Signere提供的。
如果您在不使用Laravel的情况下使用此包,则需要通过实现Illuminate\Contracts\Config\Repository
来提供这些变量。这些变量将注入到所需的类中。
SSL
您的应用程序需要有可操作的SSL配置。这是iframe设置中银行ID正常工作所必需的。
用法
为了进行API调用,需要设置适当的头,以便Signere可以验证您的请求是真实的。这由本包中的Header
类自动处理。API调用中所需头部的规范已使用Signere文档。
与Laravel的访问控制
如果使用Laravel,则会自动注册路由。请参阅此包中的routes/api.php
以查看所有可用路由。
路由分为四个组 - admin
、user
、guest
和bidder
。通过在包的AppServiceProvider
中使用此包设置Signere
类来实现访问控制。以下是一个示例
Signere::auth(function ($request) { // return true / false; });
每个控制器的构造方法调用Authenticate
中间件,该中间件又调用Signere
类以检查请求是否需要认证。
大多数路由都组织在admin
组下,因为这些操作是有成本的。
使用认证服务
认证的工作流程如下
- 使用
RequestId
类的create
方法创建一个请求。此方法接受一个值数组,并返回一个GuzzleHttp\Psr7\Response
对象,其中包含签名URL等信息。 - 访问上述URL并提供您的BankID凭据。根据认证过程的结果,您将被重定向到上述
create
方法给出的URL之一。 - 当您想要登出或使您的登录无效时,请使用
RequestId
类的invalidate
方法。该方法接受一个字符串输入,对应于在create
方法的响应中接收到的requestid
。
使用签名服务
签名可以通过两种方式执行
- 外部
- Signere方式
第一种方法意味着您创建一个可供签署的文档,并自行分发签署者的URL。
在第二种方法中,Signere为您完成所有艰苦的工作。您基本上使用Signere设置一个流程,该流程向签署者发送通知。还可以自动设置提醒。
... ...
提示
Laravel支持实时门面(从5.4版本开始)。
这非常有用,当您想要使用具有注入依赖项的此类包中的类并能够测试您自己的应用程序代码时。有关Laravel门面的更多信息,请参阅这里。
此外,这还可以在tinker
中非常有用,以检查您是否获得了正确的响应。例如在tinker
控制台
>>> $r = Facades\Sausin\Signere\Events::getEncryptionKey() => GuzzleHttp\Psr7\Response {#1234} >>> $r->getBody()->getContents() => ""fcbYIytltKmGrmd3lre71wpdBDn4D56dNjp8Bn1TROl=""
从Signere获取加密密钥,对应于您的设置!此外,
>>> Facades\Sausin\Signere\Events::getBaseUrl();
将给出包使用的URL。如果您处于测试/本地环境,这将返回https://testapi.signere.no/api/events/encryptionkey
,如果您处于生产环境,则返回https://api.signere.no/api/events/encryptionkey
。
命令
此包包含 artisan 命令signere:renew
。它接受一个可选的参数--key=
,该参数可以是primary
或secondary
。
如果没有指定任何内容,它将使用primary
。这很有用,可以更新您的Signere密钥,并且可以与Laravel提供的强大调度器结合使用,这样您就不必担心更新您的密钥。只需设置更新并忘记它:)
致谢
- Taylor Otwell和Mohamed Said,他们提供了出色的Horizon包,该包作为本模板。
- Signere提供了使用BankId的惊人API服务
商标
所有商标均归其所有者所有