Copy link to clipboard
Copied
Hello,
I am working on integrating UPS REST API and getting error message:
{"response":{"errors":[{"code":"110609","message":"All package dimensions are required and each must be greater than 0 for package 1."}]}}
This is my code:
<!--- Get UPS Access Token Information --->
<cfhttp url="https://wwwcie.ups.com/security/v1/oauth/token" method="post" result="ups_authorization">
<cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencoded" />
<cfhttpparam type="header" name="x-merchant-id" value="#UPSAccountNumber#" />
<cfhttpparam type="header" name="Authorization" value="Basic #ToBase64(clientID & ':' & secretKey)#" />
<cfhttpparam name="grant_type" value="client_credentials" type="formfield">
</cfhttp>
<cfset ups_access_token_json = DeserializeJSON(ToString(ups_authorization.filecontent)) />
<cfset ups_access_token = ups_access_token_json.access_token />
<!--- Get UPS Shipping Rates --->
<cfset obj ={
"RateRequest": {
"Request": {
"TransactionReference": {
"CustomerContext": "CustomerContext"
}
},
"Shipment": {
"Shipper": {
"Name": "ShipperName",
"ShipperNumber": "123456",
"Address": {
"AddressLine": [
"ShipperAddressLine",
"ShipperAddressLine",
"ShipperAddressLine"
],
"City": "TIMONIUM",
"StateProvinceCode": "MD",
"PostalCode": "21093",
"CountryCode": "US"
}
},
"ShipTo": {
"Name": "ShipToName",
"Address": {
"AddressLine": [
"ShipToAddressLine",
"ShipToAddressLine",
"ShipToAddressLine"
],
"City": "Alpharetta",
"StateProvinceCode": "GA",
"PostalCode": "30005",
"CountryCode": "US"
}
},
"ShipFrom": {
"Name": "ShipFromName",
"Address": {
"AddressLine": [
"ShipFromAddressLine",
"ShipFromAddressLine",
"ShipFromAddressLine"
],
"City": "TIMONIUM",
"StateProvinceCode": "MD",
"PostalCode": "21093",
"CountryCode": "US"
}
},
"PaymentDetails": {
"ShipmentCharge": {
"Type": "01",
"BillShipper": {
"AccountNumber": "123456"
}
}
},
"Service": {
"Code": "03",
"Description": "Ground"
},
"NumOfPieces": "1",
"Package": {
"SimpleRate": {
"Description": "SimpleRateDescription",
"Code": "XS"
},
"PackagingType": {
"Code": "02",
"Description": "Packaging"
},
"Dimensions": {
"UnitOfMeasurement": {
"Code": "IN",
"Description": "Inches"
},
"Length": "5",
"Width": "5",
"Height": "5"
},
"PackageWeight2": {
"UnitOfMeasurement": {
"Code": "LBS",
"Description": "Pounds"
},
"Weight": "1.5"
},
"ShipmentTotalWeight": {
"UnitOfMeasurement": {
"Code": "LBS",
"Description": "Pounds"
},
"Weight": "1.5"
}
}
}
}
}>
As you can see I am sending the weight to UPS but for some reason it is not reading it, any suggestions as to why not?
This is UPS API documentation: https://developer.ups.com/api/reference?loc=en_US#operation/Rate
Copy link to clipboard
Copied
Sorry, this is the error message:
{"response":{"errors":[{"code":"110601","message":"Missing or invalid package weight for package 1."}]}}
and this is my code:
<!--- Get UPS Access Token Information --->
<cfhttp url="https://wwwcie.ups.com/security/v1/oauth/token" method="post" result="ups_authorization">
<cfhttpparam type="header" name="Content-Type" value="application/x-www-form-urlencoded" />
<cfhttpparam type="header" name="x-merchant-id" value="#UPSAccountNumber#" />
<cfhttpparam type="header" name="Authorization" value="Basic #ToBase64(clientID & ':' & secretKey)#" />
<cfhttpparam name="grant_type" value="client_credentials" type="formfield">
</cfhttp>
<cfset ups_access_token_json = DeserializeJSON(ToString(ups_authorization.filecontent)) />
<cfset ups_access_token = ups_access_token_json.access_token />
<!--- Get UPS Shipping Rates --->
<cfset obj ={
"RateRequest": {
"Request": {
"TransactionReference": {
"CustomerContext": "CustomerContext"
}
},
"Shipment": {
"Shipper": {
"Name": "ShipperName",
"ShipperNumber": "123456",
"Address": {
"AddressLine": [
"ShipperAddressLine",
"ShipperAddressLine",
"ShipperAddressLine"
],
"City": "TIMONIUM",
"StateProvinceCode": "MD",
"PostalCode": "21093",
"CountryCode": "US"
}
},
"ShipTo": {
"Name": "ShipToName",
"Address": {
"AddressLine": [
"ShipToAddressLine",
"ShipToAddressLine",
"ShipToAddressLine"
],
"City": "Alpharetta",
"StateProvinceCode": "GA",
"PostalCode": "30005",
"CountryCode": "US"
}
},
"ShipFrom": {
"Name": "ShipFromName",
"Address": {
"AddressLine": [
"ShipFromAddressLine",
"ShipFromAddressLine",
"ShipFromAddressLine"
],
"City": "TIMONIUM",
"StateProvinceCode": "MD",
"PostalCode": "21093",
"CountryCode": "US"
}
},
"PaymentDetails": {
"ShipmentCharge": {
"Type": "01",
"BillShipper": {
"AccountNumber": "123456"
}
}
},
"Service": {
"Code": "03",
"Description": "Ground"
},
"NumOfPieces": "1",
"Package": {
"SimpleRate": {
"Description": "SimpleRateDescription",
"Code": "XS"
},
"PackagingType": {
"Code": "02",
"Description": "Packaging"
},
"Dimensions": {
"UnitOfMeasurement": {
"Code": "IN",
"Description": "Inches"
},
"Length": "5",
"Width": "5",
"Height": "5"
},
"PackageWeight": {
"UnitOfMeasurement": {
"Code": "LBS",
"Description": "Pounds"
},
"Weight": "5"
},
"ShipmentTotalWeight": {
"UnitOfMeasurement": {
"Code": "LBS",
"Description": "Pounds"
},
"Weight": "5"
}
}
}
}
}>
<cfhttp url="https://wwwcie.ups.com/api/rating/v2403/shop" method="post" result="hello3">
<cfhttpparam type="header" name="Content-Type" value="application/json" />
<cfhttpparam type="header" name="transId" value="string" />
<cfhttpparam type="header" name="transactionSrc" value="testing" />
<cfhttpparam type="header" name="Authorization" value="Bearer #ups_access_token#" />
<cfhttpparam type="body" value="#serializeJSON(obj)#">
</cfhttp>
<cfdump var="#hello3#" />
Copy link to clipboard
Copied
Did you find a solution? If you look at the UPS docs, I believe the package should be an array:
https://developer.ups.com/api/reference?loc=en_US#operation/Rate!path=RateRequest/Shipment/Package&t...
Copy link to clipboard
Copied
I don't think you need anyone's help. This is a problem you can solve yourself, as the API has returned a clear error message, namely:
"All package dimensions are required and each must be greater than 0 for package 1."
Check the documentation, and make sure your JSON contains all the required attributes for package.
I also noticed that you use
PackageWeight2
for the attribute instead of
PackageWeight