Интеграция xero api в php для приложения открытого типа

Я хочу интегрировать xero api для публичного приложения в php. Я застрял с авторизацией приложения 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 и передаю URL-адрес Oauth invoice

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

Теперь я получаю 401 error в ответ, несоответствие маркера oauth

Какую ошибку я делаю?

Ответы

Ответ 1

Если вы получаете ошибки OAuth с Xero, их статья OAuth Issues полезна для обеспечения возможного решения. Тем не менее, "несоответствие токенов" не упоминается - и я не могу найти ссылку на ошибку в сообществе 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);

Я сделал gist с полным процессом, основанным на XOOOOTH-PHP public.php, который демонстрирует как OAuth, так и создание счета-фактуры.