Получите данные счета с помощью Xero API - частное приложение - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь создать онлайн-форму, в которой пользователь может ввести свой номер счета, после чего веб-сервер будет взаимодействовать с Xero API, чтобы получить детали счета и заполнить некоторые дополнительные поля для оплаты.

У меня уже есть встроенная логика формы, но я понятия не имею, как начать работу с Xero API.

Я создал частное приложение и у меня есть необходимые ключи, но я не могу найти документацию о том, как на самом деле настроить вызов API в PHP.

Любая помощь будет высоко ценится.

**** ОБНОВЛЕНИЕ ****

Мне удалось заставить работать API, используя следующее:

function GetInvData ($InvNumber) {

    try {
        $config = [
            'oauth' => [
                'consumer_key' => 'REDACTED',
                'rsa_private_key' => 'REDACTED',
            ],
        ];

        $xero = new PrivateApplication($config);
        //$invoice =  $xero->load(\XeroPHP\Models\Accounting\Invoice::class)->where('InvoiceNumber',$InvNumber)->execute();
        $invoice =  $xero->load('Accounting\Invoice')
                    ->where('InvoiceNumber',$InvNumber)
                    ->execute();

    }
    catch(\Exception $ex) {
        var_dump($ex);
    }

    return ($invoice);
}

Тем не менее, то, что возвращается, является самым сложным фрагментом JSON, на который я когда-либо обращал внимание ... Наверное, не очень много.

Все, что мне нужно для извлечения, это сумма счета, имя клиента и его адрес электронной почты, кто-нибудь может помочь с этим?

XeroPHP\Remote\Collection Object
(
    [_associated_objects:protected] => 
    [storage:ArrayObject:private] => Array
        (
            [0] => XeroPHP\Models\Accounting\Invoice Object
                (
                    [_data:protected] => Array
                        (
                            [Type] => ACCREC
                            [Contact] => XeroPHP\Models\Accounting\Contact Object
                                (
                                    [_data:protected] => Array
                                        (
                                            [ContactID] => cf6eef48-cda3-4862-8518-4d631ea54c1c
                                            [ContactNumber] => 
                                            [AccountNumber] => 
                                            [ContactStatus] => 
                                            [Name] => REDACTED
                                            [FirstName] => 
                                            [LastName] => 
                                            [EmailAddress] => 
                                            [SkypeUserName] => 
                                            [ContactPersons] => 
                                            [BankAccountDetails] => 
                                            [TaxNumber] => 
                                            [AccountsReceivableTaxType] => 
                                            [AccountsPayableTaxType] => 
                                            [Addresses] => 
                                            [Phones] => 
                                            [IsSupplier] => 
                                            [IsCustomer] => 
                                            [DefaultCurrency] => 
                                            [XeroNetworkKey] => 
                                            [SalesDefaultAccountCode] => 
                                            [PurchasesDefaultAccountCode] => 
                                            [SalesTrackingCategories] => 
                                            [PurchasesTrackingCategories] => 
                                            [TrackingCategoryName] => 
                                            [TrackingCategoryOption] => 
                                            [PaymentTerms] => 
                                            [UpdatedDateUTC] => 
                                            [ContactGroups] => 
                                            [Website] => 
                                            [BrandingTheme] => 
                                            [BatchPayments] => 
                                            [Discount] => 
                                            [Balances] => 
                                            [HasAttachments] => 
                                        )

                                    [_dirty:protected] => Array
                                        (
                                        )

                                    [_associated_objects:protected] => Array
                                        (
                                            [Contact] => XeroPHP\Models\Accounting\Invoice Object
 *RECURSION*
                                        )

                                    [_application:protected] => 
                                )

                            [LineItems] => 
                            [Date] => DateTime Object
                                (
                                    [date] => 2019-03-05 00:00:00.000000
                                    [timezone_type] => 3
                                    [timezone] => Australia/Melbourne
                                )

                            [DueDate] => DateTime Object
                                (
                                    [date] => 2019-03-12 00:00:00.000000
                                    [timezone_type] => 3
                                    [timezone] => Australia/Melbourne
                                )

                            [LineAmountTypes] => Exclusive
                            [InvoiceNumber] => Inv-1521
                            [Reference] => Feb 2019
                            [BrandingThemeID] => c560d364-0331-4677-a529-8ce702559165
                            [Url] => 
                            [CurrencyCode] => AUD
                            [CurrencyRate] => 1
                            [Status] => AUTHORISED
                            [SentToContact] => 1
                            [ExpectedPaymentDate] => 
                            [PlannedPaymentDate] => 
                            [SubTotal] => 2150
                            [TotalTax] => 215
                            [Total] => 2365
                            [TotalDiscount] => 
                            [InvoiceID] => f5cfaed4-db9b-41f3-94e5-a025c2bc898a
                            [HasAttachments] => 
                            [Payments] => 
                            [Prepayments] => 
                            [Overpayments] => 
                            [AmountDue] => 2365
                            [AmountPaid] => 0
                            [FullyPaidOnDate] => 
                            [AmountCredited] => 0
                            [UpdatedDateUTC] => DateTime Object
                                (
                                    [date] => 2019-03-05 00:32:01.813000
                                    [timezone_type] => 3
                                    [timezone] => UTC
                                )

                            [CreditNotes] => 
                        )

                    [_dirty:protected] => Array
                        (
                        )

                    [_associated_objects:protected] => Array
                        (
                        )

                    [_application:protected] => XeroPHP\Application\PrivateApplication Object
                        (
                            [config:protected] => Array
                                (
                                    [xero] => Array
                                        (
                                            [site] => https://api.xero.com
                                            [base_url] => https://api.xero.com
                                            [core_version] => 2.0
                                            [payroll_version] => 1.0
                                            [file_version] => 1.0
                                            [model_namespace] => \XeroPHP\Models
                                        )

                                    [oauth] => Array
                                        (
                                            [signature_method] => RSA-SHA1
                                            [signature_location] => header
                                            [authorize_url] => https://api.xero.com/oauth/Authorize
                                            [request_token_path] => oauth/RequestToken
                                            [access_token_path] => oauth/AccessToken
                                            [consumer_key] => REDACTED
                                            [rsa_private_key] => REDACTED
                                            [token] => REDACTED
                                        )

                                    [curl] => Array
                                        (
                                            [10018] => XeroPHP
                                            [78] => 30
                                            [13] => 20
                                            [64] => 2
                                            [81] => 2
                                            [52] => 
                                            [10004] => 
                                            [10006] => 
                                            [10102] => 
                                        )

                                )

                            [oauth_client:protected] => XeroPHP\Remote\OAuth\Client Object
                                (
                                    [config:XeroPHP\Remote\OAuth\Client:private] => Array
                                        (
                                            [signature_method] => RSA-SHA1
                                            [signature_location] => header
                                            [authorize_url] => https://api.xero.com/oauth/Authorize
                                            [request_token_path] => oauth/RequestToken
                                            [access_token_path] => oauth/AccessToken
                                            [consumer_key] => REDACTED
                                            [rsa_private_key] => REDACTED
                                            [token] => REDACTED
                                        )

                                    [token_secret:XeroPHP\Remote\OAuth\Client:private] => 
                                    [verifier:XeroPHP\Remote\OAuth\Client:private] => 
                                )

                        )

                )

        )

)

Ответы [ 2 ]

1 голос
/ 10 апреля 2019

Вы в значительной степени спрашиваете, как сделать все то, к чему люди не относятся так любезно.Хорошая работа для выполнения вызова API, может занять некоторое время, прежде чем вы полностью поймете, что происходит с каждой строкой, но это не требуется.

Теперь, когда вы выполнили эту часть, вам просто нужно поработать сданные, которые Xero возвращает вам, а точнее то, что xero-php (то есть библиотека, которую вы используете) возвращает вам.То, что вы опубликовали, - это не JSON, это просто дамп (текстовое представление) данных, поскольку он существует как объект в вашем коде.

Этот объект является коллекцией счетов, но это всего лишь единичный счетв твоем случае.Он всегда будет возвращать коллекцию, даже если у вас есть действительно конкретные поисковые запросы, но вы всегда можете сделать небольшую проверку, чтобы убедиться, что в коллекции есть только один счет, если вы ожидаете только один.

Итак, длячто вы действительно хотите (сумма счета, имя клиента и его адрес электронной почты), вот следующие строки кода:

сумма счета:

$invoice->Invoices[0]->Total;

имя клиента:

$invoice->Invoices[0]->Contact->Name;

Адрес электронной почты:

$invoice->Invoices[0]->Contact->EmailAddress;

Счета [0] используется для получения первого Счета в Коллекции, поэтому предполагается, что есть только один.Надеюсь, это указывает на правильное направление.

0 голосов
/ 06 мая 2019

Завершено Начало работы со следующим:

function GetInvData ($InvNumber) {
global $xero;
$return = array('AmountDue' => null, 'Customer' => null, 'EmailAddress' => null);

try {
    //throw new Exception("Test");
    $invoices =  $xero->load(Accounting\Invoice::class)
                     ->where('InvoiceNumber',$InvNumber)
                     ->where('Status', 'AUTHORISED')
                     ->execute();

    $invoice = $invoices->first();

    if(empty($invoice)){
        $return = '';
    }
    else {                      
        $invoiceCount = count($invoice);
        if($invoiceCount > 1) {
            throw new \Exception("Managed to find [" . $invoiceCount . "] with Invoice ID [" . $InvNumber . "]. Expected this to be unique.");
        }
        $contact = $invoice->getContact();
        $return['AmountDue'] = $invoice->getAmountDue();
        $return['Customer'] = $contact->getName();
        $return['EmailAddress'] = $contact->getEmailAddress();  
    }   
}

catch(\Exception $ex) {
    $return = LogException($ex);
}

return $return;
}

Спасибо всем за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...