fastlabs/xero

简单/基础的PHP库,用于与Xero账单平台交互

v2.1.5 2019-05-21 15:16 UTC

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中创建您的私有应用

  1. 访问Xero https://www.xero.com/ 并注册免费账户
  2. 访问 https://developer.xero.com/myapps/ 并创建一个私有应用
  3. 上传您刚刚创建的.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}");