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以检测支付过程的结束。