【问题标题】:Django Stripe API Key IssuesDjango Stripe API 关键问题
【发布时间】:2015-08-02 05:59:40
【问题描述】:

我的 Django 基本设置文件中有这些行(除其他外):

import os
STRIPE_PUBLIC_KEY = os.environ.get("STRIPE_PUBLIC_KEY", "your publishable test key")
STRIPE_SECRET_KEY = os.environ.get("STRIPE_SECRET_KEY", "your secret test key")

我在我的 virtualenv 中创建了这两个环境变量,如下所示:

export STRIPE_SECRET_KEY="sk_test_example"
export STRIPE_PUBLIC_KEY="pk_test_example"

当我运行 env | grep STRIPE,我明白了:

STRIPE_SECRET_KEY=sk_test_example
STRIPE_PUBLIC_KEY=pk_test_example

但由于某种原因,我不断收到此 Stripe 错误:“提供的 API 密钥无效:\”\u003C**** ****** **** 密钥\u003E\”。此键至少包含一个空格。请删除空格,然后重试。”

我尝试再次导出环境变量,一次不带引号,一次带单引号,得到相同的结果,所以我尝试从设置文件中打印 STRIPE_SECRET_KEY 和 STRIPE_PUBLIC_KEY,它返回默认值,“您的可发布的测试密钥”和“您的秘密测试密钥”。所以这就是为什么有空格。但是为什么没有拾取环境变量呢?

所以我尝试摆脱基本设置中的默认值,使变量看起来像这样:

STRIPE_PUBLIC_KEY = os.environ.get("STRIPE_PUBLIC_KEY")
STRIPE_SECRET_KEY = os.environ.get("STRIPE_SECRET_KEY")

这引发了 NoneType 错误。我还尝试了以下方法:

STRIPE_PUBLIC_KEY = os.environ['STRIPE_PUBLIC_KEY']
STRIPE_SECRET_KEY = os.environ['STRIPE_SECRET_KEY']

这引发了“KeyError:u'STRIPE_PUBLIC_KEY'”。我需要改变什么?我真的不想硬编码这些 API 密钥。

【问题讨论】:

  • 您能确认您使用的是什么外壳吗?
  • 当然。我正在使用 bash。

标签: python django environment-variables stripe-payments


【解决方案1】:

原来我忘记(啊)在我的 virtualenv postactivate 文件中导出环境变量,并在不同的窗口中运行服务器,所以一旦我将 Stripe API 密钥放入 postactivate 文件中,我需要在运行服务器之前停用并激活 virtualenv。

【讨论】:

    【解决方案2】:

    对于 API 密钥,引号不是必需的

    export STRIPE_SECRET_KEY=sk_test_example
    export STRIPE_PUBLIC_KEY=pk_test_example
    

    看起来用 bash 引号构造的字符串格式与 Python 接受的不同。我不知道这些是什么格式,但这肯定是有道理的。

    或者,您可能想要研究“dotenv”实现,例如django-dotenv

    这是处理此类字符串的一种更可靠的方法。问题是,当您使用不同的字符串格式(UTF-8 与 UTF-16 或 Unicode)时,您可能会遇到某些程序期望一种格式但接收另一种格式的情况。您包含的输出是这个样子的一个例子(因此我在这里担心)。

    希望这会有所帮助!

    【讨论】:

    • 是的,我提到我试过不加引号,仍然报同样的错误。我以前没听说过 django-dotenv。我会调查的。
    • 我的错,我错过了这一点!在使用任何 Web 框架时,dotenv 是我的首选方法(所有东西都存在实现,如果需要,很容易自定义或自己实现)。关键是使用 dotenv,您可以直接从工作环境中加载变量。
    • 如果我安装 django-dotenv,我不需要更改设置文件中的变量设置方式,对吗?
    • 你不应该这样做!你也可以试试github.com/theskumar/python-dotenv。它几乎相同,并且有更好的文档记录,但缺少一些 Django 特定的功能。
    • 是的。请参阅下面的评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 2017-02-18
    • 2018-11-01
    • 2011-02-01
    • 1970-01-01
    相关资源
    最近更新 更多