Archiwa tagu: guzzle

Faktura poprzez api ifirma i guzzle

Do wystawiania faktur w serwisie ifirma można z łatwością użyć biblioteki guzzle. Trzeba wcześniej w konfiguracji ifirma wygenerować klucze symetryczne.

Definicja funkcji pomocnicznych:

define('IFIRMA_LOGIN','...');

function ifirma_client() {
	static $client;
	if(!isset($client)) {
		require_once('guzzle.phar');
		$client = new \Guzzle\Http\Client('https://www.ifirma.pl/iapi');
		$cookiePlugin = new \Guzzle\Plugin\Cookie\CookiePlugin(new \Guzzle\Plugin\Cookie\CookieJar\ArrayCookieJar());
		$client->addSubscriber($cookiePlugin); 
	}
	return $client;
}

function ifirma_post($adres,array $data,$typ,$klucz) {
	$client = ifirma_client();
	$requestContent = json_encode($data);

	$login = IFIRMA_LOGIN;
	$url = 'https://www.ifirma.pl/iapi/'.$adres;
	$hmac = hash_hmac('sha1',$url.$login.$typ.$requestContent,pack("H*" , $klucz));
	$client->setDefaultOption('headers', array('Authentication' => 'IAPIS user='.$login.', hmac-sha1='.$hmac));
	$ret = $client->post($adres)->setBody($requestContent,'application/json')->send()->json();
	return $ret;
}

function ifirma_get($adres,$typ,$klucz) {
	$client = ifirma_client();

	$login = IFIRMA_LOGIN;
	$url = 'https://www.ifirma.pl/iapi/'.$adres;
	$hmac = hash_hmac('sha1',$url.$login.$typ,pack("H*" , $klucz));
	$client->setDefaultOption('headers', array('Authentication' => 'IAPIS user='.$login.', hmac-sha1='.$hmac));
	$ret = $client->get($adres)->send()->json();
	return $ret;
}

Wystawienie faktury:

$pobranie = false;
$data = Array(...);
$klucz = '...';

$fak = ifirma_post('faktura'.($pobranie?'wysylka':'kraj').'.json',$data,'faktura',$klucz);

Pobranie numeru właśnie wystawionej faktury:

if(!isset($fak['response']['Identyfikator'])) return false;
$fak_arr = ifirma_get('faktura'.($pobranie?'wysylka':'kraj').'/'.$fak['response']['Identyfikator'].'.json');
print($fak_arr['response']['PelnyNumer']);