PHP Xero API > Create Invoice not receiving customer address details

27 views Asked by At

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";
        
    }
0

There are 0 answers