使用 Xero API - Private App 获取发票数据

Get invoice data with Xero API - Private App

我正在尝试建立一个在线表格,用户可以输入他们的发票号码,然后网络服务器将与 Xero API 交互以获取发票详细信息并填充一些额外的付款字段。

我已经构建并准备好表单逻辑,但是我不知道如何开始使用 Xero API。

我已经创建了一个私人应用程序并拥有所需的密钥,但我找不到任何关于如何在 PHP 中实际设置 API 调用的文档。

如有任何帮助,我们将不胜感激。

**** 更新 ****

我能够使用以下方法让 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] => 
                                )

                        )

                )

        )

)

你几乎是在问如何做人们不喜欢这里的整个事情。很好地完成了 API 调用,您可能需要一段时间才能完全理解每一行的内容,但这不是必需的。

既然你已经完成了那部分,你只需要处理 Xero 返回给你的数据,而不是 xero-php(你正在使用的库)给你的数据背部。您发布的内容不是 JSON,它只是数据的转储(文本表示),因为它作为对象存在于您的代码中。

该对象是发票集合,但在您的情况下它只是一张单数发票。它总是 return 一个集合,即使您有非常具体的搜索查询,但您可以随时检查一下以确保集合只有一张发票,如果您只期望一张发票。

所以,对于您真正想要的(发票金额、客户姓名和他们的电子邮件地址),下面是代码行。

发票金额:

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

客户姓名:

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

电子邮件地址:

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

Invoices[0] 用于获取集合中的第一个 Invoice,因此假定只有一个。希望这能为您指明正确的方向。

最终让它与以下内容一起工作:

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

感谢大家的帮助。