inFakt.pl API - dodawanie faktur.

0

Na początek zaznaczę, że używam tej biblioteki do obsługi OAuth -> https://code.google.com/p/oauth-php/

Mój problem polega na tym, że potrzebuję dodać fakturę do systemu inFakt.pl poprzez aplikacje webową.
Udaje mi się wysłać zapytanie do serwera, ale nie potrafię przekazać danych (czyli stringu JSON) poprzez metodę "POST".

Funkcja łącząca się z inFaktem:

public function connectAction() {
$OAuth = new OAuth();
		
		$apiUrl = 'https://www.infakt.pl/api/v2/';
		$consKey = '*****';
		$consSecret = 'C6EbJbI7maxjVnN56dEIUVVzFxCznuLoFz0NaspW';
		$requestTokenUrl = 'https://www.infakt.pl/oauth/request_token';
		$accessTokenUrl = 'https://www.infakt.pl/oauth/access_token';
		$authorizeUrl = 'https://www.infakt.pl/oauth/authorize';
		$userid = $_SESSION['AUTH']['id'];
		
		$options = array(
				'server' => $GLOBALS['nsconf']['database']['host'],
				'username' => $GLOBALS['nsconf']['database']['user'],
				'password' => $GLOBALS['nsconf']['database']['password'],
				'database' => $GLOBALS['nsconf']['database']['dbname'] 
		);
		$store = OAuthStore::instance('PostgreSQL', $options);
		$optional_filter_text = '';
		$server = array(
				'consumer_key' => $consKey,
				'consumer_secret' => $consSecret,
				'server_uri' => $apiUrl,
				'signature_methods' => 'HMAC-SHA1',
				'request_token_uri' => $requestTokenUrl,
				'access_token_uri' => $accessTokenUrl,
				'authorize_uri' => $authorizeUrl 
		);
		
		// $consumerKey = $store->updateServer($server, $userid);
		
		$token = OAuthRequester::requestRequestToken($consKey, $userid);
		
		$action = $_GET['action'];
		$callback_uri = '******';
		
		if ($action=='invoice')
			$callback_uri .= 'invoice';
		else if ($action=='callback')
			$callback_uri .= 'callback';
		else if ($action=='createInvoice')
			$callback_uri .= 'createInvoice';
		else
			$callback_uri .= 'noAction';
		
		$callback_uri .= '?consumer_key='.rawurlencode($consKey).'&usr_id='.intval($userid);
		
		if (! empty($token['authorize_uri'])) {
			if (strpos($token['authorize_uri'], '?')) {
				$uri = $token['authorize_uri'].'&';
			} else {
				$uri = $token['authorize_uri'].'?';
			}
			$uri .= 'oauth_token='.rawurlencode($token['token']).'&oauth_callback='.rawurlencode($callback_uri);
		} else {
			$uri = $callback_uri.'&oauth_token='.rawurlencode($token['token']);
		}
		header('Location: '.$uri);
		exit();
}

Tak wygląda funkcja mająca tworzyć nową fakturę.

public function createInvoiceAction() {
		$OAuth = new OAuth();
		$userid = $_SESSION['AUTH']['id'];
		$options = array(
				'server' => $GLOBALS['nsconf']['database']['host'],
				'username' => $GLOBALS['nsconf']['database']['user'],
				'password' => $GLOBALS['nsconf']['database']['password'],
				'database' => $GLOBALS['nsconf']['database']['dbname'] 
		);
		$store = OAuthStore::instance('PostgreSQL', $options);
		$consumer_key = $_GET['consumer_key'];
		$oauth_token = $_GET['oauth_token'];
		$user_id = $_GET['usr_id'];
		try {
			OAuthRequester::requestAccessToken($consumer_key, $oauth_token, $user_id);
		} catch (OAuthException $e) {
			pre($e);
		}
		
		$params = array(
				'method' => 'ping' 
		);		
		
		$string = array(
				'invoice'=>array(
						'client_id' => **,
						'status' => 'szkic',
						'rodzaj_faktury' => 'Faktura VAT',
						'sposob_platnosci' => 'Got%C3%B3wka',
						'services' => array(
								array(
										'nazwa' => 'Produkt A',
										'ilosc' => 1,
										'stawka_vat' => 22,
										'wartosc_netto' => 100 
								) 
						) 
				)
		);
		
		$json_string = json_encode($string);
		//prex($json_string);
		
		$curlOptions = array();
		
		$createRequestUrl = 'https://www.infakt.pl/api/v2/invoices/create.json';
		
		$createRequest = new OAuthRequester($createRequestUrl, 'POST', $params, $json_string);
		$createResult = $createRequest->doRequest($user_id);
		
		prex($createResult);
		
	}

Wywołanie tego kodu powoduję wyświetlenie się błędu:
Invaild OAuth Request

0

Rozwiązanie:

Gdyby ktoś miał jeszcze taki sam problem z v2 API inFaktu przy użyciu tej biblioteki to podam rozwiązanie.
W pliku biblioteki

OAuthRequestSigner.php

w linii 140-141 tworzy się nagłówek xoauth_body_signature

W moim przypadku wystarczyło to wykomentować, tak żeby się on nie tworzył. Powinno wszystko działać prawidłowo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1