首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用api.dpd.co.uk api与php集成

如何使用api.dpd.co.uk api与php集成
EN

Stack Overflow用户
提问于 2014-05-14 00:29:20
回答 6查看 10.9K关注 0票数 3

嗨,我做了几年的web开发人员,在今天之前没有使用过任何api。现在我不得不将一家航运公司的api与客户网站集成在一起,我正在尝试理解它的api文档,但没有任何有用的结果。客户提供给我一个对我来说很难理解的pdf文件。有没有人能尽快帮我。我应该非常感激任何人能帮助我。

我尝试的最后一段代码:

代码语言:javascript
复制
$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);

如能协助解决此问题,我们将不胜感激。

谢谢。

EN

回答 6

Stack Overflow用户

发布于 2014-11-14 00:30:15

虽然有些人可能会发现这很有用-这是一堆不同的方法在api.dpd.co.uk上工作-几个注释-你需要输入你的账号-以及你的用户名和密码-也用于创建发货,确保collectionDate是在未来,否则它只是抛出一个通用应用程序错误。

代码语言:javascript
复制
<?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;


?>
票数 6
EN

Stack Overflow用户

发布于 2015-06-01 03:38:32

写了一个身份验证类,如果有人感兴趣的话?

代码语言:javascript
复制
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();
票数 2
EN

Stack Overflow用户

发布于 2014-05-16 12:55:00

试试这个,希望这会有帮助。您必须拥有(dpd.co.uk)的用户名、密码和帐号。

代码语言:javascript
复制
$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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23636793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档