Привет Я работаю веб-разработчиком с нескольких лет и не использовал api до сегодняшнего дня. Теперь мне нужно интегрировать api-сервер судоходной компании с веб-сайтом клиентов, и я пытаюсь понять его документацию api, но не имеет никакого полезного результата. клиент предоставил мне pdf- файл, который мне трудно понять. может кто-нибудь мне помочь как можно скорее. Я должен быть очень благодарен, что я могу помочь мне
последний код, который я пытаюсь:
$url="api.dpd.co.uk/user/?action=login HTTP/1.1"; $options = array( 'http' => array( 'method' => 'POST', 'Host' => 'api.dpd.co.uk', 'method' => 'POST', 'header'=> "Content-Type: application/json\r\n" . "Accept: application/json\r\n". "Authorization: Basic RFNNSVRIOk1ZUEFTU1dE". "GEOClient:".base64_encode("account/123456"). "Content-Length: 0" ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); $response = json_decode($result); echo var_dump($response);
помощь в решении этого вопроса будет оценена по достоинству.
Спасибо.
Хотя кто-то может найти это полезное – это нагрузка различных методов, работающих на api.dpd.co.uk – пару заметок – вам нужно указать свой номер учетной записи – и ваше имя пользователя и пароль – также для создания отгрузок убедитесь, что коллекцияDate в будущем, или просто бросает общую ошибку приложения.
<?php $BASE="https://api.dpd.co.uk"; $method = '/user/?action=login'; $url = $BASE.$method; $options = array( 'http' => array( 'method' => 'POST', 'Host' => 'api.dpd.co.uk', 'header'=> "Content-Type: application/json\r\n" . "Accept: application/json\r\n". "Authorization: Basic ". base64_encode("user:pass") ."\r\n". "GEOClient: account/123456\r\n". "Content-Length: 0" ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); $response = json_decode($result); //echo var_dump($response); $data=(json_decode($result,true)); $session=$data['data']['geoSession']; echo $session; //$session="MTAuMjYuMy4yMDd8LTczODMzNzE4MA=="; // get some services... /* /shipping/network/?collectionDetails.address.locality=Birmingham&collectionDetails. address.county=West%20Midlands&collectionDetails.address.postcode=B661BY&collection Details.address.countyCode=GB&deliveryDetails.address.locality=Birmingham&deliveryD etails.address.county=West%20Midlands&deliveryDetails.address.postcode=B11AA&delive ryDetails.address.countyCode=GB&deliveryDirection=1&numberOfParcels=1&totalWeight=5 &shipmentType=0 HTTP/1.1 Host: api.dpd.co.uk Accept: application/json GEOClient: account/123456 GEOSession: 1234567890ABCDEFGHIJK */ $method = '/shipping/network/?collectionDetails.address.locality=Birmingham&collectionDetails.address.county=West%20Midlands&collectionDetails.address.postcode=B661BY&collectionDetails.address.countyCode=GB&deliveryDetails.address.locality=Birmingham&deliveryDetails.address.county=West%20Midlands&deliveryDetails.address.postcode=B11AA&deliveryDetails.address.countyCode=GB&deliveryDirection=1&numberOfParcels=1&totalWeight=5&shipmentType=0&collectionDetails.address.countryCode=GB&deliveryDetails.address.countryCode=GB'; $url = $BASE.$method; $options = array( 'http' => array( 'method' => 'GET', 'Host' => 'api.dpd.co.uk', 'header'=> "Content-Type: application/json\r\n" . "Accept: application/json\r\n". "GEOClient: account/123456\r\n". "GEOSession: ".$session."\r\n". "Content-Length: 0" ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); $response = json_decode($result); //echo var_dump($response); $data=(json_decode($result,true)); var_dump($data); // $method = '/shipping/country/GB'; $url = $BASE.$method; $options = array( 'http' => array( 'method' => 'GET', 'Host' => 'api.dpd.co.uk', 'header'=> "Content-Type: application/json\r\n" . "Accept: application/json\r\n". "GEOClient: account/123456\r\n". "GEOSession: ".$session."\r\n". "Content-Length: 0" ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); $response = json_decode($result); //echo var_dump($response); $data=(json_decode($result,true)); var_dump($data); $method = '/shipping/country/GB'; $url = $BASE.$method; $options = array( 'http' => array( 'method' => 'GET', 'Host' => 'api.dpd.co.uk', 'header'=> "Content-Type: application/json\r\n" . "Accept: application/json\r\n". "GEOClient: account/123456\r\n". "GEOSession: ".$session."\r\n". "Content-Length: 0" ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); $response = json_decode($result); //echo var_dump($response); $data=(json_decode($result,true)); var_dump($data); $method = '/shipping/country'; $url = $BASE.$method; $options = array( 'http' => array( 'method' => 'GET', 'Host' => 'api.dpd.co.uk', 'header'=> "Content-Type: application/json\r\n" . "Accept: application/json\r\n". "GEOClient: account/123456\r\n". "GEOSession: ".$session."\r\n". "Content-Length: 0" ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); $response = json_decode($result); //echo var_dump($response); $data=(json_decode($result,true)); var_dump($data); // /shipping/network/812/ $method = '/shipping/network/812/'; $url = $BASE.$method; $options = array( 'http' => array( 'method' => 'GET', 'Host' => 'api.dpd.co.uk', 'header'=> "Content-Type: application/json\r\n" . "Accept: application/json\r\n". "GEOClient: account/123456\r\n". "GEOSession: ".$session."\r\n". "Content-Length: 0" ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); $response = json_decode($result); //echo var_dump($response); $data=(json_decode($result,true)); var_dump($data); // /shipping/shipment $method = '/shipping/shipment'; $url = $BASE.$method; $json='{ "job_id": null, "collectionOnDelivery": false, "invoice": null, "collectionDate": "2014-11-13T016:00:00", "consolidate": false, "consignment": [{ "consignmentNumber": null, "consignmentRef": null, "parcels": [], "collectionDetails": { "contactDetails": { "contactName": "My Contact", "telephone": "0121 500 2500" }, "address": { "organisation": "GeoPostUK Ltd", "countryCode": "GB", "postcode": "B66 1BY", "street": "Roebuck Lane", "locality": "Smethwick", "town": "Birmingham", "county": "West Midlands" } }, "deliveryDetails": {"contactDetails": { "contactName": "My Contact", "telephone": "0121 500 2500" }, "address": { "organisation": "GeoPostUK Ltd", "countryCode": "GB", "postcode": "B66 1BY", "street": "Roebuck Lane", "locality": "Smethwick", "town": "Birmingham", "county": "West Midlands" }, "notificationDetails": { "email": "my.email@geopostuk.com", "mobile": "07921000001" } }, "networkCode": "1^01", "numberOfParcels": 1, "totalWeight": 5, "shippingRef1": "My Ref 1", "shippingRef2": "My Ref 2", "shippingRef3": "My Ref 3", "customsValue": null, "deliveryInstructions": "Please deliver with neighbour", "parcelDescription": "", "liabilityValue": null, "liability": false }] }'; $json=(str_replace(" ", "", $json)); $json=(str_replace("\n", "", $json)); $json=(str_replace(" ", "", $json)); //exit(); $length=strlen($json); echo $length; $options = array( 'http' => array( 'method' => 'POST', 'Host' => 'api.dpd.co.uk', 'header'=> "Content-Type: application/json\r\n" . "Accept: application/json\r\n". "GEOClient: account/123456\r\n". "GEOSession: ".$session."\r\n". "Content-Length: ".$length."\r\n", 'content'=> $json ) ); var_dump($options); $context = stream_context_create($options); echo var_dump($context); $result = file_get_contents($url, false, $context); $response = json_decode($result); $data=(json_decode($result,true)); var_dump($data); $shipmentId=$data['data']['shipmentId']; ///shipping/shipment/[shipmentId]/label/ echo $shipmentId; $method = '/shipping/shipment/'.$shipmentId.'/label/'; $url = $BASE.$method; $options = array( 'http' => array( 'method' => 'GET', 'Host' => 'api.dpd.co.uk', 'header'=> "Accept: text/html\r\n". "GEOClient: account/123456\r\n". "GEOSession: ".$session."\r\n" ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); $response = json_decode($result); echo $result; ?>
написал класс аутентификации, если кому-то это интересно?
class Authentication { private $url; private $timeout; private $ch; private $headers; private $username; private $password; private $accountNo; public function __construct($url, $username, $password, $accountNo, $timeout='5', $headers=array()) { $this->headers = array( 'Content-Type: application/json', 'Accept: application/json', 'Authorization: Basic ' . base64_encode($username . ':' . $password), 'GEOClient: ' . $username . '/' . $accountNo, 'Content-Length: 0' ); $this->url = $url . '/user/?action=login'; $this->timeout = $timeout; $this->headers = array_merge($this->headers, $headers); $this->ch = curl_init(); } public function __destruct() { curl_close($this->ch); } public function doAuthentication() { curl_setopt_array($this->ch, array( CURLOPT_URL => $this->url, CURLOPT_RETURNTRANSFER => true, CURLOPT_CONNECTTIMEOUT => $this->timeout, CURLOPT_USERAGENT => 'Spry Web Design dev', CURLOPT_HTTPHEADER => $this->headers, CURLOPT_POST => true )); $authPost = curl_exec($this->ch); $data = json_decode($authPost, true); return $data['data']['geoSession']; } }; // example usage below $client = new Authentication("URL", 'USERNAME', 'PASSWORD', 'ACCOUNT_NO'); echo $result = $client->doAuthentication();
вclass Authentication { private $url; private $timeout; private $ch; private $headers; private $username; private $password; private $accountNo; public function __construct($url, $username, $password, $accountNo, $timeout='5', $headers=array()) { $this->headers = array( 'Content-Type: application/json', 'Accept: application/json', 'Authorization: Basic ' . base64_encode($username . ':' . $password), 'GEOClient: ' . $username . '/' . $accountNo, 'Content-Length: 0' ); $this->url = $url . '/user/?action=login'; $this->timeout = $timeout; $this->headers = array_merge($this->headers, $headers); $this->ch = curl_init(); } public function __destruct() { curl_close($this->ch); } public function doAuthentication() { curl_setopt_array($this->ch, array( CURLOPT_URL => $this->url, CURLOPT_RETURNTRANSFER => true, CURLOPT_CONNECTTIMEOUT => $this->timeout, CURLOPT_USERAGENT => 'Spry Web Design dev', CURLOPT_HTTPHEADER => $this->headers, CURLOPT_POST => true )); $authPost = curl_exec($this->ch); $data = json_decode($authPost, true); return $data['data']['geoSession']; } }; // example usage below $client = new Authentication("URL", 'USERNAME', 'PASSWORD', 'ACCOUNT_NO'); echo $result = $client->doAuthentication();
У вас должна быть учетная запись на dpd.co.uk. фиктивные значения не будут работать как (account / 123456) или как фиктивный пароль, например (DSMITH: MYPASSWD), вы должны указать номер счета и имя пользователя и пароль, которые http://dpd.co.uk предоставят вам за api, чем это будет работать. используйте ссылку ниже для учетной записи api на http://www.dpd.co.uk/apps/api/
Для меня это был лучший способ авторизации входа в систему с использованием библиотеки Zend.
$BASE="https://api.dpd.co.uk"; $method = '/user/?action=login'; $url = $BASE.$method; $client = new Zend_Http_Client($url); $client->setMethod(Zend_Http_Client::POST); $client->setHeaders('Host', 'api.dpd.co.uk'); $client->setHeaders(Zend_Http_Client::CONTENT_TYPE, 'application/json'); $client->setHeaders('Accept', 'application/json'); $client->setHeaders('Authorization', 'Basic '. base64_encode('username:password')); $client->setHeaders('GEOClient', 'account name/account number'); $client->setHeaders('Content-Length', '0'); $response = $client->request(); $body = Zend_Json::decode($response->getBody()); $geoSession = $body['data']['geoSession'];
Попробуйте эту надежду, это поможет. вы должны иметь имя пользователя, пароль и номер учетной записи (dpd.co.uk).
$BASE="https://api.dpd.co.uk"; $method = '/user/?action=login'; $url = $BASE.$method; $options = array( 'http' => array( 'method' => 'POST', 'Host' => 'api.dpd.co.uk', 'header'=> "Content-Type: application/json\r\n" . "Accept: application/json\r\n". "Authorization: Basic ". base64_encode("username:password") ."\r\n". "GEOClient: account/your account number\r\n". "Content-Length: 0" ) ); $context = stream_context_create($options); $result = file_get_contents($url, false, $context); $response = json_decode($result); echo var_dump($response);