I'm having an issue with XERO Api when creating invoices. It all works fine apart from the addess and contact number do not pull through to XERO. Below is the code I'm using. There are no errors and the contact is created and invoice email sent just no address details. Can anyone see anything I'm missing?
$xeroTenantId = $this->Storage_model->getSession()['tenant_id'];
if ($this->Storage_model->getHasExpired()) {
$provider = new \League\OAuth2\Client\Provider\GenericProvider([
'clientId' => 'xxxxxxxxxx',
'clientSecret' => 'xxxxxxxxxx',
'redirectUri' => 'xxxxxxxxxx.co.uk/callback',
'urlAuthorize' => 'https://login.xero.com/identity/connect/authorize',
'urlAccessToken' => 'https://identity.xero.com/connect/token',
'urlResourceOwnerDetails' => 'https://api.xero.com/api.xro/2.0/Organisation'
]);
$newAccessToken = $provider->getAccessToken('refresh_token', [
'refresh_token' => $this->Storage_model->getRefreshToken()
]);
// Save my token, expiration and refresh token
$this->Storage_model->setToken(
$newAccessToken->getToken(),
$newAccessToken->getExpires(),
$xeroTenantId,
$newAccessToken->getRefreshToken(),
$newAccessToken->getValues()["id_token"] );
}
$config = XeroAPI\XeroPHP\Configuration::getDefaultConfiguration()->setAccessToken( (string)$this->Storage_model->getSession()['token'] );
$apiInstance = new XeroAPI\XeroPHP\Api\AccountingApi(
new GuzzleHttp\Client(),
$config
);
$idempotencyKey = rand()."IDDEMP";
$summarizeErrors = true;
$unitdp = 4;
$dateValue = new DateTime('now');
$dueDateValue = new DateTime('now');
$dueDateValue->modify("+1 month");
//test data
$contact['firstName'] = "Fred";
$contact['surname'] = "Blogs";
$contact['email'] = "[email protected]";
$contact['contactNumber'] = "079671111111";
$contact['billingAddress1'] = "Address 1";
$contact['billingAddress2'] = "Address 2";
$contact['billingAddress3'] = "Address 3";
$contact['billingAddress4'] = "Address 4";
$contact['billingPostcode'] = "DT94XX";
//[add a contact]
$setFirstName = $contact['firstName'];
$setLastName = $contact['surname'];
$setEmailAddress = $contact['email'];
$setContactNumber = $contact['contactNumber'];
$address = array(array(
'AddressType' => 'STREET',
'AddressLine1' => $contact['billingAddress1'],
'AddressLine2' => $contact['billingAddress2'],
'City' => $contact['billingAddress3'],
'State' => $contact['billingAddress4'],
'PostalCode' => $contact['billingPostcode']
));
$contact = new XeroAPI\XeroPHP\Models\Accounting\Contact;
$contact->setName($setFirstName." ".$setLastName)
->setFirstName($setFirstName)
->setLastName($setLastName)
->setEmailAddress($setEmailAddress)
->setContactNumber($setContactNumber)
->setAddresses($address);
$arr_contacts = [];
array_push($arr_contacts, $contact);
$contacts = new XeroAPI\XeroPHP\Models\Accounting\Contacts;
$contacts->setContacts($arr_contacts);
$apiResponse = $apiInstance->createContacts($xeroTenantId,$contacts);
//[/add a contact]
$lineItems = array();
$lineItemTracking = new XeroAPI\XeroPHP\Models\Accounting\LineItemTracking;
$lineItemTracking->setTrackingCategoryID('00000000-0000-0000-0000-000000000000');
$lineItemTracking->setTrackingOptionID('00000000-0000-0000-0000-000000000000');
$lineItemTrackings = [];
array_push($lineItemTrackings, $lineItemTracking);
foreach($order as $value) {
$lineItem = new XeroAPI\XeroPHP\Models\Accounting\LineItem;
$lineItem->setDescription($value['rowTitle']);
$lineItem->setQuantity($value['rowQty']);
$lineItem->setUnitAmount($value['rowPrice']);
$lineItem->setAccountCode('200');
$lineItem->setTracking($lineItemTrackings);
array_push($lineItems, $lineItem);
}
$invoice = new XeroAPI\XeroPHP\Models\Accounting\Invoice;
$invoice->setType(XeroAPI\XeroPHP\Models\Accounting\Invoice::TYPE_ACCREC);
$invoice->setContact($contact);
$invoice->setDate($dateValue);
$invoice->setDueDate($dueDateValue);
$invoice->setLineItems($lineItems);
$invoice->setReference($contact['reference']);
$invoice->setStatus('AUTHORISED'); //$invoice->setStatus(XeroAPI\XeroPHP\Models\Accounting\Invoice::STATUS_DRAFT);
$invoices = new XeroAPI\XeroPHP\Models\Accounting\Invoices;
$arr_invoices = [];
array_push($arr_invoices, $invoice);
$invoices->setInvoices($arr_invoices);
try {
$result = $apiInstance->createInvoices($xeroTenantId, $invoices, $idempotencyKey, $summarizeErrors, $unitdp);
$data = XeroAPI\XeroPHP\AccountingObjectSerializer::sanitizeForSerialization($result);
//email invoice
$requestEmpty = new XeroAPI\XeroPHP\Models\Accounting\RequestEmpty;
try {
$idempotencyKey = rand()."IDDEMP";
$apiInstance->emailInvoice($xeroTenantId, $invocieID = $data->Invoices[0]->InvoiceID, $requestEmpty, $idempotencyKey);
} catch (Exception $e) {
echo 'Exception when calling AccountingApi->emailInvoice: ', $e->getMessage(), PHP_EOL;
}
} catch (Exception $e) {
echo 'Exception when calling AccountingApi->createInvoices: ', $e->getMessage(), PHP_EOL;
}
echo "complete";
}