Giter Site home page Giter Site logo

alipay's Introduction

python-alipay-sdk

PyPI version codecov travis-ci

Unofficial AliPay Python SDK

Taking a look at this guide if you are interested at the details on signing your order requests.

GUIDES

What's new in 3.0 and how to migrate to 3.0

3.0 introduced two new functions: client_api and server_appi as a replacement of old-styled function based api .

3.0 keeps backward compatibility with 2.*, The only thing you should keep in mind is Alipay.verify won't pop sign from data automatically, you should handle it by yourself.

Test

python -m unittest discover

Or you may do test manually in this way, debug=True will direct your request to sandbox environment:

alipay = AliPay(..., debug=True)

alipay's People

Contributors

00kai0 avatar autodataming avatar ehco1996 avatar enjoy-binbin avatar fzlee avatar imoyao avatar iv8 avatar john60676 avatar kanhebei avatar macuilxochitl avatar nullying avatar shihaoyu1996 avatar varwey avatar waketzheng avatar wyattjia avatar xiaobaojiang avatar xiaowuyongzhi avatar ztg498 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

alipay's Issues

cannot import name OSRNG

上传到服务器之后报错,
Exception Value:
cannot import name OSRNG
Exception Location:
/usr/local/lib/python2.7/dist-packages/alipay/init.py in , line 12

请求参数为什么和官方方的SDK不一样?

另外我还有个问题。我注意到官方也出了一个SDK(然而目前并不好用),其中需要输入sub_merchant这个参数(商户ID),为什么你的库里面不需要这个信息呢? 将来会不会出现接口不想容的问题呢?

生成的sign与网关验签字符串不对应

这是alipay返回的错误

调试错误,请回到请求来源地,重新发起请求。
错误代码 invalid-signature 错误原因: 验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配,网关生成的验签字符串为:app_id=2018062460380864&biz_content={out_trade_no:20161112,product_code:QUICK_WAP_PAY,total_amount:0.01,subject:subject}&charset=utf-8&method=alipay.trade.wap.pay&notify_url= http://www.getsms.club/&sign_type=RSA2&timestamp=2018-06-26 21:26:52&version=1.0

这是sdk生成的链接

https://openapi.alipay.com/gateway.do?app_id=2018062460380864&biz_content=%7B%22out_trade_no%22%3A%2220161112%22%2C%22product_code%22%3A%22QUICK_WAP_PAY%22%2C%22total_amount%22%3A0.01%2C%22subject%22%3A%22subject%22%7D&charset=utf-8&method=alipay.trade.wap.pay&notify_url=+http%3A%2F%2Fwww.getsms.club%2F&return_url=&sign_type=RSA2&timestamp=2018-06-26+21%3A26%3A52&version=1.0&sign=略

前者乱入了一些奇怪的amp;

同步验签

抱歉实在麻烦作者了,有个问题想问一下,
如果app直接把支付宝返回的结果交给网站来做同步验签,请问能否使用这个sdk来完成。样例如下:

{'sign_type': 'RSA2', 'sign': 'Iril1rkvl7KUifMM0j7LyTgSMW/XnwnK7kVfVN42Gtvv+2dWpOUvEY8PEXavAldQIyL6YPg074BJema3s3ineer53X61AeXEPfnz6uHQHjDYSYf1AVn/uOfsCtRxdWRDlV4rPsf4ARTPlPf4rcTEcyTbsviPKi/dAvsN3mo1yBfZH2KX2qw6VGOAAqeinMLDf78reCWyp8KHPMBl1+iPDa2Bzg8l2U0rD5p/C+p+3Ou8tLHOEa0p+agjM11Z585yxctA/DdTgVgkPL0YeSv4zz6A/GAzmySzi61M5Clf/mXib3VdZrseObPNDW4hKtvfFXhIgU1egFdpbOZD7CCGIw==', 'alipay_trade_app_pay_response': {'charset': 'utf-8', 'msg': 'Success', 'seller_id': '2088821540881344', 'timestamp': '2018-04-24 01:48:58', 'out_trade_no': 'CO_322_0_1524505548', 'auth_app_id': '2017111409922946', 'code': '10000', 'trade_no': '2018042421001004700254850965', 'app_id': '2017111409922946', 'total_amount': '39.00'}}

读取了alipay_trade_app_pay_response是一个字典

是否可以不使用文件

你好,证书信息是否可以直接存数据库,而不是文件,这样多用户时比较好处理,谢谢

ISV初始化错误

ISV初始化方法是没有支持app_private_key_string和alipay_public_key_string的吗,使用了Guide里面的样例,报TypeError: __init__() got an unexpected keyword argument 'app_private_key_srting'

运行`python -m unittest discover` 报错 `FAILED (failures=2)`( test_sign_data_with_private_key_sha1和test_sign_data_with_private_key_sha256)

运行如下命令:

$ git clone [email protected]:xxx/alipay.git
$ cd alipay
$ virtualenv --python=python venv
$ source venv/bin/activate
$ pip install -r requirements.txt
$ python -m unittest discover

测试没通过:

..............Invalid command 'sha'; type "help" for a list.
FInvalid command 'sha'; type "help" for a list.
F..
======================================================================
FAIL: test_sign_data_with_private_key_sha1 (tests.test.AliPayTestCase)
openssl 以及aliapy分别对数据进行签名,得到同样的结果
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/vagrant/coding/alipay/tests/test.py", line 108, in test_sign_data_with_private_key_sha1
    self.assertEqual(result1, result2)
AssertionError: u'Q7kdCF6TYdKFOFAjrlmi910KVZ7NnDY+/DeQVe3Qd81BhGSF2ChutTqQB2skMbqBgAzZrBj9kIrty7 [truncated]... != u''
- Q7kdCF6TYdKFOFAjrlmi910KVZ7NnDY+/DeQVe3Qd81BhGSF2ChutTqQB2skMbqBgAzZrBj9kIrty7vBzY5LxdiUQbWGsM7THGb9w7MYqFpTKKtAy4ZJUUpCxQ0gqEvoSAR21F288IgJIuBZc1MJbBr6n2uMPVHl3zc0Box8trDPjqiVOWpDLrfFcBdQeFj4udPemGc8MbWvv6MZNIsGrBJKi5zYGlbv+hsooVgjNNWWrWkIBRivMxMfA2K4CKl3kJoxflEwGr5G9o/qGPXb7xCS7NZWU9F+DQeiw7R4GRyRqtFOUMEWE5uR/rLUoFVdmhgFcgSoIbw9Bpe1XLc8SQ==
+


======================================================================
FAIL: test_sign_data_with_private_key_sha256 (tests.test.AliPayTestCase)
openssl 以及aliapy分别对数据进行签名,得到同样的结果
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/vagrant/coding/alipay/tests/test.py", line 120, in test_sign_data_with_private_key_sha256
    self.assertEqual(result1, result2)
AssertionError: u'N1IQLlHVZSmai3D0kF2r3IZTwrpUQdh0pbUAjE8bbiKBjRUvXX2T127yJW2pre4kPlS2HWgdbV6yDq [truncated]... != u''
- N1IQLlHVZSmai3D0kF2r3IZTwrpUQdh0pbUAjE8bbiKBjRUvXX2T127yJW2pre4kPlS2HWgdbV6yDqk2ykIDHldFnJBkhs/UPwt4D1Lt2rKgGETH1Tn98vgvbmYtAXNZDCAK6CcA+FTVFrpsHmBC4AkUppOb97gzmDeTRh9vTOXzNoMBv7bYktdCRPBODQEXhcTfYNS57JgB25+uuHeAQdju3TdMeupHj2K0ktpBCLNwc9FOXAjOBil0Bo3aEV4+RLllGcsig5oe3vrKL5OfenSzA9YbgiGhHC8lWtYYeeBlOY0zijRTb+uCnnwMQTKbLHY/1HoY/D9b7n1uBAL1Bw==
+


----------------------------------------------------------------------
Ran 18 tests in 0.941s

FAILED (failures=2)

操作系统和python版本如下:

$ cat /etc/issue
Ubuntu 18.04 LTS \n \l

$ python -V
Python 2.7.15rc1

怎么才能让测试通过呀?

AliPayValidationError at alipay.fund.trans.toaccount.transfer

I run the examples on your document(thanks for this wonderful solution) and there is one point that I'm confuse about:

  File "/alipay/alipay/alipay/__init__.py", line 488, in api_alipay_fund_trans_toaccount_transfer
    raw_string, "alipay_fund_trans_toaccount_transfer_response"
  File "/alipay/alipay/alipay/__init__.py", line 524, in _verify_and_return_sync_response
    raise AliPayValidationError
alipay.alipay.exceptions.AliPayValidationError

When running the demo code of alipay.fund.trans.toaccount.transfer

I saw one issues about it but I think my key is right because I actually saw the transfer result success in the sandbox app.(It raise the error at verification)

Here is my code

app_private_key_path="/alipay/app_private_key.pem"
alipay_public_key_path="/alipay/alipay_pubilc_key.pem"

with open(app_private_key_path) as fp:
    app_private_key_string = open(app_private_key_path).read()#RSA.importKey(fp.read())

with open(alipay_public_key_path) as fp:
    alipay_public_key_string = open(alipay_public_key_path).read()#RSA.import_key(fp.read())

alipay = AliPay(
    appid="", # my code number which I didn't forget it
    app_notify_url="http://0.0.0.0:5000/", 
    app_private_key_string=app_private_key_string,
    alipay_public_key_string=alipay_public_key_string,
    sign_type="RSA2",
    debug=True, 
)

result = alipay.api_alipay_fund_trans_toaccount_transfer(
out_biz_no=datetime.now().strftime("%Y%m%d%H%M%S"),
payee_type="ALIPAY_LOGONID",
payee_account=person_acount,
amount=1.91,
        **{
            "payer_show_name":"test",
            # payee_real_name:"",
            "remark":"test",
        }
    )

the same error happens on alipay.fund.trans.order.query too.

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

你好,环境是: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)
`

django通知验证一直FALSE

data = urlparse.parse_qs(request.body)   
signature = data.pop('sign')
success = alipay.verify(data, signature)

request.body如下:
gmt_create=2018-07-10+14%3A50%3A18&charset=utf-8&gmt_payment=2018-07-10+14%3A50%3A30&notify_time=2018-07-10+14%3A50%3A30&subject=%E5%85%85%E5%80%BC1%E5%85%83&sign=NwhSk2DWQRiV25HQXRXzwvcFh0jJy2D3zQBG%2Bp%2BAzVNFx8whfj0Zmm6eFmX19F2HhiDpqOXJ9NY5lUU0KyugsAbEEOYnc%2Fvrx3KeVniSW7G5jExL8n42tvvVqOgRgwsf7eQqiStEkvgOX55olPeX7JaJS0A0dh%2BlgvScSXR3u330x6xu%2BiX0RXzkBm9%2FhuxDufQ5eR3jJNBWl0nC6NBhjHCwcwZDclo0SEfljSW4wUhN%2FEwLEQvcbU2ghwHQUT1awtZtgA2YEHLDt14S2nz4hre3wFr8LP%2F92Kl1fV2At7tbh7Yej5fQppavtm7huMfHbo7PwIfO94YAAb1wz4G1uQ%3D%3D&buyer_id=2088802801047800&invoice_amount=0.01&version=1.0&notify_id=5ca5872707f24d41d27ff65d6afc6f5m6d&fund_bill_list=%5B%7B%22amount%22%3A%220.01%22%2C%22fundChannel%22%3A%22ALIPAYACCOUNT%22%7D%5D&notify_type=trade_status_sync&out_trade_no=2016111118&total_amount=0.01&trade_status=TRADE_SUCCESS&trade_no=2018071021001004800520919284&auth_app_id=2018062460380864&receipt_amount=0.01&point_amount=0.00&app_id=2018062460380864&buyer_pay_amount=0.01&sign_type=RSA2&seller_id=2088102323393514

urlparse.parse_qs(request.body) :
{'app_id': ['2018062460380864'], 'auth_app_id': ['2018062460380864'], 'buyer_id': ['2088802801047800'], 'buyer_pay_amount': ['0.01'], 'charset': ['utf-8'], 'fund_bill_list': ['[{"amount":"0.01","...CCOUNT"}]'], 'gmt_create': ['2018-07-10 14:50:18'], 'gmt_payment': ['2018-07-10 14:50:30'], 'invoice_amount': ['0.01'], 'notify_id': ['5ca5872707f24d41d27...afc6f5m6d'], 'notify_time': ['2018-07-10 14:50:30'], 'notify_type': ['trade_status_sync'], 'out_trade_no': ['2016111118'], 'point_amount': ['0.00'], ...}

api_alipay_trade_query data return without sign

当我调用api_alipay_trade_query去查询订单信息的时候

阿里返回的数据里面没有Sign
{u'alipay_trade_query_response':
{u'msg': u'Invalid Arguments',
u'sub_code': u'isv.invalid-app-id',
u'code': u'40002',
u'sub_msg': u'\u65e0\u6548\u7684AppID\u53c2\u6570'}
}

所以_verify_and_return_sync_response
方法里面的
sign = response["sign"]
会报报KeyError: 'sign'

求解答。

这个APPID是可以用来下单的。我测试了一下网页下单。可以到支付宝去支付。
但是为什么查询的时候会说APPID不可用????感觉也是很奇怪。。

为什么服务器签名后给客户端,客户端支付总是ALI38173错误

app_id=2017062607569111&biz_content=%7B%22out_trade_no%22%3A332%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A1%2C%22subject%2
2%3A%22aaaa%22%7D&charset=utf-8&method=alipay.trade.app.pay&notify_url=http%3A%2F%2F114.229.67.15%3A8088%2Fbillalipay%3Fmethod%3DpayResult&sign_type=RSA2&timestamp=2018-01-23+10%3A36%3A36&version=1
.0&sign=EdE8z%2B6%2B31GgxXF4fa468vteX3lqqmCvHbkc1PxjYosrsUzbX%2FEaRtFhnMbSyFYh6%2B3S8vgSaQqs%2BMaz1qsFXqgFVgq3ohhU%2BmhTIp0CDDOxN4ZNK5HsA4ZgnTP92ixI18KR0Eq6tz0OYs3xwLPS9jyzKt6yH%2Fg4geEfai45aPdVP9f
fwlodW5NQfFTjCIFKwFIzBERmKsfgoPLWw8dLDDkjk2O46b1xlmus0HS%2B68xYKJbvoL59NfIMMUv0aJ9%2FtbJJ8oNoSS1mFjosy7yGZyvCQgnTkfjdiEN1KGnUii9dFLV1UHdYiBqMcsYKAfzkdSQmH%2BnYFr4sQX080rDZyQ%3D%3D

ras2 valid failed

hi:
i suspect you were Chinese, so i write in Chinese.
当我使用 alipay sdk 创建, alipay_fund_trans_toaccount_transfer 支付的时候
会报 alipay.exceptions.AliPayValidationError 的异常, 但是支付确实成功了. 支付宝同步接口验证签名的问题, 我这边一直没有解决, 你有没有好的解决方案呢?

签名无效

错误代码 invalid-signature 错误原因: 无效签名(我使用沙箱),已验证过,私钥签名的字符串公钥可以解密

wap支付的时候有bug

create_wap_trade方法里,biz_content最终并没有赋值,会造成跳转到支付宝支付时出现 ALI38173错误

alipay.exceptions.AliPayValidationError

`from alipay import AliPay
import qrcode # 导入模块
import time

out_trade_no = 'eb0d16e5-38d9-4fc4-ba6b-59787532eba1'

alipay = AliPay(
appid='2017071207730100',
app_notify_url='http://www.example.io/pay/alipay/verify',
app_private_key_path='../rsa_private_key.pem',
alipay_public_key_path='../rsa_public_key.pem',
sign_type="RSA", # RSA or RSA2
)

create an order

result = alipay.api_alipay_trade_precreate(
subject='vip1month',
out_trade_no=out_trade_no,
total_amount=0.01
)`
返回内容:
{"code":"10000","msg":"Success","out_trade_no":"eb0d16e5-38d9-4fc4-ba6b-59787532eba1","qr_code":"https://qr.alipay.com/bax04455bp1jlvn7mx0h60ea"}
返回sign:
OTpTRfQ6ChZsjo/5gbMHJpF2p/2C6UHuZVYNG13yOityCpCZOIDCrLEKYwOIQFJsFuEhLxEX7RQLD1c7mfPEKC63GD4WYKuSMeZVkX7QLTb0UdU8XNtsIbt5Hqti4OD4jcVDJ4IyzgcycxtYDZfk232xvrqgs9z1tHUchhNF8Mw=
看上去创建qr_code成功了,但是_verify_and_return_sync_response的时候所签名不对
签名功能我用支付宝提供的接口验证是正确的,这会是什么问题尼?
环境:Python3.6.1 windows10

使用api_alipay_trade_query的时候报错

======代码
@app.route('/check_pay/', methods=['POST'])
def check_pay():
# 创建用于进行支付宝支付的工具对象
order_id = flask.request.form.get("order_id")
alipay = AliPay(
appid=ALIPAY_APPID,
app_notify_url=None, # 默认回调url
app_private_key_path=os.path.join(BASE_DIR, "malipay/app_private_key.pem"),
alipay_public_key_path=os.path.join(BASE_DIR, "malipay/alipay_public_key.pem"),
# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
sign_type="RSA2", # RSA2,官方推荐,配置公钥的时候能看到
debug=True # 默认False 配合沙箱模式使用
)

# raw_string = urlopen(url, timeout=15).read().decode("utf-8")
while True:
    # 调用alipay工具查询支付结果
    response = alipay.api_alipay_trade_query(out_trade_no=order_id)  # response是一个字典
    # 判断支付结果
    code = response.get("code")  # 支付宝接口调用成功或者错误的标志
    trade_status = response.get("trade_status")  # 用户支付的情况

    if code == "10000" and trade_status == "TRADE_SUCCESS":
        # 表示用户支付成功
        # 返回前端json,通知支付成功
        return flask.jsonify({"code": 0, "message": "支付成功"})

    elif code == "40004" or (code == "10000" and trade_status == "WAIT_BUYER_PAY"):
        # 表示支付宝接口调用暂时失败,(支付宝的支付订单还未生成) 后者 等待用户支付
        # 继续查询
        print(code)
        print(trade_status)
        continue
    else:
        # 支付失败
        # 返回支付失败的通知
        return flask.jsonify({"code": 1, "message": "支付失败"})

=====
报错信息
raise ValueError("Not a valid PEM post boundary")
ValueError: Not a valid PEM post boundary

可以支付,但是不能查询。希望帮忙看下。

签名验证问题 :)

Hello, 非常感谢你提供的这个支付宝 API SDK。学习了很多。
关于签名验证这块,支付宝文档 一节说只对返回的 xx_response 的内容进行校验。目前的代码中好像没有这种验证方式吧,不知道能不能帮忙看看。Thanks

交易预创建收不到异步消息

我在Alipay创建实例时设置了app_notify_url,但测试多次都未收到支付宝的异步通知,后来发现是由于代码在build_body方法if method in ()中未考虑"alipay.trade.precreate"的情况,所以新开了个issue,以便后面和我遇到同一情况的人可以参考一下。
2017-11-15 10 16 44

web支付也有编码问题

如下:
order_string = alipay.create_web_trade(out_trade_no=o.order_no, total_amount=str(o.total_fee), subject=o.subject, return_url="http://pay.xxxx.com/alipay/sz_return_result/")
File "/usr/local/lib/python2.7/dist-packages/alipay/init.py", line 206, in create_web_trade
"&sign_type=" + self.__sign_type
File "/usr/local/lib/python2.7/dist-packages/alipay/init.py", line 209, in _sign_data
sign = self._sign_data_with_private_key(data, private_key_path)
File "/usr/local/lib/python2.7/dist-packages/alipay/init.py", line 138, in _sign_data_with_private_key
unsigned_string = "&".join("{}={}".format(k, v) for k, v in unsigned_items)
File "/usr/local/lib/python2.7/dist-packages/alipay/init.py", line 138, in
unsigned_string = "&".join("{}={}".format(k, v) for k, v in unsigned_items)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128)

证书无法读取

很奇怪,我这边无论是windows还是linux在调用verify_app_notify这个函数的时候都报下面那个错
"RSA key format is not supported"

跟进去看了下,错在__init__.py 121行key = RSA.importKey(fp.read()),查了下 因为我的privatekey是base64编码,而importKey接受二进制,要么key = RSA.importKey(b64decode(fp.read())),要么 open的时候用"rb"模式,不然不可能能通过测试啊。。

无语的错误

subject = "话费余额充值",
out_trade_no =int(time.time())
total_amount = 0.01
#print(out_trade_no)
# create an order
result = alipay.api_alipay_trade_precreate(
subject=subject,
out_trade_no=out_trade_no,
total_amount=total_amount)
print('返回值:',result)
#输出
返回值: {'code': '40004', 'msg': 'Business Failed', 'sub_code': 'ACQ.INVALID_PARAMETER', 'sub_msg': '参数无效'}
#开启debug
File "C:\Users\ELI\Envs\py3_env\lib\site-packages\python_alipay_sdk-1.7.1-py3.6.egg\alipay_init_.py", line 451, in api_alipay_trade_precreate
File "C:\Users\ELI\Envs\py3_env\lib\site-packages\python_alipay_sdk-1.7.1-py3.6.egg\alipay_init_.py", line 517, in _verify_and_return_sync_response
KeyError: 'sign'

请问哪里错了?

验证失败

返回参数
{'gmt_create': ['2017-12-13 11:23:37'],
'charset': ['utf-8'],
'invoice_amount': ['0.01'],
'notify_id': ['023944d368078f9803caa42ec8fc825m3l'],
'notify_type': ['trade_status_sync'],
'trade_status': ['TRADE_SUCCESS'],
'receipt_amount': ['0.01'],
'buyer_pay_amount': ['0.01'],
'sign_type': ['RSA'],
point_amount': ['0.00']}>
验证
success = alipay.verify(data, signature)

sign_type = ['RSA'] self = 'RSA'

def verify(self, data, signature):
if "sign_type" in data:
sign_type = data.pop("sign_type")
if sign_type != self._sign_type:
raise AliPayException(None, "Unknown sign type: {}".format(sign_type))

Error: Incorrect padding

接收回调验签时报错

Traceback (most recent call last):
  File "/Users/wuyazi/Workspace/env/italki/lib/python2.7/site-packages/tornado/web.py", line 1042, in _execute
    getattr(self, self.request.method.lower())(*args, **kwargs)
  File "/Users/wuyazi/italki/italki_one_backend/src/italki/payment/views/api_payment.py", line 1164, in get
    return self._do_task()
  File "/Users/wuyazi/italki/italki_one_backend/src/italki/payment/views/api_payment.py", line 1158, in _do_task
    if order_id and alipay_notify_method(self, order_id=order_id, **req_args):
  File "/Users/wuyazi/italki/italki_one_backend/src/italki/payment/alipaycn/__init__.py", line 91, in alipay_wap_notify
    verify_result = self.alipay_wap.verify(params, signature)
  File "/Users/wuyazi/italki/italki_one_backend/src/italkiexts/alipay/__init__.py", line 183, in verify
    return self._verify(message, signature)
  File "/Users/wuyazi/italki/italki_one_backend/src/italkiexts/alipay/__init__.py", line 171, in _verify
    if signer.verify(digest, decodebytes(signature.encode("utf8")[:-2])):
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/base64.py", line 321, in decodestring
    return binascii.a2b_base64(s)
Error: Incorrect padding

关于主页介绍中AliPay初始化的问题

在主页介绍中,app_notify_url设置为一个空的字符串,但是在实际测试中,如果不使用app_notify_url,那么一定要设置为None,不然就算是私钥和公钥设置好了,支付宝还是会提示验证签名失败

notify_url

报错:init() got an unexpected keyword argument 'notify_url'

api_alipay_trade_query 遇到错误

支付成功后,查看支付结果,遇到错误:
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py", line 41, in inner
response = get_response(request)
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 187, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 185, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/thinkgamer/Documents/github/travel/line/views.py", line 74, in check_pay
response = alipay.api_alipay_trade_query(out_trade_no=order_id) # response是一个字典
File "/usr/local/lib/python3.5/dist-packages/alipay/init.py", line 284, in api_alipay_trade_query
return self._verify_and_return_sync_response(raw_string, "alipay_trade_query_response")
File "/usr/local/lib/python3.5/dist-packages/alipay/init.py", line 496, in _verify_and_return_sync_response
sign = response["sign"]
KeyError: 'sign'

能否帮助解决一下

请问交易预创建(扫码支付)有返回二维码地址吗?

官方文档返回是:
"alipay_trade_precreate_response": {
"code": "10000",
"msg": "Success",
"out_trade_no": "6823789339978248",
"qr_code": "https://qr.alipay.com/bavh4wjlxf12tper3a"
},
"sign": "ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE"
}

其中,qr_code用来生成二维码让客人扫码支付,我看咱们SDK的例程里面没有返回好像

我自己写的代码,“同步返回验签”总是通不过,不知 作者有么有时间帮忙指导下呢?

请求成功后,Response 验证签名失败

/usr/local/lib/python3.7/site-packages/alipay/__init__.py in api_alipay_fund_trans_toaccount_transfer(self, out_biz_no, payee_type, payee_account, amount, **kwargs)
    479         raw_string = urlopen(url, timeout=15).read().decode("utf-8")
    480         return self._verify_and_return_sync_response(
--> 481             raw_string, "alipay_fund_trans_toaccount_transfer_response"
    482         )
    483
> /usr/local/lib/python3.7/site-packages/alipay/__init__.py(556)_verify_and_return_sync_response()
    554 
    555         if not self._verify(raw_string, sign):
--> 556             raise AliPayValidationError
    557         return result
    558 

ipdb> raw_string
'{"code":"10000","msg":"Success","order_id":"20181103110070001502900057938805","out_biz_no":"20181103104340","pay_date":"2018-11-03 18:43:39"}'

不能处理同步接口的错误

不能处理下面的报错

{
  "alipay_trade_query_response": {
    "sub_code": "isv.invalid-app-id",
    "code": "40002",
    "sub_msg": "无效的AppID参数",
    "msg": "Invalid Arguments"
  }
}

交易查询 error

如例子中那样,alipay = AliPay(appid="", ...),我直接运行
result = alipay.api_alipay_trade_query(out_trade_no='....')
print(result.get("trade_status", ""))

Traceback (most recent call last):
File "/home/PROJECT/aripayExample/MyAlipayInterface.py", line 111, in
result = f.AliPayClient.api_alipay_trade_query(out_trade_no='201808020882')
File "/home/PROJECT/code/LibEnv/lib/python3.5/site-packages/alipay/init.py", line 305, in api_alipay_trade_query
return self._verify_and_return_sync_response(raw_string, "alipay_trade_query_response")
File "/home/PROJECT/code/LibEnv/lib/python3.5/site-packages/alipay/init.py", line 517, in _verify_and_return_sync_response
sign = response["sign"]
KeyError: 'sign'

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.