sspat / profiru
Profi.ru partership program API client
Requires
- php: >=7.3.0
- ext-json: *
- guzzlehttp/psr7: ^1.5
- psr/http-client: ^1.0
Requires (Dev)
- doctrine/coding-standard: ^5.0
- phpstan/phpstan: ^0.10.6
- phpunit/phpunit: ~5.7
- roave/security-advisories: dev-master
Suggests
- php-http/guzzle6-adapter: PSR-18 adapter for Guzzle 6
README
Features
This package provides easy access to the Profi.ru partnership program API.
After registering on the program and receiving your SSL certificate and key you can use the API right away.
Currently implemented in the package are the dictionary
and pagination
API's.
The provisioning
API will be implemented in future releases.
Requirements
- The minimum required PHP version is PHP 7.3.0.
- You will need an SSL certificate and public key provided by the Profi.ru partnership program representatives to get access to the API
Installation
The preferred way to install this extension is through composer.
Either run
composer require sspat/profiru
or add
"sspat/profiru": "*"
to the require section of your composer.json
file.
Usage
Sending requests to the API
use GuzzleHttp\RequestOptions; use Http\Adapter\Guzzle6\Client as GuzzleAdapter; use sspat\ProfiRu\Client; use sspat\ProfiRu\Constants\Domains; // Create an instance of any PSR-18 compliant HTTP Client and pass your partnership SSL certificate and key paths $httpClient = GuzzleAdapter::createWithConfig([ RequestOptions::TIMEOUT => 5, RequestOptions::SSL_KEY => 'partner.key', RequestOptions::CERT => 'partner.crt', RequestOptions::VERIFY => false, ]); // Create an instance of the API client, passing the HTTP client to it $api = new Client($httpClient); // Get Locations dictionary $locations = $api->getLocations(); // Get Services dictionary $services = $api->getServices(); // For requests to the pagination API an API domain must be specified $organizations = $api->getOrganizations(Domains::HEALTHCARE); $specialists = $api->getSpecialists(Domains::BEAUTY);
Requests to the pagination
API require choosing an API domain and can be further configured with a second argument.
$organizations = $api->getOrganizations( Domains::HEALTHCARE, [ 'city' => Cities::MOSCOW, 'from' => 220, 'count' => 10, 'scope' => Scopes::SCOPE_FULL, 'ip' => '144.135.23.1', 'models' => [ Models::ASSOCIATION, Models::ASSOCIATION_STRUCTURE_UNIT ] ] );
Supported domains for the pagination
API
Domain | Description | Supported cities |
---|---|---|
dktr | Healthcare | msk, spb |
krst | Beauty | msk, spb |
Supported additional parameters for the pagination
API
Parameter | Description | Default | Possible values | Constant class |
---|---|---|---|---|
city | The pagination API can return entries only for a single city at once. Different domains support different sets of cities. Moscow is supported by all domains, so it is the default value. | msk | Depends on domain | \sspat\ProfiRu\Constants\Cities |
from | Used for skipping a number of entries for pagination | 0 | Positive integers | |
count | Number of entries per page | 20 | 1-20 | |
scope | Defines the ammount of data retrieved for each entry | profile.mini | profile.mini, profile.full | \sspat\ProfiRu\Constants\Scopes |
ip | IP address of the API client | 127.0.0.1 | IPv4/IPv6 address | |
models | Types of entries to get from the API | Depends on whether you request organizations or specialists | Depends on whether you request organizations or specialists | \sspat\ProfiRu\Constants\Models |
Getting the response
The client returns response objects that already contain the API response in form of an array. You can also retrieve the PSR-7 response object if you need additional response data.
// Get Locations dictionary $locations = $api->getLocations(); // Get response body as Array $locationsArray = $locations->asArray(); // Get PSR-7 response object $psrResponse = $locations->response(); var_dump((string) $psrResponse->getBody());
Handling errors
The response object processes all errors returned by the API and raises them in form of an exception.
use sspat\ProfiRu\Exceptions\ErrorResponse; try { $services = $api->getServices(); } catch (ErrorResponse $e) { var_dump($e->getErrors()); }