我在 Django 中制作了一个测试 Shopify 应用程序。这个应用程序的本质是通过 Shopify 管理仪表板管理链接下载订单发票。当我使用 ngrok 隧道时,该应用程序在我的本地主机上运行良好。发票正在根据命令下载,但是当我在 AWS EC2 实例上部署此应用程序时,管理链接不起作用。 发票 Pdf 已正确生成,但我猜它没有作为 HttpResponse 发送。
def download_invoice(request, raw_order, template_name):
raw_order['product_data'] = product_data
dir_path = settings.MEDIA_ROOT
with tempfile.TemporaryDirectory(dir=dir_path) as tmpdir:
output_filename = tmpdir + '\\' + "my-invoice.pdf"
path=os.path.join(os.path.dirname(__file__),'./templates/home')
templateLoader = jinja2.FileSystemLoader(searchpath=path)
templateEnv = jinja2.Environment(loader=templateLoader)
TEMPLATE_FILE = template_name
template = templateEnv.get_template(TEMPLATE_FILE)
outputText = template.render(data=raw_order)
pdfkit.from_string(outputText, output_filename)
filename = "my-invoice.pdf"
wrapper = FileWrapper(open(output_filename, 'rb'))
print(output_filename)
# breakpoint()
# pass
response = HttpResponse(wrapper, content_type=mimetypes.guess_type(output_filename)[0])
response['Content-Length'] = os.path.getsize(output_filename)
response['Content-Disposition'] = "attachment; filename=" + filename
return response
此函数在我的应用程序界面上调用时会下载 pdf,但在 Shopify 管理链接中调用时不会下载发票。
据我认为 EC2 配置存在一些问题,因为当我使用 Ngrok 隧道并在本地主机上运行应用程序时,一切正常。即使应用程序部署在 EC2 实例上但未发送,该文档也会正确生成。 如果需要任何其他详细信息,请告诉我。 任何帮助将不胜感激。
这个问题就解决了。 问题是 ec2 实例没有 SSL,因此 shopify 拒绝任何“不安全”的响应,并且它在本地主机上工作,因为浏览器对待本地主机的方式与“http”连接不同。