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 中解决了这个问题。
我正在使用以下代码从 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 中解决了这个问题。