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

Zuora - How to get invoice PDF and display to user

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

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

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

长问题:

get_invoices endpoint returns 2 个感兴趣的项目。

body 是发票 PDF 文件的 REST URL。

InvoiceFiles returns

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

bodyInvoiceFiles.pdfFileUrl 编辑的 return 之间有区别吗?我该如何正确使用它们?

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

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

端点页面上的示例的正文和 pdfFiles return 都是空白的,因此没有太大帮助。

在他们的社区中搜索了一段时间,没有找到任何与我的问题远程相似的东西。

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

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

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

object 上有一个名为 "invoiceFiles" 的列表 - 如果它是 non-empty,请抓住第一项。

使用该项目的 "pdfFileUrl" 属性 作为 URL 从中获取 PDF, 但在 GET 请求中,包括 headers "apiAccessKeyId" 和 "apiSecretAccessKey" 的值设置为我们适用的 api 键。这消除了身份验证问题,但也使您必须在后端执行此操作以避免暴露您的 apiAccessKeyId 和 Secret。

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

这将直接向用户显示 PDF。

最佳做法是使用授权 cookie。该 cookie 授权用户在 Zuora 设置中管理 > 安全策略 > Session 超时中指定的持续时间内调用 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 调用将在 header 中没有 apiSecretAccessKey 和 apiAccessKeyId 的情况下工作。

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