katsana/insurance-sdk-php

KATSANA PHP保险续保SDK

v0.2.0 2019-11-16 01:50 UTC

This package is auto-updated.

Last update: 2024-09-07 14:26:32 UTC


README

Build Status Latest Stable Version Total Downloads Latest Unstable Version License Coverage Status

安装

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