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
- id 发票 PDF 文件的 ID。这是文件对象的 ID,不同于 pdfFileUrl 字段中的文件句柄 ID。要打开文件,需要使用文件句柄ID。
- versionNumber 发票 PDF 文件的版本号
- pdfFileUrl REST URL 用于发票 PDF 文件。单击 URL 打开发票 PDF 文件。
body
和 InvoiceFiles.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/
简短问题:使用 get_invoices endpoint,当我尝试从 InvoiceFiles.pdfFileUrl
响应访问 URL 时,它会弹出一个 api.zuora 登录表单。我需要我的客户能够访问这些 PDF。
如果我输入我的 Zuora 积分,它会显示发票,但是我的客户当然没有 Zuora 积分。
是否有某种设置允许客户从 URL 查看 PDF?
长问题:
get_invoices endpoint returns 2 个感兴趣的项目。
body
是发票 PDF 文件的 REST URL。
和
InvoiceFiles
returns
- id 发票 PDF 文件的 ID。这是文件对象的 ID,不同于 pdfFileUrl 字段中的文件句柄 ID。要打开文件,需要使用文件句柄ID。
- versionNumber 发票 PDF 文件的版本号
- pdfFileUrl REST URL 用于发票 PDF 文件。单击 URL 打开发票 PDF 文件。
body
和 InvoiceFiles.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/