用于公共类型应用程序的 php 中的 xero api 集成

Posted

技术标签:

【中文标题】用于公共类型应用程序的 php 中的 xero api 集成【英文标题】:xero api integration in php for a public type application 【发布时间】:2014-12-02 17:41:51 【问题描述】:

我想在 php 中为公共应用程序集成 xero api。 我被 oauth 应用程序授权卡住了 我从 github https://github.com/XeroAPI/XeroOAuth-PHP 下载了代码(在公共应用程序的 xero api 代码示例上找到) 我正在使用以下代码:

 require('/../lib/XeroOAuth.php');    
    require('/../_config.php');    
    $useragent = "Xero-OAuth-PHP Public";    
    $signatures = array (
            'consumer_key' => 'app_consumre_key',
            'shared_secret' => 'app_secret_key',
            'core_version' => '2.0'
    );    
    $XeroOAuth = new XeroOAuth ( array_merge ( array (
            'application_type' => XRO_APP_TYPE,
            'oauth_callback' => OAUTH_CALLBACK,
            'user_agent' => $useragent 
    ), $signatures ) );    
    include 'tests.php';

我正在传递以下 xml 数据:

$xml = "<Invoices>    
<Invoice>    
<Type>ACCREC</Type>    
<Contact>        
<Name>Martin Hudson</Name>        
</Contact>        
<Date>2013-05-13T00:00:00</Date>        
<DueDate>2013-05-20T00:00:00</DueDate>    
<LineAmountTypes>Exclusive</LineAmountTypes>    
<LineItems>    
<LineItem>    
<Description>Monthly rental for property at 56a Wilkins Avenue</Description>    
<Quantity>4.3400</Quantity>    
<UnitAmount>395.00</UnitAmount>    
<AccountCode>200</AccountCode>    
</LineItem>    
</LineItems>    
</Invoice>    
</Invoices>";    
$params = array (
                'oauth_callback' => OAUTH_CALLBACK 
);    
$response1 = $XeroOAuth->request ( 'GET', $XeroOAuth->url ( 'RequestToken', '' ), $params     );    
if ($XeroOAuth->response ['code'] == 200)    
    
   $outhtoken = $XeroOAuth->response ['response'];    
   $oauth_exp = explode('&',$outhtoken);    
   $oauth_exp_token = explode('=',$oauth_exp[1]);    
   $oauth_token = $oauth_exp_token[1];    
    

首先我是 oauth 令牌,并传入 oauth invoice url

$response = $XeroOAuth->request('POST', $XeroOAuth->url('Invoices', 'core'),  array('oauth_token'=>$oauth_token), $xml);    

现在我收到 401 error 作为响应,oauth 令牌不匹配

我做错了什么?

【问题讨论】:

我建议改用这个库。它实际上是积极维护的,结构良好,易于调试,并且作者实际上在听:github.com/calcinai/xero-php xero 提供的官方 php 库是... 咬舌 ...不好。 【参考方案1】:

如果您在使用 Xero 时遇到 OAuth 错误,他们的OAuth Issues article 有助于提供可能的解决方案。也就是说,没有提到“令牌不匹配” - 我也找不到 Xero 社区中的错误参考。

根据您发布的内容,第一个问题是您是否完成了 OAuth 流程?有三个主要步骤(获取请求令牌、用户授权、获取访问令牌),上面的示例仅显示了第一步。您引用的public.php 文件包含所有步骤。

如果您确实让 OAuth 流程顺利运行,请确保 OAuth 访问令牌和机密随您的请求一起传递(仅该令牌显示在您的示例请求中)。您可以在 XeroOAuth 对象中设置这些,因此最终请求可能如下所示

$XeroOAuth->config ['access_token'] = $oauth_token;
$XeroOAuth->config ['access_token_secret'] = $oauth_token_secret; 
$XeroOAuth->request('POST', $XeroOAuth->url('Invoices', 'core'),  array(), $xml);

我已经使用基于 XeroOauth-PHP public.php 的完整过程制作了 a gist,该过程演示了 OAuth 和创建发票。

【讨论】:

以上是关于用于公共类型应用程序的 php 中的 xero api 集成的主要内容,如果未能解决你的问题,请参考以下文章

将 Azure 网站连接到 Xero 合作伙伴应用程序

Xero API认证无需OAuth2

如何在自定义 Zapier 应用程序中从 Xero 访问特定订单项值?

从授权服务器收到无效响应。 Xero 与 Bagisto 的集成

Beego 公共方法返回JSON

如何向 Xero 添加发票?