由于客户全名,无法在 QBXML 请求中添加发票

Cannot add Invoice in QBXML request due to the Customer FullName

在 qbxml 中发送 CustomerQueryRq 时,它 returns:

    500: The query request has not been fully completed. 
There was a required element ("Client Name") that could not be found in QuickBooks.

然后我发送 CustomerAddRq returns:

3100: The name "Client Name" of the list element is already in use.

InvoiceAddRq 没有说:

            3140: There is an invalid reference to QuickBooks Customer "Client Name" 
    in the Invoice.  QuickBooks error message: The specified name is either 
invalid or of the wrong type.

全名 "Client Name" 的客户怎么可能已经在使用中,但在尝试为该客户添加发票时找不到它?

我是否误解了这些错误消息?

这是您的答案:

  • 指定的名称无效或类型错误。

这告诉我没有一个客户的名字完全相同,但是有一个 VENDOR 或 EMPLOYEE 或 OTHER NAME 条目具有相同的名字。

QuickBooks 中的 Name 字段是跨供应商、员工、其他名称条目和客户的 UNIQUE 键。

注意: 始终转义并 trim 您的数据并在将其传递给 QB 之前检查长度。始终参考 OSR.

  1. 首先尝试使用 CustomerQueryRq xml:

    按姓名查找客户
    // CustomerQuery Request
    $name = 'John Doe';
    
    $xml = '<?xml version="1.0" encoding="utf-8"?>
    <?qbxml version="13.0"?>
    <QBXML>
        <QBXMLMsgsRq onError="continueOnError">
            <CustomerQueryRq>
                <NameFilter>
                    <MatchCriterion>StartsWith</MatchCriterion>
                    <Name>' . $name . '</Name>
                </NameFilter>
            </CustomerQueryRq>
        </QBXMLMsgsRq>
    </QBXML>';
    
  2. 分析您的回复。 如果找到某些内容(可能有 John DoeJohn Doe 1 等),请检查他们的电子邮件地址。如果找到匹配项,则将其 QuickBooks ID 绑定到电子商务数据库中的客户。您将在进一步的请求中参考此 ID。跳过步骤 #3。

如果未找到任何内容,请添加新客户(第 3 步)。

  1. 正在添加客户。现在使用 CustomerAdd XML:

    $name = 'John Doe';
    $firstname = 'John';
    $lastname = 'Doe';
    $address_xml = ''; // Put address XML block here
    
    $xml = '<?xml version="1.0" encoding="utf-8"?>
        <?qbxml version="2.0"?>
        <QBXML>
            <QBXMLMsgsRq onError="stopOnError">
                <CustomerAddRq>
                    <CustomerAdd>
                        <Name>' . $name . '</Name>
                        <CompanyName></CompanyName>
                        <FirstName>' . $firstname . '</FirstName>
                        <LastName>' . $lastname . '</LastName>
                        ' . $address_xml . '
                        <Phone>555-555-55</Phone>
                        <AltPhone></AltPhone>
                        <Fax>555-555-55</Fax>
                        <Email>john@doe.com</Email>
                        <Contact>' . $name . '</Contact>
                    </CustomerAdd>
                </CustomerAddRq>
            </QBXMLMsgsRq>
        </QBXML>';
    
  2. 解析您的请求并将 QuickBooks ID 存储在您的数据库中以供将来参考。

  3. 构建您的 InvoiceAdd XML 并指定客户 ID(不是姓名):

    $xml = '<?xml version="1.0" encoding="utf-8"?>
        <?qbxml version="13.0"?>
            <QBXML>
                <QBXMLMsgsRq onError="stopOnError">
                    <InvoiceAddRq>
                        <InvoiceAdd>
                            <CustomerRef>
                                <ListID>' . $id . '</ListID>
                            </CustomerRef>
                            <!-- rest of XML -->
       ';
    
  4. 不要忘记在您的数据库中保存刚刚创建的发票的 QuickBooks ID。