📜  php中dhl api集成 - 创建一个货件 - PHP(1)

📅  最后修改于: 2023-12-03 15:03:44.986000             🧑  作者: Mango

PHP中DHL API集成 - 创建一个货件

介绍

本文将介绍如何在PHP中使用DHL API创建一个货件。DHL API是DHL提供的Web服务,可以实现快递查询、标签打印、创建运单等功能。

前置条件

在使用DHL API之前,您需要先申请一个DHL账号,然后创建一个开发者账号并获取访问密钥。可以参考DHL开发者指南了解如何进行身份验证。

步骤
1. 准备API访问信息

在使用DHL API之前,需要准备API的访问信息。这些信息包括:

  • 访问点(Endpoint)
  • 访问密钥(Access Key)
  • 密钥密码(Secret Password)
  • 随机字符串(Nonce)
$endpoint = 'https://api.dhl.com/';
$access_key = '<your_access_key>';
$secret_password = '<your_secret_password>';
$nonce = time();
2. 创建请求头

创建请求头时,需要使用访问密钥和随机字符串生成一个hash值,并将这个hash值和DHL的API版本号加入到请求头中。

$version = '2';
$signature = base64_encode(hash('sha256', $access_key.$nonce.$timestamp.$secret_password, true));
$headers = [
    'Content-Type: application/json',
    "Authorization: {$access_key}:{$signature}",
    "X-Date: {$timestamp}",
    "DHL-API-Version: {$version}"
];
3. 创建请求体

通过DHL API,可以实现创建货件的功能。创建货件的请求体需要包含货件的详细信息,如发件人信息、收件人信息、货物信息、服务类型等。

$data = [
    'requestedShipment' => [
        'shipTimestamp' => '2022-01-01',
        'unitOfMeasurement' => 'SI',
        'content' => 'NON_DOCUMENTS',
        'paymentInfo' => [
            'paymentType' => 'S',
            'accountNumber' => '<your_account_number>',
            'billingAccountNumber' => '<your_billing_account_number>'
        ],
        'internationalDetail' => [
            'commodities' => [
                [
                    'numberOfPieces' => 1,
                    'description' => 'DHL PHP API Test',
                    'weight' => [
                        'value' => 1,
                        'unitOfMeasurement' => 'KG'
                    ],
                    'customsValue' => [
                        'amount' => 10,
                        'currencyCode' => 'USD'
                    ]
                ]
            ]
        ],
        'ship' => [
            'shipper' => [
                'name' => 'John Smith',
                'streetLines' => ['123 Main St'],
                'city' => 'Anytown',
                'postalCode' => '99999',
                'countryCode' => 'US'
            ],
            'recipient' => [
                'name' => 'Jane Doe',
                'streetLines' => ['321 Oak St'],
                'city' => 'Anytown',
                'postalCode' => '99999',
                'countryCode' => 'US',
                'phone' => '111-111-1111'
            ]
        ],
        'shipperReference' => 'DHL PHP API Test',
        'labelResponseType' => 'URL',
        'pickup' => [
            'pickupType' => 'N',
            'pickupDate' => '2022-01-01',
            'readyByTime' => '10:00',
            'closingTime' => '18:00'
        ],
        'totalWeight' => [
            'value' => 1,
            'unitOfMeasurement' => 'KG'
        ],
        'numberOfPieces' => 1,
        'productCode' => 'P',
        'doorTo' => 'DD'
    ]
];
4. 发送请求并处理响应

最后,使用curl发送请求,并处理DHL API返回的响应。如果请求成功,DHL API将返回一个JSON格式的消息体,其中包含货件的详细信息和标签URL等。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $endpoint . 'rest/v1/shipping/CreateShipmentRequest');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);

curl_close($ch);
$response = json_decode($result, true);

if ($response['status']['statusCode'] === '0') {
    $labelUrl = $response['label']['labelImage'];
    echo "货件创建成功,标签URL为: {$labelUrl}。";
} else {
    echo "货件创建失败,错误信息为:{$response['status']['statusMessage']}。";
}
结论

使用DHL API创建货件的流程如上所述。在使用DHL API之前,需要先准备API访问信息,并创建HTTP请求头和请求体。最后,使用curl发送请求,并处理DHL API返回的响应。