Reputation:
Hi I'm working as web developer from several years and did not use any api before today. Now I have to integrate a shipping company's api with clients website and I'm trying to understand its api documentation but did not have any useful result. client provided me a pdf file that's difficult to understand for me. can anybody help me as soon as possible. I should be very grateful I any one can help me
last code that i try:
$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);
assistance to solve this issue would be appreciated.
Thank you.
Upvotes: 4
Views: 14842
Reputation: 3015
Recently I have connected DPD API on my site. for testing, I created the repo if want, please check out. because I have implemented all API enpoint on this repository.
LINK: https://github.com/najathi/dpd-api-shipping-uk
Thank you.
Upvotes: 1
Reputation: 21
wrote an authentication class if anyone's interested?
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();
Upvotes: 2
Reputation: 81
Though someone might find this useful - this a a load of different methods working for the api.dpd.co.uk - couple of notes - you need to put your account number in - and your username and password - also for creating shipments make sure collectionDate is in the future or it just throws a General Application Error..
<?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": "[email protected]",
"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;
?>
Upvotes: 8
Reputation: 835
This for me was the best way to authorize login using Zend library.
$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'];
Upvotes: 0
Reputation: 11
You must have account on dpd.co.uk. dummy values will not work like (account/123456) or dummy password like(DSMITH:MYPASSWD) you have to put you api account number and username and password there which http://dpd.co.uk will provide you for api than this will work. use below link for api account on http://www.dpd.co.uk/apps/api/
Upvotes: 0
Reputation: 11
Try this hope this will help. you must have username, password and account number of account of (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);
Upvotes: 0