katsana / insurance-sdk-php
KATSANA PHP保险续保SDK
Requires
- php: >=7.1
- laravie/codex: ^4.0 || ^5.0
- laravie/codex-security: ^1.0.1
Requires (Dev)
- fzaninotto/faker: ^1.9
- mockery/mockery: ^1.2
- nesbot/carbon: ^1.26.3 || ^2.0
- php-http/curl-client: ^1.7 || ^2.0
- phpunit/phpunit: ^7.5 || ^8.0
README
安装
要通过composer安装,只需在您的composer.json
文件中放入以下内容
{ "require": { "katsana/insurance-sdk-php": "^0.2", "php-http/guzzle6-adapter": "^2.0" } }
快速安装
上述安装也可以通过以下命令简化
composer require "php-http/guzzle6-adapter" "katsana/insurance-sdk-php=^0.2"
HTTP适配器
您可能不想使用php-http/guzzle6-adapter
,而是想使用任何其他实现了php-http/client-implementation
的适配器。请查看PHP-HTTP的客户端与适配器。
入门指南
创建客户端
您可以通过以下代码创建客户端(该代码使用php-http/guzzle6-adapter
和php-http/discovery
来自动选择通过composer安装的可用适配器)
<?php use Katsana\Insurance\Client; $sdk = Client::make('client-id', 'client-secret');
使用客户端凭证授权进行身份验证
一旦您启动了客户端,在开始使用服务之前,您需要获取访问令牌。您需要做的只是
$passport = $sdk->authenticate(); $accessToken = $passport->toArray()['access_token']; $sdk->setAccessToken($accessToken); // The `authenticate` method does this automatically.
此外,如果您已经有一个访问令牌,您可以使用现有的访问令牌启动客户端。您可以使用以下代码启动客户端
<?php use Katsana\Insurance\Client; $sdk = Client::fromAccessToken('access-token');
处理响应
使用API进行的每个请求都会返回一个Katsana\Insurance\Response
实例,该实例可以回退到\Psr\Http\Message\ResponseInterface
,这允许开发人员进一步检查响应。
例如
$response = $sdk->uses('Insurer')->all(); var_dump($response->toArray());
获取响应
您可以使用以下方法获取原始响应
$response->getBody();
但是,我们还创建了一个方法来解析返回的JSON字符串到数组。
$response->toArray();
检查响应HTTP状态
您可以通过以下方式获取响应状态码
$response->getStatusCode(); $response->isSuccessful(); $response->isUnauthorized();
检查响应头
您还可以使用以下代码检查响应头
$response->getHeaders(); // get all headers as array. $response->hasHeader('Content-Type'); // check if `Content-Type` header exist. $response->getHeader('Content-Type'); // get `Content-Type` header.
使用API
请求API有两种方式
使用API解析器
此方法允许您作为开发人员自动选择当前选定的API版本,而无需在KATSANA发布新API版本时修改代码。
$insurer = $sdk->uses('Insurer'); $response = $insurer->all();
这将解析出
Katsana\Insurance\One\Insurer
类实例(其中v1
将解析为One
命名空间)。
显式API解析器
此方法允许您对要使用的版本有更多控制。
$insurer = $sdk->via(new Katsana\Insurance\One\Insurer()); $response = $insurer->all();
用法
获取保险公司列表
使用此API获取可用保险公司的完整列表。
代码示例
$insurer = $sdk->uses('Insurer'); $response = $insurer->all(); var_dump($response->toArray());
响应参数
响应样本
{ "data": [ { "country_code": "MY", "name": "RHB Insurance", "partner": false, "product_code": null }, { "country_code": "MY", "name": "Allianz Malaysia Berhad", "partner": true, "product_code": null }, { "country_code": "MY", "name": "Takaful Ikhlas", "partner": false, "product_code": null } ] }
创建报价草稿
使用此API创建摩托车保险续保报价草稿。
代码示例
$quotation = $sdk->uses('Quotation'); $response = $quotation->draft( $plateNumber, $insurerCode, $ownerInformation, $vehicleInformation, $sumCovered, $addons ); var_dump($response->toArray());
请求参数
响应示例
{ "data": { "status": "pending", "ends_at": "2020-06-09 00:00:00", "starts_at": "2019-06-09 00:00:00", "expires_at": "2019-06-23 10:33:07", "insurer_code": "MI", "quotation": { "options": { "addons": { "windscreen": [] }, "sum_covered": [] }, "proposed": { "addons": [], "amount": { "ncd": 529.71, "sst": 23.4, "total": 423.46, "rebate": 43.34, "cashback": 0, "after_tax": 413.46, "before_tax": 390.06 }, "sum_covered": 25000, "contribution": { "basic": 963.1, "gross": 433.4, "total": 423.46, "after_rebate": 390.06 } }, "discounts": { "addons": { "flood": { "rules": [ { "if": "addon", "is": "windscreen", "min_value": 1 } ], "discount_percent": 0 }, "extended_flood": { "rules": [ { "if": "addon", "is": "windscreen", "min_value": 1 } ], "discount_percent":0 } }, "sum_covered": [] }, "stamp_duty": 10, "ncd_percent": 55, "sst_percent": 6, "sum_covered": { "max": 30000, "min": 20000 }, "rebate_percent": 10, "cashback_percent": 0 } } }
更新报价
使用此API更新摩托车保险续保的报价草稿。
代码示例
$quotation = $sdk->uses('Quotation'); $response = $quotation->update( $plateNumber, $insurerCode, $sumCovered, $addons )
请求参数
响应示例
{ "data": { "status": "pending", "ends_at": "2020-06-09 00:00:00", "starts_at": "2019-06-09 00:00:00", "expires_at": "2019-07-08 00:00:00", "insurer_code": "MI", "quotation": { "options": { "addons": { "windscreen": [] }, "sum_covered": [] }, "proposed": { "addons": [], "amount": { "ncd": 601.21, "sst": 26.56, "total": 479.27, "rebate": 49.19, "cashback": 0, "after_tax": 469.27, "before_tax": 442.71 }, "sum_covered": 30000, "contribution": { "basic": 1093.1, "gross": 491.9, "total": 479.27, "after_rebate": 442.71 } }, "discounts": { "addons": { "flood": { "rules": [ { "if": "addon", "is": "windscreen", "min_value": 1 } ], "discount_percent": 0 }, "extended_flood": { "rules": [ { "if": "addon", "is": "windscreen", "min_value": 1 } ], "discount_percent": 0 } }, "sum_covered": [] }, "stamp_duty": 10, "ncd_percent": 55, "sst_percent": 6, "sum_covered": { "max": 30000, "min": 20000 }, "rebate_percent": 10, "cashback_percent": 0 } } }
保存车辆信息
使用此API存储和更新车辆信息。
代码示例
$vehicles = $sdk->uses('Vehicle'); $response = $sdk->save( $plateNumber, $ownerInformation, $insuranceInformation, $vehicleInformation ); var_dump($response->toArray());
请求参数
响应示例
{ "data": { "plate_number": "ABC123", "maker": "Proton", "model": "Iriz", "variant": null, "year_manufactured": 2018, "chasis_no": null, "engine_no": null, "customer": { "data": { "fullname": "Ali bin Abu", "email": "ali@katasanalabs.com", "ic": "880102030405", "ic_type": "nric", "marital": null, "birthdate": "1988-01-02", "phone_no": "60123456789", "line1": null, "line2": null, "line3": null, "postcode": "47150", "city": null, "state": null, "country": null } } } }
进行支付
使用此API为保险续保进行支付。
代码示例
$renewal = $sdk->uses('Renewal'); $response = $renewal->pay( $plateNumber, $insurerCode, $sumCovered, $addons, $declaration ]); var_dump($response->toArray());
请求参数
对于已过期90天以上的保险,不可进行保险续保!
响应示例
{ "data": { "options": { "addons": { "windscreen": [] }, "sum_covered": [] }, "proposed": { "addons": [], "amount": { "ncd": 601.21, "sst": 26.56, "total": 479.27, "rebate": 49.19, "cashback": 0, "after_tax": 469.27, "before_tax": 442.71 }, "sum_covered": 30000, "contribution": { "basic": 1093.1, "gross": 491.9, "total": 479.27, "after_rebate": 442.71 } }, "discounts": { "addons": { "flood": { "rules": [ { "if": "addon", "is": "windscreen","min_value":1 } ], "discount_percent":0 }, "extended_flood": { "rules": [ { "if": "addon", "is": "windscreen", "min_value": 1 } ], "discount_percent": 0 } }, "sum_covered": [] }, "stamp_duty": 10, "ncd_percent": 55, "sst_percent": 6, "sum_covered": { "max": 30000, "min": 20000 }, "rebate_percent": 10, "cashback_percent": 0, "pay_url": "https:\/\/insure-staging.katsanalabs.com\/public\/payments\/1", "completion_url": "https:\/\/insure-staging.katsanalabs.com\/public\/payments\/complete" } }
注意
pay_url
是用户必须重定向到的URL,以开始支付过程。- 用户完成支付后,将被重定向到
completion_url
。移动应用程序可以监听此URL以检测支付过程的结束。