step 6 of this guide을 따라 php sdk를 사용하여 고객의 정보를 업데이트합니다. 아이디어는 ID로 고객을 검색하고 해당 고객에 대한 업데이트 요청을 발행하는 것입니다. 내 코드 :QBO IPP PHP SDK QuickBooks V3 API - 고객을 업데이트 할 수 없습니다.
$ipp_customer = $data_service->FindById(
new IPPCustomer(array('Id' => '120'), true)
);
$ipp_customer->sparse = 'true';
$ipp_customer->DisplayName = 'Carrier Name';
$data_service->Update($ipp_customer);
업데이트에 대한 응답에 오류 (2090 오류)가 표시됩니다. SDK가 업데이트 요청을 생성 할 때 SyncToken에 0을 채우지 않는 것 같습니다. 이로 인해 유효성 검증 오류가 발생했습니다.
그런 다음 PHP SDK (/v3-php-sdk-2.0.1/_Samples/CustomerUpdate.php)에서 제공하는 샘플 코드를 살펴 보았습니다. 샘플 코드는 $dataService->Add
을 사용하여 업데이트를 수행합니다. 결과로 Add
을 호출하면 SyncToken
이 없으므로 샘플 코드가 적용되지 않는 것 같습니다.
SDK를 올바르게 사용하여 고객을 업데이트하는 방법은 무엇입니까?
요청/응답 메시지는 다음과 같습니다 :
REQUEST BODY
=============
<?xml version="1.0" encoding="UTF-8"?>
<ns0:Customer xmlns:ns0="http://schema.intuit.com/finance/v3" sparse="true">
<ns0:Id>120</ns0:Id>
<ns0:SyncToken/>
<ns0:MetaData>
<ns0:CreateTime/>
<ns0:LastUpdatedTime/>
</ns0:MetaData>
<ns0:FullyQualifiedName/>
<ns0:DisplayName>Carrier Name</ns0:DisplayName>
<ns0:PrintOnCheckName/>
<ns0:Active>true</ns0:Active>
<ns0:PrimaryPhone>
<ns0:FreeFormNumber/>
</ns0:PrimaryPhone>
<ns0:Fax>
<ns0:FreeFormNumber/>
</ns0:Fax>
<ns0:Taxable>false</ns0:Taxable>
<ns0:BillAddr>
<ns0:Id>87</ns0:Id>
<ns0:Line1/>
<ns0:Line2/>
<ns0:City/>
<ns0:CountrySubDivisionCode/>
<ns0:PostalCode/>
<ns0:Lat/>
<ns0:Long/>
</ns0:BillAddr>
<ns0:Job>false</ns0:Job>
<ns0:BillWithParent>false</ns0:BillWithParent>
<ns0:Balance>0</ns0:Balance>
<ns0:BalanceWithJobs>0</ns0:BalanceWithJobs>
<ns0:PreferredDeliveryMethod/>
</ns0:Customer>
RESPONSE BODY
=============
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2014-01-21T12:53:53.838-08:00">
<Fault type="ValidationFault">
<Error code="2090" element="SyncToken">
<Message>Invalid Number</Message>
<Detail>Invalid Number : </Detail>
</Error>
</Fault>
</IntuitResponse>
감사합니다. 여기에 편집 한
는 findById 메소드 호출의 결과로 응답 기관입니다 :
RESPONSE BODY
=============
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<IntuitResponse xmlns="http://schema.intuit.com/finance/v3" time="2014-01-24T10:21:58.493-08:00">
<Customer domain="QBO" sparse="false">
<Id>120</Id>
<SyncToken>13</SyncToken>
<MetaData>
<CreateTime>2014-01-17T14:08:42-08:00</CreateTime>
<LastUpdatedTime>2014-01-24T09:27:00-08:00</LastUpdatedTime>
</MetaData>
<FullyQualifiedName>Carrier Name Modif</FullyQualifiedName>
<DisplayName>Carrier Name Modif</DisplayName>
<PrintOnCheckName>Carrier Name</PrintOnCheckName>
<Active>true</Active>
<Taxable>false</Taxable>
<BillAddr>
<Id>87</Id>
</BillAddr>
<Job>false</Job>
<BillWithParent>false</BillWithParent>
<Balance>0</Balance>
<BalanceWithJobs>0</BalanceWithJobs>
<PreferredDeliveryMethod>Print</PreferredDeliveryMethod>
</Customer>
</IntuitResponse>
내가 샘플 스크립트 (CustomerUpdate.php)를 사용하여 내 응용 프로그램을 사용하여 SDK를 통해 디버깅이 편집 코드 (cakephp webapp). 인 print_r를 사용 findById 메소드에 샘플 스크립트의 호출은 SyncToken 출력을 가진 IPPCustomer 제작 :
[SyncToken] => 46
findById 메소드 내 응용 프로그램 코드의 호출은 제작 :
[SyncToken] => String Object
(
[value] => 46
)
이 결과는 XML - 투 - 객체를 믿고 저를 주도 파싱은 문맥상의 차이 때문에 다르게 처리됩니다. cakephp에는 String 클래스가 정의되어 있으며 응용 프로그램 코드에서 사용할 수 있습니다. v3-php-sdk-2.0.1/종속성/XDS2PHP/src/com/mikebevz/xsd2php/Bind.php에서 bindXml 함수는 class_exists
(138 행)을 호출합니다. CakePHP의 (내 응용 프로그램 코드)를 사용할 때
if (!class_exists($class_name)) {
// assign $model->{$name} to child node's value
} else {
// assign $model->{$name) to newly created object $class_name, which wraps child nodes' value
}
class_exists('string')
이 true로 평가 : 다음은 발췌 한 것입니다. class_exists('string')
은 cakephp (샘플 스크립트)를 사용하지 않을 때 false로 평가됩니다. 나는 이것이 왜이 라이브러리를 사용할 때 xml-to-object 구문 분석이 다르게 동작하는지 믿습니다. 따라서, 내가 대신 CakePHP를 갖는 정의 String 클래스 보인다 예상
<ns0:SyncToken>46</ns0:SyncToken>
의
<ns0:SyncToken/>
를 얻을 IPP PHP SDK와의 충돌 상황으로 실행됩니다.
require_once('cake/libs/string.php'); // assuming cakephp 1.3's string class
내가 문제가 더욱 분명하다 생각, 어떤 제안 솔루션을이 충돌하는 상황은 샘플 CustomerUpdate.php 스크립트에 다음 행을 추가하여 다시 만들 수 있습니다?
FindByID 호출에서 synctoken을 가져오고 있습니까? –
예, FindById 호출에서 synctoken을 얻고 있습니다 (편집 1 참조) – EricC