-
Notifications
You must be signed in to change notification settings - Fork 7
/
Endicia.php
111 lines (85 loc) · 3.11 KB
/
Endicia.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
<?php
namespace SparkLib\Shipping;
use SparkLib\Xml\Builder as Builder;
class Endicia {
public $base_url = "https://www.envmgr.com/LabelService/EwsLabelService.asmx/";
public $requester_id;
public $account_number;
public $password;
public $test;
public $request_type, $post_prefix, $xml;
public $valid_response, $message, $response, $sxml;
public $curl_info;
public function __construct( $requester_id, $account_number, $password, $test_mode ){
$this->requester_id = $requester_id;
$this->account_number = $account_number;
$this->password = $password;
$this->test = $test_mode;
}
public function request() {
$url = $this->base_url . $this->request_type;
$post_body = $this->post_prefix . "=" . $this->xml;
$headers = array('Content-Type: application/x-www-form-urlencoded');
$ch = curl_init();
curl_setopt($ch, \CURLOPT_URL, $url);
curl_setopt($ch, \CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, \CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, \CURLOPT_POST, true);
curl_setopt($ch, \CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, \CURLOPT_POSTFIELDS, $post_body);
curl_setopt($ch, \CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, \CURLOPT_TIMEOUT, 10);
$this->response = curl_exec($ch);
$this->curl_info = curl_getinfo($ch);
curl_close($ch);
return $this->response;
}
public function parse_response(){
if ($this->response === null)
throw new \LogicException('Cannot parse, no valid response.');
if ($this->curl_info === null)
throw new \LogicException('Cannot check curl status, no valid info hash.');
if ( $this->curl_info['http_code'] !== 200 ) {
$this->valid_response = false;
$this->message = "HTTP status was {$this->curl_info['http_code']}, expected 200";
throw new \RuntimeException( $this->message );
return false;
}
libxml_use_internal_errors(true);
$this->sxml = simplexml_load_string( $this->response );
// TODO: parse out sxml errors
$this->valid_response = true;
return true;
}
public function check_status(){
if ($this->sxml === null)
throw new \LogicException("Cannot check response status without a parsed response");
if ( ! $this->valid_response)
throw new \LogicException("Cannot check response status for invalid response. Status message: {$this->message}.");
$status = $this->sxml->Status;
$message = $this->sxml->ErrorMessage;
if ($status == NULL) {
$this->valid_response = false;
$this->message = "Could not retrieve request status from response document.";
return false;
}
if ($status != 0) {
$this->valid_response = false;
$this->message = "Endicia returned error: $message";
throw new \RuntimeException( $this->message );
return false;
}
return true;
}
protected function authXML( $b ){
return
$b->child()
->RequesterID( $this->requester_id )
->RequestID('12345')
->CertifiedIntermediary(
$b->child()
->AccountID( $this->account_number )
->PassPhrase( $this->password )
);
}
}