ups_pickup 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +60 -0
- data/Rakefile +2 -0
- data/lib/schema/Error1.1.xsd +47 -0
- data/lib/schema/Pickup.wsdl +162 -0
- data/lib/schema/PickupWebServiceSchema.xsd +1 -0
- data/lib/schema/UPSSecurity.xsd +23 -0
- data/lib/schema/common.xsd +48 -0
- data/lib/ups_pickup.rb +18 -0
- data/lib/ups_pickup/address.rb +63 -0
- data/lib/ups_pickup/error_response.rb +18 -0
- data/lib/ups_pickup/fault_response.rb +12 -0
- data/lib/ups_pickup/pickup_cancel.rb +51 -0
- data/lib/ups_pickup/pickup_cancel_success.rb +13 -0
- data/lib/ups_pickup/pickup_creation.rb +141 -0
- data/lib/ups_pickup/pickup_creation_success.rb +13 -0
- data/lib/ups_pickup/pickup_piece.rb +20 -0
- data/lib/ups_pickup/pickup_request.rb +69 -0
- data/lib/ups_pickup/shipper.rb +57 -0
- data/lib/ups_pickup/util.rb +41 -0
- data/lib/ups_pickup/version.rb +3 -0
- data/ups_pickup.gemspec +20 -0
- metadata +118 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
<xsd:schema targetNamespace="http://www.ups.com/XMLSchema/XOLTWS/UPSS/v1.0" xmlns:upss="http://www.ups.com/XMLSchema/XOLTWS/UPSS/v1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
|
2
|
+
<xsd:element name="UPSSecurity">
|
3
|
+
<xsd:complexType>
|
4
|
+
<xsd:sequence>
|
5
|
+
<xsd:element name="UsernameToken">
|
6
|
+
<xsd:complexType>
|
7
|
+
<xsd:sequence>
|
8
|
+
<xsd:element name="Username" type="xsd:string"/>
|
9
|
+
<xsd:element name="Password" type="xsd:string"/>
|
10
|
+
</xsd:sequence>
|
11
|
+
</xsd:complexType>
|
12
|
+
</xsd:element>
|
13
|
+
<xsd:element name="ServiceAccessToken">
|
14
|
+
<xsd:complexType>
|
15
|
+
<xsd:sequence>
|
16
|
+
<xsd:element name="AccessLicenseNumber" type="xsd:string"/>
|
17
|
+
</xsd:sequence>
|
18
|
+
</xsd:complexType>
|
19
|
+
</xsd:element>
|
20
|
+
</xsd:sequence>
|
21
|
+
</xsd:complexType>
|
22
|
+
</xsd:element>
|
23
|
+
</xsd:schema>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!-- edited with XML Spy v4.1 U (http://www.xmlspy.com) by Rajendra Upadhya (UPS GACOR850393,) -->
|
3
|
+
<!-- edited with XMLSpy v2006 sp2 U (http://www.altova.com) by MC (United Parcel Service) -->
|
4
|
+
<xsd:schema targetNamespace="http://www.ups.com/XMLSchema/XOLTWS/Common/v1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ups="http://www.ups.com/XMLSchema" xmlns:common="http://www.ups.com/XMLSchema/XOLTWS/Common/v1.0" elementFormDefault="qualified">
|
5
|
+
<xsd:element name="Request" type="common:RequestType"/>
|
6
|
+
<xsd:element name="Response" type="common:ResponseType"/>
|
7
|
+
<xsd:element name="ClientInformation" type="common:ClientInformationType"/>
|
8
|
+
|
9
|
+
<xsd:complexType name="ClientInformationType">
|
10
|
+
<xsd:sequence>
|
11
|
+
<xsd:element name="Property" minOccurs="0" maxOccurs="unbounded">
|
12
|
+
<xsd:complexType>
|
13
|
+
<xsd:simpleContent>
|
14
|
+
<xsd:extension base="xsd:string">
|
15
|
+
<xsd:attribute name="Key" type="xsd:string" use="required"/>
|
16
|
+
</xsd:extension>
|
17
|
+
</xsd:simpleContent>
|
18
|
+
</xsd:complexType>
|
19
|
+
</xsd:element>
|
20
|
+
</xsd:sequence>
|
21
|
+
</xsd:complexType>
|
22
|
+
|
23
|
+
<xsd:complexType name="RequestType">
|
24
|
+
<xsd:sequence>
|
25
|
+
<xsd:element name="RequestOption" type="xsd:string" minOccurs="0" maxOccurs="unbounded"/>
|
26
|
+
<xsd:element name="TransactionReference" type="common:TransactionReferenceType" minOccurs="0"/>
|
27
|
+
</xsd:sequence>
|
28
|
+
</xsd:complexType>
|
29
|
+
<xsd:complexType name="TransactionReferenceType">
|
30
|
+
<xsd:sequence>
|
31
|
+
<xsd:element name="CustomerContext" type="xsd:string" minOccurs="0"/>
|
32
|
+
<xsd:element name="TransactionIdentifier" type="xsd:string" minOccurs="0" ups:usage="notused"/>
|
33
|
+
</xsd:sequence>
|
34
|
+
</xsd:complexType>
|
35
|
+
<xsd:complexType name="ResponseType">
|
36
|
+
<xsd:sequence>
|
37
|
+
<xsd:element name="ResponseStatus" type="common:CodeDescriptionType"/>
|
38
|
+
<xsd:element name="Alert" type="common:CodeDescriptionType" minOccurs="0" maxOccurs="unbounded"/>
|
39
|
+
<xsd:element name="TransactionReference" type="common:TransactionReferenceType" minOccurs="0"/>
|
40
|
+
</xsd:sequence>
|
41
|
+
</xsd:complexType>
|
42
|
+
<xsd:complexType name="CodeDescriptionType">
|
43
|
+
<xsd:sequence>
|
44
|
+
<xsd:element name="Code" type="xsd:string"/>
|
45
|
+
<xsd:element name="Description" type="xsd:string"/>
|
46
|
+
</xsd:sequence>
|
47
|
+
</xsd:complexType>
|
48
|
+
</xsd:schema>
|
data/lib/ups_pickup.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'pry'
|
2
|
+
require 'savon'
|
3
|
+
require 'httparty'
|
4
|
+
require "ups_pickup/version"
|
5
|
+
require "ups_pickup/pickup_request"
|
6
|
+
require "ups_pickup/error_response"
|
7
|
+
require "ups_pickup/shipper"
|
8
|
+
require "ups_pickup/address"
|
9
|
+
require "ups_pickup/fault_response"
|
10
|
+
require "ups_pickup/pickup_creation"
|
11
|
+
require "ups_pickup/pickup_creation_success"
|
12
|
+
require "ups_pickup/pickup_piece"
|
13
|
+
require "ups_pickup/pickup_cancel"
|
14
|
+
require "ups_pickup/pickup_cancel_success"
|
15
|
+
|
16
|
+
module UpsPickup
|
17
|
+
# Your code goes here...
|
18
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module UpsPickup
|
2
|
+
|
3
|
+
class Address
|
4
|
+
|
5
|
+
attr_accessor :address_line,:city, :state, :country,:postal_code,:country_code
|
6
|
+
def initialize(options={})
|
7
|
+
options ||={}
|
8
|
+
@address_line = options[:address_line]
|
9
|
+
@city = options[:city]
|
10
|
+
@state = options[:state]
|
11
|
+
@postal_code = options[:postal_code]
|
12
|
+
#@country = options[:country_code]
|
13
|
+
@country_code = options[:country_code] || "US"
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_ups_hash
|
17
|
+
{
|
18
|
+
"ns2:AddressLine"=>@address_line,
|
19
|
+
"ns2:City"=>@city,
|
20
|
+
"ns2:StateProvince"=>@state,
|
21
|
+
"ns2:PostalCode"=>@postal_code,
|
22
|
+
"ns2:CountryCode"=>@country_code
|
23
|
+
}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class PickupAddress < Address
|
28
|
+
ADDRESS_TYPES = {:residential=>"Y",:commercial=>"N"}
|
29
|
+
attr_accessor :company_name,:contact_name,:room,:floor , :residential_indicator,:pickup_point,:phone_number,:extension
|
30
|
+
def initialize(options={})
|
31
|
+
super(options)
|
32
|
+
@company_name =options[:company_name]
|
33
|
+
@contact_name = options[:contact_name]
|
34
|
+
@room = options[:room]
|
35
|
+
@floor = options[:floor]
|
36
|
+
@residential_indicator = options[:residential_indicator] || "N" #ADDRESS_TYPES[options[:type]]
|
37
|
+
@pickup_point = options[:pickup_point]
|
38
|
+
@phone_number = options[:phone_number]
|
39
|
+
@extension = options[:extension]
|
40
|
+
|
41
|
+
end
|
42
|
+
def to_ups_hash
|
43
|
+
{
|
44
|
+
"ns2:CompanyName"=>@company_name,
|
45
|
+
"ns2:ContactName"=>@contact_name,
|
46
|
+
"ns2:AddressLine"=>@address_line,
|
47
|
+
"ns2:Floor"=>@floor,
|
48
|
+
"ns2:Room"=>@room,
|
49
|
+
"ns2:City"=>@city,
|
50
|
+
"ns2:StateProvince"=>@state,
|
51
|
+
"ns2:PostalCode"=>@postal_code,
|
52
|
+
"ns2:CountryCode"=>@country_code,
|
53
|
+
"ns2:ResidentialIndicator"=>@residential_indicator,
|
54
|
+
"ns2:PickupPoint"=>@pickup_point,
|
55
|
+
"ns2:Phone"=>{
|
56
|
+
"ns2:Number"=>@phone_number,
|
57
|
+
"ns2:Extension"=>@extension
|
58
|
+
}
|
59
|
+
|
60
|
+
}
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'ups_pickup/util'
|
2
|
+
module UpsPickup
|
3
|
+
class ErrorResponse
|
4
|
+
include Util
|
5
|
+
attr_accessor :error_code,:severity,:description
|
6
|
+
# currently building for error
|
7
|
+
def initialize(response)
|
8
|
+
response_hash = response.to_hash
|
9
|
+
|
10
|
+
@severity = response_hash.deep_fetch(:severity)
|
11
|
+
@error_code = response_hash.deep_fetch(:code)
|
12
|
+
@description =response_hash.deep_fetch(:description)
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module UpsPickup
|
2
|
+
class FaultResponse < ErrorResponse
|
3
|
+
attr_accessor :response
|
4
|
+
def initialize(client,response)
|
5
|
+
fault_client = client
|
6
|
+
fault_client.config.raise_errors = false
|
7
|
+
@response = Savon::SOAP::Response.new(fault_client.config,response.http)
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
|
2
|
+
module UpsPickup
|
3
|
+
class PickupCancel < PickupRequest
|
4
|
+
def initialize(user_name, password, license, options={})
|
5
|
+
super(user_name, password, license, options)
|
6
|
+
@cancel_by = options[:cancel_by] || "02"
|
7
|
+
@prn = options[:prn]
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_ups_hash
|
11
|
+
{
|
12
|
+
"ns2:CancelBy"=>@cancel_by,
|
13
|
+
"ns2:PRN"=>@prn
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
def build_request
|
18
|
+
self.to_ups_hash
|
19
|
+
end
|
20
|
+
|
21
|
+
def commit
|
22
|
+
begin
|
23
|
+
@client_response = @client.request :ns2,"PickupCancelRequest" do
|
24
|
+
#soap.namespaces["xmlns:S"] = "http://schemas.xmlsoap.org/soap/envelope/"
|
25
|
+
#soap.namespaces["xmlns:upss"] = "http://www.ups.com/XMLschema/XOLTWS/UPSS/v1.0"
|
26
|
+
#soap.namespaces["xmlns:ns1"] = "http://www.ups.com/XMLSchema/XOLTWS/Common/v1.0"
|
27
|
+
soap.namespaces["xmlns:ns3"] = "http://www.ups.com/XMLSchema/XOLTWS/UPSS/v1.0"
|
28
|
+
soap.namespaces["xmlns:ns2"] = "http://www.ups.com/XMLSchema/XOLTWS/Pickup/v1.1"
|
29
|
+
# soap.header = SOAP_HEADER1
|
30
|
+
soap.header = access_request
|
31
|
+
soap.body = build_request
|
32
|
+
end
|
33
|
+
rescue Savon::SOAP::Fault => fault
|
34
|
+
@client_response = fault
|
35
|
+
rescue Savon::Error => error
|
36
|
+
@client_response = error
|
37
|
+
end
|
38
|
+
build_response
|
39
|
+
end
|
40
|
+
|
41
|
+
def build_response
|
42
|
+
if success?
|
43
|
+
@response = UpsPickup::PickupCancelSuccess.new(@client_response)
|
44
|
+
elsif soap_fault?
|
45
|
+
fault_response = UpsPickup::FaultResponse.new(@client,@client_response)
|
46
|
+
@error = UpsPickup::ErrorResponse.new(fault_response.response)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module UpsPickup
|
2
|
+
class PickupCancelSuccess
|
3
|
+
include Util
|
4
|
+
attr_accessor :response_status,:code,:description,:pickup_type
|
5
|
+
def initialize(response)
|
6
|
+
response_hash = response.to_hash
|
7
|
+
@response_status = response_hash.deep_fetch(:response_status)
|
8
|
+
@code = response_hash.deep_fetch(:code)
|
9
|
+
@description = response_hash.deep_fetch(:description)
|
10
|
+
@pickup_type = response_hash.deep_fetch(:pickup_type)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,141 @@
|
|
1
|
+
require 'ups_pickup/util'
|
2
|
+
module UpsPickup
|
3
|
+
class PickupCreation < PickupRequest
|
4
|
+
include Util
|
5
|
+
attr_accessor :response,:error
|
6
|
+
def initialize(user_name, password, license, options={})
|
7
|
+
super(user_name, password, license, options)
|
8
|
+
@rate_pickup_indicator = set_yes_or_no_option(@options[:rate_pickup_indicator])
|
9
|
+
# iF any one packge is above 70lbs or 32 kg then its true
|
10
|
+
@over_weight_indicator = set_yes_or_no_option(@options[:rate_pickup_indicator])
|
11
|
+
@reference_number = @options[:reference_number]
|
12
|
+
@special_instruction = @options[:special_instruction]
|
13
|
+
@pickup_address = UpsPickup::PickupAddress.new(options)
|
14
|
+
@shipper = UpsPickup::Shipper.new(options)
|
15
|
+
@alternate_address_indicator = @options[:alternate_address_indicator].nil? ? "N" : @options[:alternate_address_indicator]
|
16
|
+
@pickup_pieces = set_pickup_piece
|
17
|
+
set_weight
|
18
|
+
set_pickup_date_info
|
19
|
+
set_payment_method
|
20
|
+
set_notification
|
21
|
+
set_undelivered_email
|
22
|
+
end
|
23
|
+
#options=>{:pickup_piece=>{:service_code=>,:qty}}
|
24
|
+
# or options=>{:pickup_piece=>[{:service_code=>,:qty},{:service_code=>,:qty}]}
|
25
|
+
|
26
|
+
#TODO need to check wether savon is iterating array or not
|
27
|
+
def set_pickup_piece
|
28
|
+
if @options[:pickup_piece]
|
29
|
+
if @options[:pickup_piece].is_a?(Array)
|
30
|
+
@options[:pickup_piece].each do |pp|
|
31
|
+
@pickup_pieces << Ups::PickupPiece.new(pp)
|
32
|
+
end
|
33
|
+
elsif @options[:pickup_piece].is_a?(Hash)
|
34
|
+
@pickup_pieces =[UpsPickup::PickupPiece.new(@options[:pickup_piece])]
|
35
|
+
end
|
36
|
+
else
|
37
|
+
@pickup_pieces =[UpsPickup::PickupPiece.new(@options)]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
def pickup_piece_ups_hash
|
41
|
+
pickup_hashes = []
|
42
|
+
if @pickup_pieces
|
43
|
+
@pickup_pieces.flatten.each do |pp|
|
44
|
+
|
45
|
+
pickup_hashes<< [pp.to_ups_hash]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
pickup_hashes.flatten
|
49
|
+
end
|
50
|
+
|
51
|
+
def set_weight
|
52
|
+
@weight = @options[:weight]
|
53
|
+
#LBS or KGS
|
54
|
+
@unit_of_weight = @options[:unit_of_weight] || "LBS"
|
55
|
+
end
|
56
|
+
|
57
|
+
def set_pickup_date_info
|
58
|
+
@close_time = @options[:close_time]
|
59
|
+
@ready_time = @options[:ready_time]
|
60
|
+
@pickup_date = Date.parse(@options[:pickup_date]).strftime("%Y%m%d")
|
61
|
+
end
|
62
|
+
# The payment method to pay for this on call pickup.
|
63
|
+
# 00 = No payment needed
|
64
|
+
# 01 = Pay by shipper account
|
65
|
+
# 03 = Pay by charge card
|
66
|
+
# 04 = Pay by tracking number
|
67
|
+
# 05 = Pay by check or money order
|
68
|
+
def set_payment_method
|
69
|
+
@payment_method = options[:payment_method] if !options[:payment_method].nil? && [0,1,2,3,4,5].include?(options[:payment_method].to_i)
|
70
|
+
@payment_method ||="00"
|
71
|
+
end
|
72
|
+
|
73
|
+
# it might be an array of email address or single email address
|
74
|
+
# max allowed limit is 5
|
75
|
+
def set_notification
|
76
|
+
@confirmation_email_address = [@options[:confirmation_email_address]][0...5].flatten.uniq.compact
|
77
|
+
end
|
78
|
+
|
79
|
+
def set_undelivered_email
|
80
|
+
@undelivered_email
|
81
|
+
end
|
82
|
+
|
83
|
+
def build_request
|
84
|
+
{
|
85
|
+
"ns2:Request"=>{
|
86
|
+
"ns2:RequestOption"=>"1"
|
87
|
+
},
|
88
|
+
"ns2:RatePickupIndicator"=>@rate_pickup_indicator,
|
89
|
+
|
90
|
+
"ns2:Shipper"=>@shipper.to_ups_hash,
|
91
|
+
"ns2:PickupDateInfo"=>{
|
92
|
+
"ns2:CloseTime"=>@close_time,
|
93
|
+
"ns2:ReadyTime" => @ready_time,
|
94
|
+
"ns2:PickupDate" =>@pickup_date
|
95
|
+
},
|
96
|
+
"ns2:PickupPiece"=>pickup_piece_ups_hash,
|
97
|
+
"ns2:PickupAddress"=>@pickup_address.to_ups_hash,
|
98
|
+
"ns2:AlternateAddressIndicator"=>@alternate_address_indicator,
|
99
|
+
"ns2:PaymentMethod"=>@payment_method,
|
100
|
+
"ns2:OverweightIndicator"=>@over_weight_indicator,
|
101
|
+
"ns2:SpecialInstruction"=>@special_instruction,
|
102
|
+
"ns2:ReferenceNumber"=>@reference_number,
|
103
|
+
"ns2:Notfication"=>{
|
104
|
+
"ns2:ConfirmationEmailAddress"=>@confirmation_email_address
|
105
|
+
}
|
106
|
+
}
|
107
|
+
end
|
108
|
+
|
109
|
+
def commit
|
110
|
+
begin
|
111
|
+
@client_response = @client.request :ns2,"PickupCreationRequest" do
|
112
|
+
#soap.namespaces["xmlns:S"] = "http://schemas.xmlsoap.org/soap/envelope/"
|
113
|
+
#soap.namespaces["xmlns:upss"] = "http://www.ups.com/XMLschema/XOLTWS/UPSS/v1.0"
|
114
|
+
#soap.namespaces["xmlns:ns1"] = "http://www.ups.com/XMLSchema/XOLTWS/Common/v1.0"
|
115
|
+
soap.namespaces["xmlns:ns3"] = "http://www.ups.com/XMLSchema/XOLTWS/UPSS/v1.0"
|
116
|
+
soap.namespaces["xmlns:ns2"] = "http://www.ups.com/XMLSchema/XOLTWS/Pickup/v1.1"
|
117
|
+
# soap.header = SOAP_HEADER1
|
118
|
+
soap.header = access_request
|
119
|
+
soap.body = build_request
|
120
|
+
end
|
121
|
+
rescue Savon::SOAP::Fault => fault
|
122
|
+
@client_response = fault
|
123
|
+
rescue Savon::Error => error
|
124
|
+
@clien_response = error
|
125
|
+
end
|
126
|
+
build_response
|
127
|
+
end
|
128
|
+
|
129
|
+
def build_response
|
130
|
+
if success?
|
131
|
+
@response = UpsPickup::PickupCreationSuccess.new(@client_response)
|
132
|
+
elsif soap_fault?
|
133
|
+
fault_response = UpsPickup::FaultResponse.new(@client,@client_response)
|
134
|
+
@error = UpsPickup::ErrorResponse.new(fault_response.response)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
|
139
|
+
|
140
|
+
end
|
141
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'ups_pickup/util'
|
2
|
+
module UpsPickup
|
3
|
+
class PickupCreationSuccess
|
4
|
+
include Util
|
5
|
+
attr_accessor :prn,:rate_status,:success_code
|
6
|
+
def initialize(response)
|
7
|
+
response_hash = response.to_hash
|
8
|
+
@prn = response_hash.deep_fetch(:prn)
|
9
|
+
@rate_status = response_hash.deep_fetch(:rate_status)
|
10
|
+
@success_code = response_hash.deep_fetch(:code)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module UpsPickup
|
2
|
+
class PickupPiece
|
3
|
+
#attr_accessor :service_code
|
4
|
+
def initialize(options={})
|
5
|
+
@service_code = options[:service_code] || "001"
|
6
|
+
@quantity =options[:quantity] || "1"
|
7
|
+
@destination_country_code = options[:destination_country_code] || "US"
|
8
|
+
@container_code = options[:container_code] || "01"
|
9
|
+
end
|
10
|
+
|
11
|
+
def to_ups_hash
|
12
|
+
{
|
13
|
+
"ns2:ServiceCode"=>@service_code,
|
14
|
+
"ns2:Quantity" =>@quantity,
|
15
|
+
"ns2:DestinationCountryCode"=>@destination_country_code,
|
16
|
+
"ns2:ContainerCode"=>@container_code
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
|
2
|
+
module UpsPickup
|
3
|
+
class PickupRequest
|
4
|
+
LIVE_URL = "https://onlinetools.ups.com/webservices/Pickup"
|
5
|
+
TEST_URL= "https://wwwcie.ups.com/webservices/Pickup"
|
6
|
+
include HTTParty
|
7
|
+
base_uri LIVE_URL
|
8
|
+
attr_accessor :user_name,:password,:license,:options,:client,:client_response,:response,:error
|
9
|
+
def initialize(user_name, password, license, options={})
|
10
|
+
@user_name,@password,@license,@options = user_name,password,license,options
|
11
|
+
@client=Savon::Client.new(File.expand_path("../../schema/Pickup.wsdl", __FILE__))
|
12
|
+
@request_body = {}
|
13
|
+
set_wsdl_endpoint
|
14
|
+
set_soap_namespace
|
15
|
+
if (options[:test] == true)
|
16
|
+
self.class.base_uri TEST_URL
|
17
|
+
elsif options[:url] && [LIVE_URL,TEST_URL].include?(options[:url])
|
18
|
+
self.class.base_uri options[:url]
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
# For Test environment set test url
|
26
|
+
def set_wsdl_endpoint
|
27
|
+
if @options[:test] == true
|
28
|
+
@client.wsdl.endpoint = TEST_URL
|
29
|
+
else
|
30
|
+
@client.wsdl.endpoint = LIVE_URL
|
31
|
+
end
|
32
|
+
end
|
33
|
+
# Set name space
|
34
|
+
# ns2 for pickup
|
35
|
+
def set_soap_namespace
|
36
|
+
|
37
|
+
# @client.wsdl.namespaces["xmlns:ns2"] = "http://www.ups.com/XMLSchema/XOLTWS/Pickup/v1.1"
|
38
|
+
# @client.wsdl.namespaces["xmlns:ns3"] = "http://www.ups.com/XMLSchema/XOLTWS/UPSS/v1.0"
|
39
|
+
end
|
40
|
+
|
41
|
+
#Set security passed in client request block
|
42
|
+
def access_request
|
43
|
+
{
|
44
|
+
"ns3:UPSSecurity" => {
|
45
|
+
"ns3:UsernameToken"=>{
|
46
|
+
"ns3:Username"=>@user_name,
|
47
|
+
"ns3:Password" => @password
|
48
|
+
},
|
49
|
+
"ns3:ServiceAccessToken"=>{
|
50
|
+
"ns3:AccessLicenseNumber"=> @license
|
51
|
+
}
|
52
|
+
}
|
53
|
+
}
|
54
|
+
end
|
55
|
+
def soap_fault?
|
56
|
+
@client_response.is_a?(Savon::SOAP::Fault)
|
57
|
+
end
|
58
|
+
|
59
|
+
def http_error?
|
60
|
+
@client_response.is_a?(Savon::Error)
|
61
|
+
end
|
62
|
+
|
63
|
+
def success?
|
64
|
+
@client_response.is_a?(Savon::SOAP::Response)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# pickup = Ups::PickupRequest.new("contego.mtaylor","C0nt3g0!","6C82D38E41F9C600")
|