Skip to content

Commit 7c4662a

Browse files
authored
Tracking API implemented
1 parent 480645e commit 7c4662a

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

src/Tracking.php

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
<?php
2+
3+
namespace RahulGodiyal\PhpUpsApiWrapper;
4+
5+
use RahulGodiyal\PhpUpsApiWrapper\Auth;
6+
use RahulGodiyal\PhpUpsApiWrapper\Utils\HttpClient;
7+
8+
class Tracking extends Auth
9+
{
10+
private const QUERY = [
11+
"locale" => "en_US",
12+
"returnSignature" => "false",
13+
"returnMilestones" => "false",
14+
"returnPOD" => "false"
15+
];
16+
private static ?string $trackingNumber;
17+
18+
public static function setTrackingNumber(string $trackingNumber): self
19+
{
20+
self::$trackingNumber = $trackingNumber;
21+
return new self;
22+
}
23+
24+
public function fetch(string $client_id, string $client_secret): array
25+
{
26+
$auth = $this->authenticate($client_id, $client_secret);
27+
28+
if ($auth['status'] == 'fail') {
29+
return $auth;
30+
}
31+
32+
$access_token = $auth['access_token'];
33+
34+
$httpClient = new HttpClient();
35+
$httpClient->setHeader([
36+
"Authorization: Bearer $access_token",
37+
"transId: string",
38+
"transactionSrc: testing"
39+
]);
40+
$httpClient->setUrl($this->_getAPIBaseURL() . "/api/track/v1/details/" . self::$trackingNumber . "?" . http_build_query(self::QUERY));
41+
$httpClient->setMethod("GET");
42+
$res = $httpClient->fetch();
43+
44+
if (!isset($res->trackResponse)) {
45+
if (isset($res->response)) {
46+
$error = $res->response->errors[0]->message;
47+
} else {
48+
$error = "Fetching tracking details failed! Please try again.";
49+
}
50+
return ['status' => 'fail', 'msg' => $error];
51+
}
52+
53+
if (!isset($res->trackResponse->shipment)) {
54+
return ['status' => 'fail', 'msg' => "Invalid Tracking Number."];
55+
}
56+
57+
if (isset($res->trackResponse->shipment[0]->warnings)) {
58+
$error_arr = $res->trackResponse->shipment[0]->warnings;
59+
if (isset($error_arr[0]->message)) {
60+
return ['status' => 'fail', 'msg' => $error_arr[0]->message];
61+
}
62+
}
63+
64+
$trackingDetails = $res->trackResponse->shipment;
65+
return ['status' => 'success', 'data' => $trackingDetails];
66+
}
67+
68+
public function setMode(string $mode): self
69+
{
70+
parent::setMode($mode);
71+
return $this;
72+
}
73+
}

0 commit comments

Comments
 (0)