Failure: The XML document is not well formed (10001)
tnduc opened this issue · 2 comments
tnduc commented
Everything still works, but today this error, I tried many ways but it didn't work, please help me.
ptondereau commented
could you please send your XML?
tnduc commented
could you please send your XML?
No problem passed the input, it still works before
<?php
namespace App\Services;
class UpsAPI
{
protected $user;
protected $password;
protected $access_key;
protected $account_number;
public function __construct()
{
$this->user = config('ups.user');
$this->password = config('ups.password');
$this->access_key = config('ups.access_key');
$this->account_number = config('ups.account_number');
}
public function createShipment($params)
{
$shipment = $this->shipment($params['etc_name']);
$shipment->setShipTo($this->shipTo($params['ship_to']));
$shipment->setShipFrom($this->fromAddress());
// Set service
$service = new \Ups\Entity\Service;
$service->setCode($params['ups_service']);
$service->setDescription($service->getName());
$shipment->setService($service);
// Set description
// $shipment->setDescription();
// Add this package
$shipment->addPackage($this->addPackage($params['add_package']));
// Set Reference Number
$referenceNumber = new \Ups\Entity\ReferenceNumber;
$referenceNumber->setCode(\Ups\Entity\ReferenceNumber::CODE_PURCHASE_ORDER_NUMBER);
$referenceNumber->setValue($params['sale_order_name']);
$shipment->getPackages()[0]->setReferenceNumber($referenceNumber);
// Set payment information
$shipment->setPaymentInformation(new \Ups\Entity\PaymentInformation('prepaid', (object)array('AccountNumber' => $this->account_number)));
// Ask for negotiated rates (optional)
$rateInformation = new \Ups\Entity\RateInformation;
$rateInformation->setNegotiatedRatesIndicator(1);
$shipment->setRateInformation($rateInformation);
$api = new \Ups\Shipping($this->access_key, $this->user, $this->password);
$confirm = $api->confirm(\Ups\Shipping::REQ_VALIDATE, $shipment);
dd($confirm);
if ($confirm) {
$accept = $api->accept($confirm->ShipmentDigest);
}
return [
'base64_string' => $accept->PackageResults->LabelImage->GraphicImage,
'tracking_number' => $accept->ShipmentIdentificationNumber,
'shipping_fee' => $accept->ShipmentCharges->TotalCharges->MonetaryValue
];
}
public function addressValidation($params)
{
$address = new \Ups\Entity\Address();
$address->setAttentionName($params['attn_name']);
$address->setBuildingName('Test address');
$address->setAddressLine1($params['shipping_address']);
$address->setAddressLine2($params['shipping_address_2']);
$address->setStateProvinceCode($params['state']);
$address->setCity($params['city']);
$address->setCountryCode('US');
$address->setPostalCode($params['zip_code']);
$xav = new \Ups\AddressValidation($this->access_key, $this->user, $this->password);
$xav->activateReturnObjectOnValidate(); //This is optional
return $xav->validate($address, \Ups\AddressValidation::REQUEST_OPTION_ADDRESS_VALIDATION, 15);
}
private function shipment($etc_name) {
// Start shipment
$shipment = new \Ups\Entity\Shipment;
// Set shipper
$shipper = $shipment->getShipper($etc_name);
$shipper->setShipperNumber('14292W');
$shipper->setName($etc_name);
$shipper->setAttentionName('HTH Communications, LLC');
$shipperAddress = $shipper->getAddress();
$shipperAddress->setAddressLine1('9920 Brooklet Drive');
$shipperAddress->setPostalCode('77099');
$shipperAddress->setCity('HOUSTON');
$shipperAddress->setStateProvinceCode('TX'); // required in US
$shipperAddress->setCountryCode('US');
$shipper->setAddress($shipperAddress);
$shipper->setEmailAddress('accounting@hthcomm.com');
$shipper->setPhoneNumber('713-534-1950');
$shipment->setShipper($shipper);
return $shipment;
}
private function fromAddress() {
$address = new \Ups\Entity\Address();
$address->setAddressLine1('9920 Brooklet Drive');
$address->setPostalCode('77099');
$address->setCity('HOUSTON');
$address->setStateProvinceCode('TX');
$address->setCountryCode('US');
$shipFrom = new \Ups\Entity\ShipFrom();
$shipFrom->setAddress($address);
$shipFrom->setName('HTH Communications, LLC');
$shipFrom->setAttentionName($shipFrom->getName());
$shipFrom->setCompanyName($shipFrom->getName());
$shipFrom->setEmailAddress('accounting@hthcomm.com');
$shipFrom->setPhoneNumber('713-534-1950');
return $shipFrom;
}
private function shipTo($params) {
$address = new \Ups\Entity\Address();
$address->setAddressLine1($params['address_line1']);
$address->setAddressLine2($params['address_line2']);
$address->setPostalCode($params['zip_code']);
$address->setCity($params['city']);
$address->setStateProvinceCode($params['province_code']); // Required in US
$address->setCountryCode($params['country_code']);
$shipTo = new \Ups\Entity\ShipTo();
$shipTo->setAddress($address);
$shipTo->setCompanyName($params['company_name'] ?? ' ');
$shipTo->setAttentionName($params['attention_name']);
$shipTo->setEmailAddress($params['email_address']);
$shipTo->setPhoneNumber($params['phone_number']);
return $shipTo;
}
private function addPackage($params) {
$package = new \Ups\Entity\Package();
$package->getPackagingType()->setCode(\Ups\Entity\PackagingType::PT_PACKAGE);
$package->getPackageWeight()->setWeight($params['weight']);
$unit = new \Ups\Entity\UnitOfMeasurement;
$unit->setCode(\Ups\Entity\UnitOfMeasurement::UOM_LBS);
$package->getPackageWeight()->setUnitOfMeasurement($unit);
// Set Package Service Options
$packageServiceOptions = new \Ups\Entity\PackageServiceOptions();
$packageServiceOptions->setShipperReleaseIndicator(true);
$package->setPackageServiceOptions($packageServiceOptions);
// Set dimensions
$dimensions = new \Ups\Entity\Dimensions();
$dimensions->setHeight($params['height']);
$dimensions->setWidth($params['width']);
$dimensions->setLength($params['length']);
$unit = new \Ups\Entity\UnitOfMeasurement;
$unit->setCode(\Ups\Entity\UnitOfMeasurement::UOM_IN);
$dimensions->setUnitOfMeasurement($unit);
$package->setDimensions($dimensions);
// Add descriptions because it is a package
$package->setDescription($params['description']);
return $package;
}
}