Python 序列项1:应为字符串,找到OrderedDict
我正在尝试执行检查,但我得到一个错误Python 序列项1:应为字符串,找到OrderedDict,python,django,api,ordereddict,Python,Django,Api,Ordereddict,我正在尝试执行检查,但我得到一个错误序列项1:预期字符串,OrderedDict found。它可以连接什么?这是文档中的函数 回溯 File "/home/m0nte-cr1st0/.virtualenvs/midgard/local/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner 41. response = get_response(request) File "
序列项1:预期字符串,OrderedDict found
。它可以连接什么?这是文档中的函数
回溯
File "/home/m0nte-cr1st0/.virtualenvs/midgard/local/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/home/m0nte-cr1st0/.virtualenvs/midgard/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _legacy_get_response
249. response = self._get_response(request)
File "/home/m0nte-cr1st0/.virtualenvs/midgard/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
187. response = self.process_exception_by_middleware(e, request)
File "/home/m0nte-cr1st0/.virtualenvs/midgard/local/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
185. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/m0nte-cr1st0/.virtualenvs/midgard/local/lib/python2.7/site-packages/django/views/decorators/csrf.py" in wrapped_view
58. return view_func(*args, **kwargs)
File "/home/m0nte-cr1st0/.virtualenvs/midgard/local/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
57. response = view_func(request, *args, **kwargs)
File "/home/m0nte-cr1st0/.virtualenvs/midgard/local/lib/python2.7/site-packages/django/views/decorators/http.py" in inner
40. return func(request, *args, **kwargs)
File "/home/m0nte-cr1st0/work_projects/startapp/midgard/payments/views.py" in result
319. data, trans, _res = integration.get_transaction(request, signature, origin)
File "/home/m0nte-cr1st0/work_projects/startapp/midgard/fondy/integration.py" in get_transaction
110. str_sign = sep.join([self.secret_key, data])
Exception Value: sequence item 1: expected string, OrderedDict found
我将数据编码到
base64
并重写是否有效
def get_transaction(self, request, signature, origin):
data = origin.copy()
result = None
trans = None
if data:
data['signature'] = signature
data = dict((k, v) for k, v in data.iteritems() if v not in (None, ''))
data = OrderedDict(sorted(data.items()))
if 'signature' in data:
result_signature = data['signature']
del data['signature']
else:
raise ValueError('Incorrect data')
if 'response_signature_string' in data:
del data['response_signature_string']
from hashlib import sha1
from cloudipsp.configuration import __sign_sep__ as sep
if self.api.api_protocol == '2.0':
import pickle
data = pickle.dumps(origin).encode('base64', 'strict')
str_sign = sep.join([self.secret_key, data])
calc_sign = sha1(str_sign.encode('utf-8')).hexdigest()
else:
data = [secret_key]
data.extend([str(params[key]) for key in sorted(iter(params.keys()))
if params[key] != '' and not params[key] is None])
signature = sha1(sep.join(data).encode('utf-8')).hexdigest()
if result_signature == calc_sign:
看起来数据
必须是字符串。Read有效
并且获取签名
,这会引发错误str\u sign=sep.join([secret\u key,params])
在获取签名
处的参数中出错params
必须是字符串
。您能发布错误的完整回溯吗?但是params
是一个字典,从代码判断…@olinox14添加的回溯不能简单地将假协议传递到是否有效?例如如果helper.u有效(数据,self.secret\u密钥,“1.0”)
?@LanteDellarovere,但我需要协议2.0
def get_transaction(self, request, signature, origin):
data = origin.copy()
result = None
trans = None
if data:
data['signature'] = signature
data = dict((k, v) for k, v in data.iteritems() if v not in (None, ''))
data = OrderedDict(sorted(data.items()))
if 'signature' in data:
result_signature = data['signature']
del data['signature']
else:
raise ValueError('Incorrect data')
if 'response_signature_string' in data:
del data['response_signature_string']
from hashlib import sha1
from cloudipsp.configuration import __sign_sep__ as sep
if self.api.api_protocol == '2.0':
import pickle
data = pickle.dumps(origin).encode('base64', 'strict')
str_sign = sep.join([self.secret_key, data])
calc_sign = sha1(str_sign.encode('utf-8')).hexdigest()
else:
data = [secret_key]
data.extend([str(params[key]) for key in sorted(iter(params.keys()))
if params[key] != '' and not params[key] is None])
signature = sha1(sep.join(data).encode('utf-8')).hexdigest()
if result_signature == calc_sign: