2017-03-20 31 views
1

简短问题:使用get_invoices endpoint,当我尝试从InvoiceFiles.pdfFileUrl响应中访问URL时,它弹出api.zuora登录表单。我需要我的客户能够访问这些PDF。Zuora - 如何获得发票PDF并向用户显示

enter image description here

如果我输入我的Zuora的creds,它会显示在发票,但当然我的客户没有Zuora的creds。

是否有某种设置允许客户从URL中查看PDF?

长的问题:

get_invoices endpoint回报2项的利息。

body是发票PDF文件的REST URL。

InvoiceFiles返回发票PDF文件的

  1. 的ID。这是文件对象的ID,与pdfFileUrl字段中的文件句柄ID不同。要打开文件,您需要使用文件句柄ID。
  2. versionNumber发票PDF文件的版本号
  3. pdfFileUrl发票PDF文件的REST URL。点击URL打开发票PDF文件。

bodyInvoiceFiles.pdfFileUrl返回的结果是否有差异,以及如何正确使用它们?

pdfFileUrl可以返回多个文件。每次发票更新(客户付款等)它会生成另一个文件。最近的是在索引0.

但试图访问任何的URL,我得到一个api.zuora登录表单。如果我输入我的Zuora信用卡,它会显示发票,但我的客户当然没有Zuora信用卡。

端点页面上的示例同时将body和pdfFiles返回为空,所以没有多大帮助。

通过他们的社区搜索了一段时间,没有找到任何与我的问题类似的任何东西。

回答

1

最好的做法是使用授权cookie。该cookie授权用户在Zuora设置中管理>安全策略>会话超时中指定的时间内调用REST API。在每次调用REST API之后,Cookie持续时间会随着此持续时间重置。

为了得到一个cookie,调用REST连接资源:

curl -X POST \ 
-H "apiAccessKeyId: dummyUser" \ 
-H "apiSecretAccessKey: dummyPassword" \ 
-H "Content-Type: application/json" \ 
-d '{}' \ 
"https://rest.zuora.com/v1/connections" 

一旦连接建立,后续API调用将没有在标题中apiSecretAccessKey和apiAccessKeyId工作。

请从他们的新API文档中找到更多详细信息。 https://www.zuora.com/developer/api-reference/

2

我们终于想出了如何做到这一点。必须完成服务器端。

第一步是调用“/ transactions/invoices/accounts/{accountId}”来获取发票清单。

其次,从列表中选择与我们试图查看的发票编号相匹配的发票。

在该对象上有一个名为“invoiceFiles”的列表 - 如果它非空,则抓住第一个项目。

使用“pdfFileUrl”属性上该项目作为URL从,但在GET请求获取PDF,包括头“apiAccessKeyId”和“apiSecretAccessKey”设置为我们的应用API密钥的值。这消除了认证问题,但也使得它必须在后端执行此操作,以避免暴露您的apiAccessKeyId和Secret。

假设为进入我们的PDF请求被验证,我们会在未来的Zuora的返回到我们目前正在处理我们的服务器上的传出响应响应做一个管道命令:zuoraResponse.pipe(ourOutgoingResponseObj)

这将直接向用户显示PDF。