php - Quickbooks Online API PHP SDK 无法使用从查询返回的值更新 Bill
问题描述
根据 QBO docs,为了更新账单的内容,你应该
Use this operation to update any of the writable fields of an existing bill object. The request body must include all writable fields of the existing object as returned in a read response. Writable fields omitted from the request body are set to NULL. The ID of the object to update is specified in the request body.
我们像这样查询账单
SELECT * FROM Bill where DocNumber='150577' and VendorRef='156'
它返回以下内容:
(
[0] => QuickBooksOnline\API\Data\IPPBill Object
(
[PayerRef] =>
[SalesTermRef] =>
[DueDate] => 2020-10-22
[RemitToAddr] =>
[ShipAddr] =>
[Balance] => 89.59
[HomeBalance] => 89.59
[BillEx] =>
[VendorRef] => 156
[APAccountRef] => 46
[TotalAmt] => 89.59
[BillEmail] =>
[ReplyEmail] =>
[Memo] =>
[GlobalTaxCalculation] => TaxExcluded
[DocNumber] => 150577
[TxnDate] => 2020-10-22
[DepartmentRef] =>
[CurrencyRef] => CAD
[ExchangeRate] => 1
[PrivateNote] =>
[TxnStatus] =>
[LinkedTxn] =>
[Line] => Array
(
[0] => QuickBooksOnline\API\Data\IPPLine Object
(
[Id] => 1
[LineNum] => 1
[Description] =>
[Amount] => 54.02
[LinkedTxn] =>
[DetailType] => AccountBasedExpenseLineDetail
[PaymentLineDetail] =>
[DiscountLineDetail] =>
[TaxLineDetail] =>
[SalesItemLineDetail] =>
[DescriptionLineDetail] =>
[ItemBasedExpenseLineDetail] =>
[AccountBasedExpenseLineDetail] => QuickBooksOnline\API\Data\IPPAccountBasedExpenseLineDetail Object
(
[CustomerRef] =>
[ClassRef] =>
[AccountRef] => 40
[BillableStatus] => NotBillable
[MarkupInfo] =>
[TaxAmount] =>
[TaxCodeRef] => 22
[TaxInclusiveAmt] =>
[ExpenseDetailLineDetailEx] =>
)
[DepositLineDetail] =>
[PurchaseOrderItemLineDetail] =>
[SalesOrderItemLineDetail] =>
[ItemReceiptLineDetail] =>
[JournalEntryLineDetail] =>
[GroupLineDetail] =>
[SubTotalLineDetail] =>
[TDSLineDetail] =>
[CustomField] =>
[LineEx] =>
)
[1] => QuickBooksOnline\API\Data\IPPLine Object
(
[Id] => 2
[LineNum] => 2
[Description] =>
[Amount] => 23.88
[LinkedTxn] =>
[DetailType] => AccountBasedExpenseLineDetail
[PaymentLineDetail] =>
[DiscountLineDetail] =>
[TaxLineDetail] =>
[SalesItemLineDetail] =>
[DescriptionLineDetail] =>
[ItemBasedExpenseLineDetail] =>
[AccountBasedExpenseLineDetail] => QuickBooksOnline\API\Data\IPPAccountBasedExpenseLineDetail Object
(
[CustomerRef] =>
[ClassRef] =>
[AccountRef] => 37
[BillableStatus] => NotBillable
[MarkupInfo] =>
[TaxAmount] =>
[TaxCodeRef] => 22
[TaxInclusiveAmt] =>
[ExpenseDetailLineDetailEx] =>
)
[DepositLineDetail] =>
[PurchaseOrderItemLineDetail] =>
[SalesOrderItemLineDetail] =>
[ItemReceiptLineDetail] =>
[JournalEntryLineDetail] =>
[GroupLineDetail] =>
[SubTotalLineDetail] =>
[TDSLineDetail] =>
[CustomField] =>
[LineEx] =>
)
[2] => QuickBooksOnline\API\Data\IPPLine Object
(
[Id] => 3
[LineNum] => 3
[Description] =>
[Amount] => 0
[LinkedTxn] =>
[DetailType] => AccountBasedExpenseLineDetail
[PaymentLineDetail] =>
[DiscountLineDetail] =>
[TaxLineDetail] =>
[SalesItemLineDetail] =>
[DescriptionLineDetail] =>
[ItemBasedExpenseLineDetail] =>
[AccountBasedExpenseLineDetail] => QuickBooksOnline\API\Data\IPPAccountBasedExpenseLineDetail Object
(
[CustomerRef] =>
[ClassRef] =>
[AccountRef] => 94
[BillableStatus] => NotBillable
[MarkupInfo] =>
[TaxAmount] =>
[TaxCodeRef] => 22
[TaxInclusiveAmt] =>
[ExpenseDetailLineDetailEx] =>
)
[DepositLineDetail] =>
[PurchaseOrderItemLineDetail] =>
[SalesOrderItemLineDetail] =>
[ItemReceiptLineDetail] =>
[JournalEntryLineDetail] =>
[GroupLineDetail] =>
[SubTotalLineDetail] =>
[TDSLineDetail] =>
[CustomField] =>
[LineEx] =>
)
)
[TxnTaxDetail] => QuickBooksOnline\API\Data\IPPTxnTaxDetail Object
(
[DefaultTaxCodeRef] =>
[TxnTaxCodeRef] =>
[TotalTax] => 11.69
[TaxLine] => QuickBooksOnline\API\Data\IPPLine Object
(
[Id] =>
[LineNum] =>
[Description] =>
[Amount] => 11.69
[LinkedTxn] =>
[DetailType] => TaxLineDetail
[PaymentLineDetail] =>
[DiscountLineDetail] =>
[TaxLineDetail] => QuickBooksOnline\API\Data\IPPTaxLineDetail Object
(
[TaxRateRef] => 37
[PercentBased] => true
[TaxPercent] => 15
[NetAmountTaxable] => 77.90
[TaxInclusiveAmount] =>
[OverrideDeltaAmount] =>
[ServiceDate] =>
[TaxLineDetailEx] =>
)
[SalesItemLineDetail] =>
[DescriptionLineDetail] =>
[ItemBasedExpenseLineDetail] =>
[AccountBasedExpenseLineDetail] =>
[DepositLineDetail] =>
[PurchaseOrderItemLineDetail] =>
[SalesOrderItemLineDetail] =>
[ItemReceiptLineDetail] =>
[JournalEntryLineDetail] =>
[GroupLineDetail] =>
[SubTotalLineDetail] =>
[TDSLineDetail] =>
[CustomField] =>
[LineEx] =>
)
)
[TxnSource] =>
[TaxFormType] =>
[TaxFormNum] =>
[TransactionLocationType] =>
[Id] => 282835
[SyncToken] => 0
[MetaData] => QuickBooksOnline\API\Data\IPPModificationMetaData Object
(
[CreatedByRef] =>
[CreateTime] => 2020-10-22T14:40:58-07:00
[LastModifiedByRef] =>
[LastUpdatedTime] => 2020-10-22T14:40:58-07:00
[LastChangedInQB] =>
[Synchronized] =>
)
[CustomField] =>
[AttachableRef] =>
[domain] =>
[status] =>
[sparse] =>
)
)
然后我们进行一些修改并尝试使用重新发布更新的数据
$out = Bill::update($qb_data_original, $qb_data_updated);
$config = $oAuthKeys->getAsArray();
$resultingBillObj = $dataService->Update($out);
print_r($resultingBillObj);
但是我们得到的错误说
PHP Fatal error: Uncaught Exception: Can't convert Passed Parameter to IPPReferenceType. in /var/www/html/vendor/quickbooks/v3-php-sdk/src/Facades/FacadeHelper.php:293
Stack trace:
#0 [internal function]: QuickBooksOnline\API\Facades\FacadeHelper::getIPPReferenceTypeBasedOnArray(NULL, 'PayerRef')
#1 /var/www/html/vendor/quickbooks/v3-php-sdk/src/Facades/FacadeHelper.php(195): ReflectionMethod->invoke(NULL, NULL, 'PayerRef')
#2 /var/www/html/vendor/quickbooks/v3-php-sdk/src/Facades/FacadeHelper.php(117): QuickBooksOnline\API\Facades\FacadeHelper::getComplexListObject('getIPPReference...', 'PayerRef', NULL)
#3 /var/www/html/vendor/quickbooks/v3-php-sdk/src/Facades/Bill.php(8): QuickBooksOnline\API\Facades\FacadeHelper::reflectArrayToObject('Bill', Array, true)
#4 /var/www/html/vendor/quickbooks/v3-php-sdk/src/Facades/Bill.php(17): QuickBooksOnline\API\Facades\Bill::create(Array)
#5 /var/www/html/qb_match.php(214): QuickBooksOnline\API\Facades\Bill::update(Object(QuickBooksOnline\API\Data\IPPBill), Array)
#6 {main}
thrown in /var/www/html/vendor/quickbooks/v3-php-sdk/src/Facades/FacadeHelper.php on line 293
似乎它被困在PayerRef
结果中哪个是第一个值。
真正奇怪的是,在 API Explorer 上,当我们运行相同的查询时,它返回的数据集要小得多(它不包括“PayerRef”值),然后如果我们将这些数据发回 API Explorer(在更新部分)它工作正常。这是 API 资源管理器的结果
{
"QueryResponse": {
"Bill": [
{
"DueDate": "2020-10-22",
"Balance": 89.59,
"HomeBalance": 89.59,
"domain": "QBO",
"sparse": false,
"Id": "282835",
"SyncToken": "0",
"MetaData": {
"CreateTime": "2020-10-22T14:40:58-07:00",
"LastUpdatedTime": "2020-10-22T14:40:58-07:00"
},
"DocNumber": "150577",
"TxnDate": "2020-10-22",
"CurrencyRef": {
"value": "CAD",
"name": "Canadian Dollar"
},
"ExchangeRate": 1,
"Line": [
{
"Id": "1",
"LineNum": 1,
"Amount": 54.02,
"LinkedTxn": [],
"DetailType": "AccountBasedExpenseLineDetail",
"AccountBasedExpenseLineDetail": {
"AccountRef": {
"value": "40",
"name": "Purchases"
},
"BillableStatus": "NotBillable",
"TaxCodeRef": {
"value": "22"
}
}
},
{
"Id": "2",
"LineNum": 2,
"Amount": 23.88,
"LinkedTxn": [],
"DetailType": "AccountBasedExpenseLineDetail",
"AccountBasedExpenseLineDetail": {
"AccountRef": {
"value": "37",
"name": "Shipping"
},
"BillableStatus": "NotBillable",
"TaxCodeRef": {
"value": "22"
}
}
},
{
"Id": "3",
"LineNum": 3,
"Amount": 0,
"LinkedTxn": [],
"DetailType": "AccountBasedExpenseLineDetail",
"AccountBasedExpenseLineDetail": {
"AccountRef": {
"value": "94",
"name": "otherFees"
},
"BillableStatus": "NotBillable",
"TaxCodeRef": {
"value": "22"
}
}
}
],
"TxnTaxDetail": {
"TotalTax": 11.69,
"TaxLine": [
{
"Amount": 11.69,
"DetailType": "TaxLineDetail",
"TaxLineDetail": {
"TaxRateRef": {
"value": "37"
},
"PercentBased": true,
"TaxPercent": 15,
"NetAmountTaxable": 77.9
}
}
]
},
"VendorRef": {
"value": "156",
"name": "vendora"
},
"APAccountRef": {
"value": "46",
"name": "Accounts Payable (A/P)"
},
"TotalAmt": 89.59,
"GlobalTaxCalculation": "TaxExcluded"
}
],
"startPosition": 1,
"maxResults": 1,
"totalCount": 1
},
"time": "2020-11-22T10:01:06.526-08:00"
}
那么,这个错误的原因是什么?是不是因为数据集是意外的,如果是这样,我们如何返回出现在 API Explorer 中的相同数据集?
谢谢
解决方案
推荐阅读
- reactjs - 为什么我会收到“未能找到有效的摘要”错误?
- android - libc:pthread_create 失败:无法分配 1040384 字节堆栈:内存不足
- google-analytics - 什么是属性点击量?
- java - 使用 maven 和多个 git 存储库 - 减轻痛苦
- terraform - 如何引用导入的 terraform 资源
- javascript - 自动装卸元件
- python - 如何将对象类型映射到具有大型数据集的 pandas.DataFrame 中的 int64
- javascript - 如何检测OLED显示器?
- excel - 如何向下循环运行直到右侧的单元格为空 - VBA excel
- c# - C# 中是否有与 IsNullOrEmpty 相反的内容