从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中的数据内容
答案 0 :(得分:2)
我一直在努力为subscribe()
电话取得类似的成绩,最后用Zuora筹集了一张票。他们说它不受支持,但你可以通过聚合InvoiceItem
记录来实现同样的目的。
我所做的是根据服务期的开始(ServiceStartDate
)手动将它们分组,并总计总数(例如ChargeAmount
,TaxAmount
)。它看似正常,你可以在每个时期开始时获得总额。
我怀疑这会以同样的方式用于修改,因为InvoiceData
记录与subscribe()
相同。
<强>更新强>
EVERGREEN
(即使订阅是TERMED
当创建时)。