Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

解密时概率发生错误 #20

Closed
kennir opened this issue May 18, 2018 · 5 comments
Closed

解密时概率发生错误 #20

kennir opened this issue May 18, 2018 · 5 comments

Comments

@kennir
Copy link

kennir commented May 18, 2018

对encryptedData解码概率发生错误:

Traceback (most recent call last):
  File "/Users/ken/.pyenv/versions/venvdjango/lib/python3.6/site-packages/django/core/handlers/exception.py", line 35, in inner
    response = get_response(request)
  File "/Users/ken/.pyenv/versions/venvdjango/lib/python3.6/site-packages/django/core/handlers/base.py", line 128, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/ken/.pyenv/versions/venvdjango/lib/python3.6/site-packages/django/core/handlers/base.py", line 126, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/ken/.pyenv/versions/venvdjango/lib/python3.6/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/Users/ken/.pyenv/versions/venvdjango/lib/python3.6/site-packages/django/views/generic/base.py", line 69, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Users/ken/.pyenv/versions/venvdjango/lib/python3.6/site-packages/rest_framework/views.py", line 483, in dispatch
    response = self.handle_exception(exc)
  File "/Users/ken/.pyenv/versions/venvdjango/lib/python3.6/site-packages/rest_framework/views.py", line 443, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/Users/ken/.pyenv/versions/venvdjango/lib/python3.6/site-packages/rest_framework/views.py", line 480, in dispatch
    response = handler(request, *args, **kwargs)
  File "/Users/ken/Developer/projects/2018/littledrothy/account/views.py", line 43, in post
    crypted_user_info = crypt.decrypt(encrypted_data, iv)
  File "/Users/ken/.pyenv/versions/venvdjango/lib/python3.6/site-packages/weixin/lib/wxcrypt.py", line 32, in decrypt
    decrypted = json.loads(self._unpad(cipher.decrypt(encrypted_data)))
  File "/Users/ken/.pyenv/versions/venvdjango/lib/python3.6/site-packages/simplejson/__init__.py", line 518, in loads
    return _default_decoder.decode(s)
  File "/Users/ken/.pyenv/versions/venvdjango/lib/python3.6/site-packages/simplejson/decoder.py", line 369, in decode
    s = s.decode(self.encoding)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe8 in position 0: invalid continuation byte

encryptedData:

U0ETwC6fwCvShS/y0xS97WBsut9AR2Ez5hkSLkr49YJHRAO/4byPpMGuFx0tPfJ9ar1bBoh+BORTxTPdZOVSWH467srw6zxHmTZC0XJcH4ZQEaVWZdodItcQdG1PvCSu6eD29K1nmCvs2pLNaV1ELSd1qBEP+7vTrxzMVzS+oN3l5WvZIUr+RoHicIXR9aV3Ck+eRFdYC3ApEaPcHqlgR6UY8F8WzkwFEVK3ruSK5oCj54ybJLwT7K0qQq0LwqxcIxi0rkinjIpYRv+3aWK5gxQv3gnWFqkJ7A9DZPZObieatobMKUrpDrk3gsI5+adRVzE8ZydmdC4df1Lms5VTD1w7moJtLV6mADCPAe/AH/WVnFwSgTqipkVJwirdsblYGojELCpZyqfmliLqzPfl7C/OOAVbYYvz70paTrXSFVJcgNge7UxT7/5U3Z6TwtMI1DQVsRgyHl62QT4ZUOzC0UQxmgYS5Dy+SX7GBL/8Tqw=

iv

N96nLnUOTyTlOfQtBGojaA==

我用的是post的方法直接用json格式发送过来的,应该不存在urlencode的问题,请问可能会是什么原因?

python版本: python3.6

谢谢

@gusibi
Copy link
Owner

gusibi commented May 31, 2018

复现了这个问题 我看下

@gusibi
Copy link
Owner

gusibi commented May 31, 2018

看这个帖子发现不是偶然现象 https://ruby-china.org/topics/32128

@DearX-dlx 提供了一个思路,可以试一下

在这一步的开发中,一定要按照这样的顺序

  1. 小程序请求login,拿到code 然后传给服务端;
    2.服务端拿到code 到微信服务器拿到sessionKey ;
    3.然后小程序调用getuserinfo接口拿到encryptedData,iv,然后给服务端;
    4.服务端拿到客户端的encryptedData,vi还有之前的sessionKey去解密得到 unionId等用户信息;

不然就会出现你这样的问题,你这种情况偶然出现的原因就是 你在服务端还未去获取sessionKey的时候你就去调用了getuserinfo,有时候你会比服务端快,有时候你会比服务端慢,所以就出现了偶然性

这里是官方论坛的讨论:

https://developers.weixin.qq.com/blogdetail?action=get_post_info&lang=zh_CN&token=&docid=aac46e5a879899e2a95c8da9fcb3f4ed

@kennir
Copy link
Author

kennir commented Jun 2, 2018

嗯,有这个可能性,我现在用了新的button的open-data的登陆后拿userinfo后似乎就没有这个问题了,多谢 @gusibi

@long5270
Copy link

这个问题经常复现 很是头疼

@zjonejj
Copy link

zjonejj commented Mar 26, 2021

看这个帖子发现不是偶然现象 https://ruby-china.org/topics/32128

@DearX-dlx 提供了一个思路,可以试一下

在这一步的开发中,一定要按照这样的顺序

1. 小程序请求login,拿到code 然后传给服务端;
   2.服务端拿到code 到微信服务器拿到sessionKey ;
   3.然后小程序调用getuserinfo接口拿到encryptedData,iv,然后给服务端;
   4.服务端拿到客户端的encryptedData,vi还有之前的sessionKey去解密得到 unionId等用户信息;

不然就会出现你这样的问题,你这种情况偶然出现的原因就是 你在服务端还未去获取sessionKey的时候你就去调用了getuserinfo,有时候你会比服务端快,有时候你会比服务端慢,所以就出现了偶然性

这里是官方论坛的讨论:

https://developers.weixin.qq.com/blogdetail?action=get_post_info&lang=zh_CN&token=&docid=aac46e5a879899e2a95c8da9fcb3f4ed

拯救+1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants