Braintree 客户端令牌生成方法在 Django 中引发 XML 错误

Braintree Client token generate method throws an XML error inside Django

我正在使用以下代码从 Django 支付视图中的 braintree 网关生成客户端令牌。

def generate_token(request,id,token):
    if not validate_user_session(id,token):
        return JsonResponse({"error":"Invalid session"})


    gateway = braintree.BraintreeGateway(
    braintree.Configuration(
    braintree.Environment.Sandbox,
    merchant_id="xxxxxxxxxx",
    public_key="xxxxxxxxxxxx",
    private_key="xxxxxxxxxxxxxxxxxxxxxx"
    )

    print(gateway.client_token.generate())
    return JsonResponse({"clientToken":gateway.client_token.generate(), "success":True})

这会引发错误

xml.parsers.expat.ExpatError: not well-formed (invalid token): line 1, column 0

但是,代码在 Django 外部和 Python Shell 中运行良好,并成功生成令牌。我似乎不明白这是什么问题?两种情况下的 ID 和标记都相同。感谢任何帮助。

替换 client_token = gateway.client_token.generate()

来自 client_token = gateway.client_token.generate( 参数={'merchant_account_id': settings.BRAINTREE_MERCHANT_ID})

事实证明,Braintree 的最新 python 版本存在一些问题。所以做出这些改变解决了我的问题。

在文件中(或安装 braintree 的任何地方)

/.local/share/virtualenvs/django_backend-ctIb9mpQ/lib/python3.8/site-packages/braintree/util line:125

替换代码

return [response.status_code, response.text]

ver = sys.version_info

if ver.major == 3 and ver.minor > 5:
    return [response.status_code, response.content]
else:
    return [response.status_code, response.text]

在 django 中解决了这个问题。