如何使用Zuora SOAP API预览即将发票?

时间:2014-08-22 02:58:29

标签: zuora zuora-soap

从Zuora用户界面,我可以使用方便的预览"预览订阅。按钮。我想使用Zuora SOAP API执行相同的操作,以便我可以预览即将发票的内容并编写一些测试。

到目前为止,我的理论是使用Amendment创建一个空PreviewOptions.enablePreviewMode=true来获取预览发票的结果。

相关SOAP文档:


这部分有效,但已返回一个InvoiceData对象,但预计会有两个

public List<InvoiceData> getInvoicePreview(String subscriptionId){

    ID id = new ID();
    id.setID(subscriptionId);

    PreviewOptions previewOptions = new PreviewOptions();
    previewOptions.setEnablePreviewMode(true);
    previewOptions.setPreviewThroughTermEnd(true);

    Calendar forever = new DateTime().plusDays(1000).toCalendar(Locale.getDefault());

    // A null amendment
    Amendment amendment = new Amendment();
    amendment.setName("Draft amendment for preview");
    amendment.setStatus("Draft");
    amendment.setContractEffectiveDate(forever);
    amendment.setSubscriptionId(id);
    amendment.setType("TermsAndConditions");

    AmendOptions amendOptions = new AmendOptions();

    AmendRequest amendRequest = new AmendRequest();
    amendRequest.setAmendments(new Amendment[]{amendment});
    amendRequest.setAmendOptions(amendOptions);
    amendRequest.setPreviewOptions(previewOptions);

    Amend amend = new Amend();
    amend.setRequests(new AmendRequest[]{amendRequest});

    AmendResponse amendResults;


    try {

        ZuoraCredentials creds = credentialProvider.get();
        ZuoraServiceStub stub = new ZuoraServiceStub(creds.zuoraApiEndpoint);
        Login login = new Login();
        login.setUsername(creds.zuoraApiUser);
        login.setPassword(creds.zuoraApiPassword);
        LoginResponse loginResponse = stub.login(login);
        String session = loginResponse.getResult().getSession();
        SessionHeader sessionHeader = new SessionHeader();
        sessionHeader.setSession(session);
        amendResults = stub.amend(amend, sessionHeader);
    } catch (RemoteException e) {
        throw new RuntimeException("Error executing Zuora API.", e);
    } catch (UnexpectedErrorFault e) {
        throw new RuntimeException("Error executing Zuora API.", e);
    } catch (LoginFault e) {
        throw new RuntimeException("Error executing Zuora API.", e);
    }

    AmendResult[] amendResult = amendResults.getResults();

    printOut(amendResult);      

    return new ArrayList<InvoiceData>(Arrays.asList(amendResult[0].getInvoiceDatas()));
}

以下是Zuora UI中的数据内容

Subscription Invoice Preview

1 个答案:

答案 0 :(得分:2)

我一直在努力为subscribe()电话取得类似的成绩,最后用Zuora筹集了一张票。他们说它不受支持,但你可以通过聚合InvoiceItem记录来实现同样的目的。

我所做的是根据服务期的开始(ServiceStartDate)手动将它们分组,并总计总数(例如ChargeAmountTaxAmount)。它看似正常,你可以在每个时期开始时获得总额。

我怀疑这会以同样的方式用于修改,因为InvoiceData记录与subscribe()相同。

<强>更新

  • 我们现在使用它进行修改,它确实以与订阅调用相同的方式运行。
  • 我们发现的一个问题是,您无法在订阅结束后预览,但我们可以在预览时根据需要将术语类型设置为EVERGREEN(即使订阅是TERMED当创建时)。