【问题标题】:How to preview upcoming invoices using the Zuora SOAP API?如何使用 Zuora SOAP API 预览即将到来的发票?
【发布时间】:2014-08-22 02:58:29
【问题描述】:

在 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 中的数据如下所示

【问题讨论】:

    标签: zuora zuora-soap


    【解决方案1】:

    我一直在尝试通过subscribe() 呼叫实现类似的目标,并最终向 Zuora 提出了请求。他们说它不受支持,但您可以通过聚合 InvoiceItem 记录来实现相同的目标。

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

    我怀疑这对于修改也适用,因为 InvoiceData 记录的返回方式与 subscribe() 相同。

    更新

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

    【讨论】:

      猜你喜欢
      • 2019-06-04
      • 2020-09-06
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      相关资源
      最近更新 更多