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

手机支付notify验证时出现异常 #12

Closed
openpython opened this issue Apr 6, 2017 · 4 comments
Closed

手机支付notify验证时出现异常 #12

openpython opened this issue Apr 6, 2017 · 4 comments

Comments

@openpython
Copy link

你好,环境是:ubuntu14、python27、flask

data=request.form.to_dict()
success = alipay_wap.verify_wap_notify(data, signature)
`
Traceback (most recent call last):

File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in ca ll
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi _app
response = self.make_response(self.handle_exception(e))
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in hand le_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi _app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1477, in full _dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1381, in hand le_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1475, in full _dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1461, in disp atch_request
return self.view_functionsrule.endpoint
File "/var/www/pay.***.com/views/merchant.py", line 241, in alipay_mobile_n otify_result
success = alipay_wap.verify_wap_notify(data, signature)
File "/usr/local/lib/python2.7/dist-packages/alipay/init.py", line 221, in verify_wap_notify
return self.verify_app_notify(data, signature)
File "/usr/local/lib/python2.7/dist-packages/alipay/init.py", line 218, in verify_app_notify
return self._verify_data(data, signature, self.__app_alipay_public_key_path)
File "/usr/local/lib/python2.7/dist-packages/alipay/init.py", line 247, in _verify_data
message = "&".join("{}={}".format(k, v) for k, v in unsigned_items)
File "/usr/local/lib/python2.7/dist-packages/alipay/init.py", line 247, in
message = "&".join("{}={}".format(k, v) for k, v in unsigned_items)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-13: ordi nal not in range(128)
`

@fzlee
Copy link
Owner

fzlee commented Apr 7, 2017

问题的直接原因是python2里面的str类型格式化unicode时出错了。

你可否执行以下逻辑并且附上结果?

import json
from flask import Flask
from flask import request
app = Flask(__name__)


@app.route('/', methods=["GET", "POST"])
def hello_world():
    data = request.form.to_dict()
    signature = data.pop("sign")

    print(json.dumps(data))
    print(signature)

    alipay.verify_wap_notify(data, signature)
    return 'Hello, World!'

@fzlee
Copy link
Owner

fzlee commented Apr 7, 2017

0.6.6已经修复了这个问题,麻烦你帮忙验证一下吧。

@openpython
Copy link
Author

你好,出现了新的错误,ValueError: RSA key format is not supported,我使用的是RSA2,按alipay doc的openssl教程生成的rsa_private_key.pem、rsa_public_key.pem 并上传至服务器的/home/alipay_cert/目录下。
alipay_wap = AliPay(appid="2017*********", app_notify_url='http://pay.****.com/alipay/mobile_notify_result/', app_private_key_path="/home/alipay_cert/rsa_private_key.pem", app_alipay_public_key_path="/home/alipay_cert/alipay_public_key_sha256.pem",sign_type="RSA2")
错误如下:

Traceback (most recent call last):
File "/var/www/pay..com/wsgi.py", line 9, in application
return app(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in call
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1461, in dispatch_request
return self.view_functionsrule.endpoint
File "/var/www/pay.
.com/views/merchant.py", line 235, in alipay_mobile_notify_result
success = alipay_wap.verify_wap_notify(data, signature)
File "/usr/local/lib/python2.7/dist-packages/alipay/init.py", line 221, in verify_wap_notify
return self.verify_app_notify(data, signature)
File "/usr/local/lib/python2.7/dist-packages/alipay/init.py", line 218, in verify_app_notify
return self._verify_data(data, signature, self.__app_alipay_public_key_path)
File "/usr/local/lib/python2.7/dist-packages/alipay/init.py", line 248, in _verify_data
return self._verify(message, signature, alipay_public_key_path)
File "/usr/local/lib/python2.7/dist-packages/alipay/init.py", line 229, in _verify
key = RSA.importKey(fp.read())
File "/usr/local/lib/python2.7/dist-packages/Crypto/PublicKey/RSA.py", line 682, in importKey
raise ValueError("RSA key format is not supported")
ValueError: RSA key format is not supported

@openpython
Copy link
Author

已搞定

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

2 participants