Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 序列项1:应为字符串,找到OrderedDict_Python_Django_Api_Ordereddict - Fatal编程技术网

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: