支付宝介绍
支付宝开发网址:
支付宝开放平台: https://open.alipay.com/platform/home.htm 支付宝沙箱环境: https://openhome.alipay.com/platform/appDaily.htm?tab=info
支付宝开发者文档:https://openhome.alipay.com/developmentDocument.htm
电脑网站支付流程:https://docs.open.alipay.com/270
生成签名:https://docs.open.alipay.com/291/106103/
python-alipay-adk : https://github.com/fzlee/alipay/blob/master/README.zh-hans.md
使用python对接支付宝:
- 直接使用第三方SDK(python-alipay-sdk): https://github.com/fzlee/alipay/blob/master/README.zh-hans.md
- 登录开发者中心,熟悉"电脑网站支付"整体流程
# 访问"支付宝开发平台"登录,可以访问开发者中心 https://open.alipay.com/platform/home.htm # 可以参考"电脑网站支付" 熟悉电脑支付整体流程 https://docs.open.alipay.com/270/105899/
创建应用(这里使用沙箱环境测试)
沙箱环境说明:
- 线上环境需要创建应用,因为我们不是企业,没有资质,所以只能申请沙箱环境
- 简单来讲沙箱环境就是给开发者使用的测试环境
- 沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info
按照官方要求生成秘钥:
生成秘钥参考官网:https://docs.open.alipay.com/291/105971
把生成的app公钥粘贴到沙箱环境的app中:
- 沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info
- 粘贴app公钥到沙箱环境中
- 支付宝公钥一会再程序中要使用
使用 python-alipay-sdk 支付&查询支付结果
- 说明
1. 阿里官方没有提供python对接支付的sdk,但是python库中有非官方的sdk包可以使用
2. python-alipay-adk : https://github.com/fzlee/alipay/blob/master/README.zh-hans.md
3. 使用起来非常简单,只要传入几个必要的参数就可以完成
4. 由于支付对安全要求很高,所以要理解对接支付宝安全的流程:公钥加密、私钥解密 这八个字
- 上代码
from alipay import AliPay # 沙箱环境中 app 私钥 app_private_key_string = open('app_private_key.pem').read() # 支付宝公钥 alipay_public_key_string = open( 'alipay_public_key.pem').read() def get_alipay_url(): alipay = AliPay( appid="2016101800716047", # 沙箱appid app_notify_url=None, # 默认回调url app_private_key_string=app_private_key_string, # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥, alipay_public_key_string=alipay_public_key_string, sign_type="RSA", # RSA 或者 RSA2 debug=True, # 默认False,我们是沙箱,所以改成True(让访问沙箱环境支付宝地址) ) # 调用支付接口 # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string order_string = alipay.api_alipay_trade_page_pay( out_trade_no="201611124", # 订单id,应该从前端获取 total_amount=str(0.01), # 订单总金额 subject="测试阿里云付款", # 付款标题信息 return_url=None, # 付款成功回调地址(可以为空) notify_url=None # 付款成功后异步通知地址(可以为空) ) pay_url = "https://openapi.alipaydev.com/gateway.do?" + order_string print(pay_url) # 将这个url复制到浏览器,就会打开支付宝支付页面 def query_pay(): alipay = AliPay( appid="2016101800716047", # 沙箱appid app_notify_url=None, # 默认回调url app_private_key_string=app_private_key_string, # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥 alipay_public_key_string=alipay_public_key_string, sign_type="RSA", # RSA 或者 RSA2 debug=True, # 默认False,我们是沙箱,所以改成True(让访问沙箱环境支付宝地址) ) trade_query = alipay.api_alipay_trade_query( out_trade_no=20161112, # 上面生成支付码页面时传入的商品订单号 trade_no=None ) print(trade_query) if __name__ == '__main__': get_alipay_url() query_pay() ''' trade_query 查询用户付款信息 返回信息详情请看官方:https://docs.open.alipay.com/api_1/alipay.trade.query { "code": "10000", # code=10000代表支付成功 "msg": "Success", "buyer_logon_id": "foq***@sandbox.com", "buyer_pay_amount": "0.00", "buyer_user_id": "2088102180228981", "buyer_user_type": "PRIVATE", "invoice_amount": "0.00", "out_trade_no": "20161112", "point_amount": "0.00", "receipt_amount": "0.00", "send_pay_date": "2020-02-20 21:20:48", "total_amount": "0.01", "trade_no": "2020022022001428981000087565", "trade_status": "TRADE_SUCCESS" } ''' alipay_test.py