【问题标题】:creating an invoice using OAuth2 in xero在 xero 中使用 OAuth2 创建发票
【发布时间】:2019-12-03 01:32:24
【问题描述】:

我正在关注此处提供的代码示例 - https://github.com/XeroAPI/xero-php-oauth2/blob/master/docs/Api/AccountingApi.md#createInvoice

但是,我总是收到以下错误消息:

“错误编号”:17,

“类型”:“NoDataProcessedException”,

"Message": "没有为这个端点处理数据。这个 端点期望在请求中指定发票数据 身体。”

任何想法为什么会这样。

我在 $invoice 数据周围添加了引号

代码如下:

<?php
ini_set('display_errors', 'On');
require 'vendor/autoload.php';
require_once('storage.php');

// Storage Classe uses sessions for storing token > extend to your DB of choice
$storage = new StorageClass();
$xeroTenantId = (string)$storage->getSession()['tenant_id'];

if ($storage->getHasExpired()) {
$provider = new \League\OAuth2\Client\Provider\GenericProvider([
  'clientId'                => 'xxx',   
  'clientSecret'            => 'xxx-QOnb_kvBiQEb',
  'redirectUri'             => 'http://localhost/xero/callback.php',
  'urlAuthorize'            => 'https://login.xero.com/identity/connect/authorize',
  'urlAccessToken'          => 'https://identity.xero.com/connect/token',
  'urlResourceOwnerDetails' => 'https://api.xero.com/api.xro/2.0/Organisation'
]);

$newAccessToken = $provider->getAccessToken('refresh_token', [
  'refresh_token' => $storage->getRefreshToken()
]);

// Save my token, expiration and refresh token
$storage->setToken(
  $newAccessToken->getToken(),
  $newAccessToken->getExpires(), 
  $xeroTenantId,
  $newAccessToken->getRefreshToken()
);
}

$config = XeroAPI\XeroPHP\Configuration::getDefaultConfiguration()->setAccessToken( (string)$storage->getSession()['token'] );
$config->setHost("https://api.xero.com/api.xro/2.0");        

$apiInstance = new XeroAPI\XeroPHP\Api\AccountingApi(
  new GuzzleHttp\Client(),
  $config
);

$invoices = '{
            "Invoices": [{
              "Type": "ACCREC",
              "Contact": {
                "Name": "David Camerotto"
              },
              "LineItems": [{
                "Description": "Deposit for VBA Course",
                "Quantity": 1.0,
                "UnitAmount": 200.0,
                "AccountCode": "200",
                "TaxType": "NONE",
                "LineAmount": 200.0
              }],
              "Date": "2019-12-11",
              "DueDate": "2019-12-21",
              "Reference": "Website Design",
              "Status": "AUTHORISED"
            }]
          }';

$summarize_errors = True; 


try {
  $result = $apiInstance->createInvoices($xeroTenantId, $invoices, $summarize_errors);
  print_r($result);
} catch (Exception $e) {
  echo 'Exception when calling AccountingApi->createInvoice: ', $e->getMessage(), PHP_EOL;
  var_dump($e);
}



?>

【问题讨论】:

  • 你能发布你的确切代码吗?
  • 您好,请您发表您的答案。

标签: php oauth-2.0 xero-api


【解决方案1】:

如果您再次查看该示例,您会发现您构建的 $invoice 变量不正确,因此当 SDK 通过 $invoice 变量将其发送到 API 时,它会错误地进行序列化,从而留下请求正文API 无法使用。

在您的代码中,您将 $invoice 变量构建为字符串,而示例将变量构建为对象。如果您尝试以相同的方式构建变量,它应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多