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