fastlabs / xero
简单/基础的PHP库,用于与Xero账单平台交互
v2.1.5
2019-05-21 15:16 UTC
Requires
- php: >=5.5 || >=7.0
- ext-curl: *
This package is auto-updated.
Last update: 2024-09-22 04:17:42 UTC
README
XERO PHP API
简单/基础的PHP库,用于与Xero账单平台交互
安装
composer
要在控制台安装此库,请运行以下命令
composer require fastlabs/xero
或者手动将包添加到你的composer.json文件中的require部分
"fastlabs/xero": "^2.1"
示例基本代码
<?php
require_once('vendor/autoload.php');
\FastLabs\Xero\Application::$XeroConsumerKey = 'your consumer key';
\FastLabs\Xero\Application::$XeroSharedSecret = 'your shared secret';
\FastLabs\Xero\Application::$RSAprivateKey = 'certs/privatekey.pem';
\FastLabs\Xero\Application::$RSApublicKey = 'certs/publickey.cer';
$xeroApp = FastLabs\Xero\Application::Private();
$org = $xeroApp->loadOrganization()->getOne();
print "Access granted to Xero for Organizatio {$o->OrganisationID}";
手册
# git clone https://bitbucket.org/fastlabs/xero-php-api.git
# cd xero-php-api.git
生成证书文件
cd certs
openssl genrsa -out privatekey.pem 1024
openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 1825
openssl pkcs12 -export -out public_privatekey.pfx -inkey privatekey.pem -in publickey.cer
现在您可以在Xero中创建您的私有应用
- 访问Xero https://www.xero.com/ 并注册免费账户
- 访问 https://developer.xero.com/myapps/ 并创建一个私有应用
- 上传您刚刚创建的.cer文件
现在您可以配置应用
cd ..
vi conf.php
您的conf.php文件应该是这样的
<?php
/* configuration for private app */
\FastLabs\Xero\Application::$XeroConsumerKey = 'PRIVATE_APPLICATION__CONSUMER_KEY';
\FastLabs\Xero\Application::$XeroSharedSecret = 'PRIVATE_APPLICATION__CONSUMER_SECRET';
\FastLabs\Xero\Application::$RSAprivateKey = __DIR__.'/certs/privatekey.pem';
\FastLabs\Xero\Application::$RSApublicKey = __DIR__.'/certs/publickey.cer';
/* configuration for public app */
// \FastLabs\Xero\Application::$XeroConsumerKey = 'PUBLIC_APPLICATION__CONSUMER_KEY';
// \FastLabs\Xero\Application::$XeroSharedSecret = 'PUBLIC_APPLICATION__CONSUMER_SECRET';
// \FastLabs\Xero\Application::$OauthCallBack = 'http://127.0.0.1:8000/?callback';
现在,让我们试试看...
# cd public
# php -S localhost:8000
在浏览器中打开 https://:8000
私有应用初始化
<?php
\FastLabs\Xero\Application::$XeroConsumerKey = 'PRIVATE_APPLICATION__CONSUMER_KEY';
\FastLabs\Xero\Application::$XeroSharedSecret = 'PRIVATE_APPLICATION__CONSUMER_SECRET';
\FastLabs\Xero\Application::$RSAprivateKey = __DIR__.'/certs/privatekey.pem';
\FastLabs\Xero\Application::$RSApublicKey = __DIR__.'/certs/publickey.cer';
$xeroApp = \FastLabs\Xero\Application::Private();
// check organization name (also double check if login is valid)
$org = $xeroApp->loadOrganization();
$o = $org->getOne();
if (!$o) {
if ($errors = $org->getErrors()) {
if (array_key_exists(401, $errors)) {
echo 'You are not authorized?! please check your configuration';
exit;
}
}
}
echo "Access via Public application for organization {$o->Name} ( OrganisationID: {$o->OrganisationID} )";
print(" {$o->Name} - {$o->OrganisationID}");
公共应用初始化及会话登录/登出示例
<?php
// \FastLabs\Xero\Application::$XeroConsumerKey = 'PUBLIC_APPLICATION__CONSUMER_KEY';
// \FastLabs\Xero\Application::$XeroSharedSecret = 'PUBLIC_APPLICATION__CONSUMER_SECRET';
// \FastLabs\Xero\Application::$OauthCallBack = 'http://127.0.0.1:8000/?callback';
$xeroApp = \FastLabs\Xero\Application::Public();
// logout function
if (isset($_REQUEST['wipe'])) {
session_destroy();
header("Location: /");
exit;
}
// check if already logged-in
if (!$xeroApp->isLogged()) {
// check if is a callBack from xero (oAuth process step 2)
if (isset($_REQUEST['oauth_token']))
$xeroApp->checkCallBack();
if (isset($_REQUEST['authenticate'])) {
echo '<a href="' .$xeroApp->getLoginUrl().'">Access via Xero</a>';
} else {
echo '<a href="?authenticate=1">Start the login process?</a>';
}
exit;
}
// check organization name (also double check if login is still valid or expired)
$org = $xeroApp->loadOrganization();
$o = $org->getOne();
if (!$o) {
if ($errors = $org->getErrors()) {
if (array_key_exists(401, $errors)) {
print('Session expired... <a href="?wipe=1">Reconnect</a>');
exit;
}
}
}
echo "Access via Public application for organization {$o->Name} ( OrganisationID: {$o->OrganisationID} )";
print(" {$o->Name} - {$o->OrganisationID}");