Проблема создания счета в Freeagent с использованием PHP oAuth2 - PullRequest
0 голосов
/ 08 мая 2019

Я использую PHP-OAuth2 из https://github.com/adoy/PHP-OAuth2 Это предложено Freeagent в их документах.Я смог настроить аутентификацию, получить токен, сохранить дату окончания срока действия, а затем настроить процесс автоматической загрузки нового токена по истечении срока действия текущего.

Пока все хорошо!

Я также смог установить контакты в Песочнице и затем перечислить их в своем веб-приложении, извлекая их из Freeagent.

Проблема, с которой я столкнулся, заключается в создании нового счета иЯ подозреваю, что причиной этого является отсутствие у меня знаний oAuth, несмотря на то, что я читаю документы по API и стараюсь найти решение.

Вот что я пытаюсь сделать, чтобы создать счет (PHP):

$client = new OAuth2\Client(CLIENTID, SECRET);
$params = array($xml); // See below

$response = $client->fetch("https://api.sandbox.freeagent.com/v2/invoices",
    $params,
    'GET',
    array(
        "Authorization" => "Bearer $freeagentaccesstoken",
        "User-Agent" => "My web app",
        "Content-Type" => "application/xml",
        "Accept" => "application/json"
    )
);

Я хочу отправить запрос на выставление счета в XML и получить ответ в формате JSON.

Мой XML ($ xml в приведенном выше) отформатирован следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
  <invoice>
    <contact>https://api.sandbox.freeagent.com/v2/contacts/58019</contact>
    <dated-on type="datetime">2019-05-07</dated-on>
    <payment_terms_in_days>15<payment_terms_in_days>
    <currency>GBP</currency>
    <net-value type="decimal">0.0</net-value>
    <total-value type="decimal">20.00</total-value>
    <paid-value type="decimal">0.0</paid-value>
    <due-value type="decimal">20.00</due-value>                     
    <invoice-items type="array">
       <invoice-item>
          <description>Description will go here</description>
          <item-type>Hours</item-type>
          <price type="decimal">20.00</price>
          <quantity type="decimal">1</quantity>
      </invoice-item>
    </invoice-items>
  </invoice>

При отправке возвращается:

Array ( [result] => Array ( [invoices] => Array ( ) ) [code] => 200 [content_type] => application/Jon; charset=utf-8 )

Счета не создаются (я подозреваю, что пустые скобки в массиве счетов-фактур - пустая раздача, хотя в помощь не выдается никаких ошибок)я).

Затем я надеялся получить номер счета-фактуры (который я думаю, что называется "ссылка" в Freeagent), используя что-то вроде этого:

foreach ($response['result']['invoices'] as $item) {
    $invoicenumber=$item['reference'];
}

Но я не получаютак далеко, и я подозреваю, что есть лучший способ получить это, когда я в конце концов это сделаю.

Freeagent API не дает конкретных примеров кода, и интернет не очень помог новичку oAuth, как я.Я бы очень признателен за помощь здесь.Спасибо!

Ответы [ 2 ]

0 голосов
/ 09 мая 2019

Я нашел решение, и это было использовать CURL для отправки моего запроса.На всякий случай, если у кого-то есть подобная проблема, вот пример кода, который может помочь:

$ch=curl_init('https://api.sandbox.freeagent.com/v2/invoices');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   'Authorization: Bearer '.$freeagentaccesstoken,
   'Content-Type: application/xml',
   'Accept: application/json',
   'User-Agent: My web app',
   'Content-Length: '.strlen($xml))
);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);

//execute post
$result=curl_exec($ch);

//close connection
curl_close($ch);

echo $result;

Я также удалил некоторые части переменной $ xml, но не знаю, имело ли это какое-либо значение.Вот для полного решения:

$xml = "
<?xml version=\"1.0\" encoding=\"UTF-8\"?>
   <invoice>
      <contact>https://api.sandbox.freeagent.com/v2/contacts/58019</contact>
      <dated-on type=\"datetime\">2019-05-07</dated-on>
      <payment_terms_in_days>15</payment_terms_in_days>
      <total-value type=\"decimal\">20.0</total-value>
      <due-value type=\"decimal\">20.0</due-value>                      
      <invoice-items type=\"array\">
         <invoice-item>
            <description>Description will go here</description>
            <item-type>Services</item-type>
            <price type=\"decimal\">20.0</price>
            <quantity type=\"integer\">1</quantity>
         </invoice-item>
      </invoice-items>
   </invoice>";
0 голосов
/ 08 мая 2019

Я ничего не знаю о PHP-OAuth2 или FreeAgent, но я просмотрел документацию по API для счетов .

Я заметил, что единственное заметное различие между получением, созданием и обновлением счетов-фактур - это запросы GET , POST и PUT :

GET https://api.freeagent.com/v2/invoices
POST https://api.freeagent.com/v2/invoices
PUT https://api.freeagent.com/v2/invoices/:id  

Вы говорите, что хотите «создать счет», но вы используете 'GET' в $client->fetch().

Почему бы не попробовать 'POST'? Я не уверен, что это все равно будет fetch()?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...