2

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

到目前为止,我的理论是创建一个空AmendmentPreviewOptions.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 的数据的样子

订阅发票预览

4

1 回答 1

2

我一直在尝试通过自己的subscribe()电话实现类似的目标,并最终向 Zuora 提出了一张票。他们说它不受支持,但您可以通过汇总InvoiceItem记录来实现相同的目标。

我所做的是根据服务期的开始(ServiceStartDate)手动将它们组合在一起并汇总总数(例如ChargeAmountTaxAmount)。它似乎运行正确,您可以在每个周期开始时获得总到期金额。

我怀疑这将以相同的方式用于修改,因为InvoiceData返回的记录与subscribe().

更新

  • 我们现在确实使用它来进行修改,并且它的工作方式与订阅调用相同。
  • 我们发现的一个问题是您无法在有期限的订阅结束后进行预览,但我们可以EVERGREEN在预览时将期限类型设置为如果需要(即使订阅是TERMED在创建时)。
于 2014-09-19T12:15:09.640 回答