I want to integrate xero api for public application in php.
I am stuck with oauth application authorization
I have download code from github https://github.com/XeroAPI/XeroOAuth-PHP (find on xero api code sample for public application)
I am using following code:
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';
I am passing following xml data:
$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];
}
First I am oauth token, and passing into oauth invoice url
$response = $XeroOAuth->request('POST', $XeroOAuth->url('Invoices', 'core'), array('oauth_token'=>$oauth_token), $xml);
Now I am getting 401 error
in response, oauth token mismatch
What mistake I am doing?
If you are getting OAuth errors with Xero, their OAuth Issues article is helpful to provide a possible solution. That said, "token mismatch" isn't mentioned - nor could I find reference to the error in the Xero community.
Based on what you've posted, the first question is if you've completed the OAuth process? There are three main steps (get a request token, user authorisation, get an access token) and your example above only shows the first step. The public.php file you've referenced contains all the steps.
If you do have the OAuth process running smoothly, then make sure the OAuth access token and secret are being passed with your request (only the token is shown in your sample request). You can set these in the XeroOAuth object, so the final request could look like
$XeroOAuth->config ['access_token'] = $oauth_token;
$XeroOAuth->config ['access_token_secret'] = $oauth_token_secret;
$XeroOAuth->request('POST', $XeroOAuth->url('Invoices', 'core'), array(), $xml);
I've made a gist with the complete process based off the XeroOauth-PHP public.php that demonstrates both OAuth and creating an invoice.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With