1

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

在此处输入图像描述

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

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

长问题:

get_invoices 端点返回 2 个感兴趣的项目。

body是发票 PDF 文件的 REST URL。

InvoiceFiles返回

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

body和返回的内容之间有区别InvoiceFiles.pdfFileUrl吗?如何正确使用它们?

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

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

端点页面上的示例将正文和 pdfFiles 返回为空白,因此没有多大帮助。

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

4

2 回答 2

2

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

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

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

在该对象上是一个名为“invoiceFiles”的列表 - 如果它非空,则获取第一项。

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

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

这将直接向用户显示 PDF。

于 2017-03-22T21:49:16.370 回答
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/

于 2017-06-26T18:08:05.227 回答