简短问题:使用get_invoices endpoint,当我尝试访问InvoiceFiles.pdfFileUrl
响应中的网址时,会弹出一个api.zuora登录表单。我需要我的客户能够访问这些PDF。
如果我输入我的Zuora信用卡,它将显示发票,但当然我的客户没有Zuora信誉。
是否有某种设置允许客户从URL查看PDF?
长问题:
get_invoices endpoint会返回2个感兴趣的项目。
body
是发票PDF文件的REST URL。
和
InvoiceFiles
返回
body
和InvoiceFiles.pdfFileUrl
返回的内容之间是否存在差异?如何正确使用它们?
pdfFileUrl可以返回多个文件。每次更新发票(客户支付等)时,它都会生成另一个文件。最新的是at index 0。
但是,尝试访问任何网址时,我会收到一个api.zuora登录表单。如果我输入我的Zuora信用卡,它将显示发票,但当然我的客户没有Zuora信誉。
端点页面上的示例将正文和pdfFiles都返回为空白,这样做无济于事。
通过他们的社区搜索了一段时间,没有任何东西找不到与我的问题类似的任何东西。
答案 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/