Zuora - 如何获取发票PDF并显示给用户

时间:2017-03-20 20:19:55

标签: invoice zuora

简短问题:使用get_invoices endpoint,当我尝试访问InvoiceFiles.pdfFileUrl响应中的网址时,会弹出一个api.zuora登录表单。我需要我的客户能够访问这些PDF。

enter image description here

如果我输入我的Zuora信用卡,它将显示发票,但当然我的客户没有Zuora信誉。

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

长问题:

get_invoices endpoint会返回2个感兴趣的项目。

body是发票PDF文件的REST URL。

InvoiceFiles返回

  1. id发票PDF文件的ID。这是文件对象的ID,与pdfFileUrl字段中的文件句柄ID不同。要打开文件,您需要使用文件句柄ID。
  2. versionNumber发票PDF文件的版本号
  3. pdfFileUrl发票PDF文件的REST URL。单击URL以打开发票PDF文件。
  4. bodyInvoiceFiles.pdfFileUrl返回的内容之间是否存在差异?如何正确使用它们?

    pdfFileUrl可以返回多个文件。每次更新发票(客户支付等)时,它都会生成另一个文件。最新的是at index 0。

    但是,尝试访问任何网址时,我会收到一个api.zuora登录表单。如果我输入我的Zuora信用卡,它将显示发票,但当然我的客户没有Zuora信誉。

    端点页面上的示例将正文和pdfFiles都返回为空白,这样做无济于事。

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

2 个答案:

答案 0 :(得分:2)

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

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

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

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

使用该项目上的“pdfFileUrl”属性作为从获取PDF的URL,但在GET请求中,包含标题“apiAccessKeyId”和“apiSecretAccessKey”,其值设置为适用的值api key。这消除了auth问题,但也使得你必须在你的后端执行此操作以避免暴露你的apiAccessKeyId和Secret。

假设进入我们的PDF请求已经过身份验证,我们会对从Zuora返回的响应执行管道命令到我们当前在服务器上处理的传出响应:zuoraResponse.pipe(ourOutgoingResponseObj)

这将直接向用户显示PDF。

答案 1 :(得分:1)

最佳做法是使用授权Cookie。 cookie授权用户在Administration>中指定的持续时间内调用REST API。安全政策> Zuora设置中的会话超时。每次调用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/