如何在使用带有 php 的 qbxml 添加销售收据时动态添加多个行项目 <SalesReceiptLineAdd>?

how to add multiple line items <SalesReceiptLineAdd> dynamically while adding sales receipt using qbxml with php?

我有自己的软件,想将我数据库中的销售收据添加到 Quickbooks pro 2020。因此,我有包含多个订单项的销售收据。如何在返回 xml 请求时使用 PHP 在 qbXML 中传递更多行项目?

这是我的代码。我正在使用 Keith Palmer 的框架..

在此我为多个项目静态添加了 SalesReceiptLineAdd。但是如何动态创建呢?即如何多次循环 SalesReceiptLineAdd 标签?

function _quickbooks_salesreceipt_add_request($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $version, $locale)
{
    /*
        <CustomerRef>
            <ListID>80003579-1231522938</ListID>
        </CustomerRef>  
    */

    $xml = '<?xml version="1.0" encoding="utf-8"?>
        <?qbxml version="7.0"?>
        <QBXML>
            <QBXMLMsgsRq onError="stopOnError">
                <SalesReceiptAddRq requestID="' . $requestID . '">
                    <SalesReceiptAdd>
                        <CustomerRef>
                            <ListID>80000020-1573225608</ListID>
                        </CustomerRef>
                        <TxnDate>2019-11-14</TxnDate>
                        <RefNumber>34</RefNumber>
                        <BillAddress>
                            <Addr1>Keith Palmer Jr.</Addr1>
                            <Addr3>134 Stonemill Road</Addr3>
                            <City>Storrs-Mansfield</City>
                            <State>CT</State>
                            <PostalCode>06268</PostalCode>
                            <Country>United States</Country>
                        </BillAddress>
                        <SalesReceiptLineAdd>
                            <ItemRef>
                                <ListID>80000030-1573662395</ListID>
                            </ItemRef>
                            <Desc>.00 gift certificate</Desc>
                            <Quantity>1</Quantity>
                            <Rate>25.00</Rate>
                            <SalesTaxCodeRef>
                                <FullName>tax</FullName>
                            </SalesTaxCodeRef>
                        </SalesReceiptLineAdd>
                        <SalesReceiptLineAdd>
                            <ItemRef>
                                <ListID>80000031-1573810312</ListID>
                            </ItemRef>
                            <Desc>The Hitchhiker\'s Guide to the Galaxy</Desc>
                            <Quantity>1</Quantity>
                            <Rate>25.00</Rate>
                            <SalesTaxCodeRef>
                                <FullName>tax</FullName>
                            </SalesTaxCodeRef>
                        </SalesReceiptLineAdd>
                    </SalesReceiptAdd>
                </SalesReceiptAddRq>
            </QBXMLMsgsRq>
        </QBXML>';

    return $xml;


}

您可以使用标准字符串连接和 for 循环来执行此操作。

例如,类似这样的内容会重复行项目 5 次(5 行):

function _quickbooks_salesreceipt_add_request($requestID, $user, $action, $ID, $extra, &$err, $last_action_time, $last_actionident_time, $version, $locale)
{
    /*
        <CustomerRef>
            <ListID>80003579-1231522938</ListID>
        </CustomerRef>  
    */

    $xml = '<?xml version="1.0" encoding="utf-8"?>
        <?qbxml version="7.0"?>
        <QBXML>
            <QBXMLMsgsRq onError="stopOnError">
                <SalesReceiptAddRq requestID="' . $requestID . '">
                    <SalesReceiptAdd>
                        <CustomerRef>
                            <ListID>80000020-1573225608</ListID>
                        </CustomerRef>
                        <TxnDate>2019-11-14</TxnDate>
                        <RefNumber>34</RefNumber>
                        <BillAddress>
                            <Addr1>Keith Palmer Jr.</Addr1>
                            <Addr3>134 Stonemill Road</Addr3>
                            <City>Storrs-Mansfield</City>
                            <State>CT</State>
                            <PostalCode>06268</PostalCode>
                            <Country>United States</Country>
                        </BillAddress>';
            
    for ($i = 0; $i <= 5; $i++)
    {
        $xml .= '
          <SalesReceiptLineAdd>
                            <ItemRef>
                                <ListID>80000031-1573810312</ListID>
                            </ItemRef>
                            <Desc>The Hitchhiker\'s Guide to the Galaxy</Desc>
                            <Quantity>1</Quantity>
                            <Rate>25.00</Rate>
                            <SalesTaxCodeRef>
                                <FullName>tax</FullName>
                            </SalesTaxCodeRef>
                        </SalesReceiptLineAdd>';
    }
                        
    $xml .= '
                    </SalesReceiptAdd>
                </SalesReceiptAddRq>
            </QBXMLMsgsRq>
        </QBXML>';

    return $xml;


}

我还建议参考有关这些基本主题的 PHP 文档: