如何通过IPP服务创建BillPayment

时间:2014-10-15 18:16:13

标签: quickbooks-online

我们使用IPP服务在QuickBooks Online中推送/获取数据。我们在创建BillPayment时遇到了问题。提供的例子中没有“添加BillPayment”(/ docs / partner_platform / example_app_ipp_v3)。

除了Line对象外,我们设法使所有变量都正确。这有点令人困惑,因为有一个Payment对象。

你如何进行?这类交易是否有现有的工作/完整例子?

我们尝试了以下代码(复制了Payment例程代码)来添加Line对象:

$Line = new QuickBooks_IPP_Object_Line();
$Line->setAmount(10);

$LinkedTxn = new QuickBooks_IPP_Object_LinkedTxn();
$LinkedTxn->setTxnId('{-84}'); //Is this the Bill Ref ID?
$LinkedTxn->setTxnType('Bill');

$Line->setLinkedTxn($LinkedTxn);

$BillPaymentObject->addLine($Line);

Payment个对象变量:

  • docNumber
  • txnDate
  • vendorRef
  • payType(value = CreditCardPayment)
  • CreditCardPayment(信用卡号?)
  • totalAmt

生成的错误表明应提供帐户。该文档包含APAccountRefCCAccountRef,但我们尝试应用它们但失败了。该错误不提供有关处于错误状态的Line对象或Payment对象的信息。

6000: [A business validation error has occurred while processing your request, Business Validation Error: Vous devez sélectionner un compte pour cette opération.](您必须为此操作选择一个帐户)

上次请求XML:

<billpayment xmlns="http://schema.intuit.com/finance/v3"> <docnumber>11</docnumber> <txndate>2014-06-14</txndate> <vendorref>8</vendorref> <paytype>CreditCardPayment=10</paytype> <creditcardpayment>1111222233334444</creditcardpayment> <ccaccountref>15</ccaccountref> <totalamt>1.50</totalamt> <line xmlns="http://schema.intuit.com/finance/v3"> <amount>10</amount> <linkedtxn xmlns="http://schema.intuit.com/finance/v3"> <txnid>11</txnid> <txntype>Bill</txntype> </linkedtxn> </line> </billpayment>

完整的PHP代码例如没有AUTH部分(看哪):

$str_service = 'QuickBooks_IPP_Service_'.$_REQUEST['type'];
$str_object = 'QuickBooks_IPP_Object_'.$_REQUEST['type'];

//Création d'un item
$Service = new $str_service();
$Object = new $str_object();

$arr_excluded_key = array('token', 'type', 'arr_item', 'billAddrLine1', 'billAddrLine2', 'billAddrCity', 'billAddrCountrySubDivisionCode', 'billAddrPostalCode', 'primaryPhone', 'fax', 'mobile');
//Boucle pour les set
foreach($_REQUEST as $key => $value){
     if(!in_array($key, $arr_excluded_key)){
        $str_method = 'set'.ucfirst($key);
        $Object->$str_method($value);
    }
 }

 switch($_REQUEST['type']){
    case 'BillPayment':
        foreach($_REQUEST['arr_item'] as $item){
            $Line = new QuickBooks_IPP_Object_Line();
            $Line->setAmount(10); //Static for testing purposes

            // The line has a LinkedTxn node which links to the actual bill
            $LinkedTxn = new QuickBooks_IPP_Object_LinkedTxn();
             $LinkedTxn->setTxnId('{-11}'); //Static for testing purposes
            $LinkedTxn->setTxnType('Bill');

            $Line->setLinkedTxn($LinkedTxn);

            $Object->addLine($Line);
        }
        break;
}

//Response
#$Service->add($Context, $realm, $Object);
#echo $Service->lastRequest($Context);exit;
if ($resp = $Service->add($Context, $realm, $Object)){
    print($resp);
}
else{
    print($Service->lastError($Context));
}

这是发送的查询(它是真实的网址,它应该用于测试目的):http://dev.magikweb.ca/magik-net/quickbooks/save.php?token=aaabbbcccddd1234&type=BillPayment&docNumber=11&txnDate=2014-06-14&vendorRef=8&payType=CreditCardPayment=10&CreditCardPayment=1111222233334444&CCAccountRef=15&totalAmt=1.50&arr_item[0][amount]=0.75&arr_item[0][txnId]=11&arr_item[0][amount]=0.75&arr_item[0][txnId]=11

1 个答案:

答案 0 :(得分:0)

如果错误建议您指定帐户:

  

(您必须为此操作选择一个帐户)

我要尝试的第一件事是指定一个帐户。参考Intuit的文档:

您会看到APAccountRef节点允许您指定整个帐单付款的帐户。

所有QuickBooks_IPP_Object_*类都有完全镜像Intuit的文档/ XML节点名称的方法。

因此,如果您看到名为APAccountRef的XML节点将成为相应的方法:

  • ->setAPAccountRef($ref);
  • ->getAPAccountRef();

您是否尝试过指定APAccountRef

关于这个:

  

付款对象变量:   * docNumber   * txnDate   * vendorRef   ...

我不确定你从哪里得到 - 他们是不正确的。正确的节点名称是:

  • DocNumber
  • TxnDate
  • VendorRef
  • PayType
  • CreditCardPayment(或其他付款方式之一)
  • TotalAmt

XML 区分大小写,因此请确保使用正确的大小写,否则您将收到错误。

关于这个:

  

该文档包含APAccountRef和CCAccountRef,但我们尝试应用它们并失败。

你到底是怎么回事&#34;?你的代码是什么样的?发送到Intuit的XML是什么样的?您是否收到相同的错误或错误?

我们真的需要更多细节来帮助。

关于这个:

  

你如何进行?

排除故障的最佳方法是:

  1. 发布所有代码,以便我们测试并重现问题

  2. 发布您发送给Intuit的XML,以便我们查看正在进行的操作(您可以在调用print($Service->lastRequest($Context));方法后调用->add(...)来获取此信息。