1. 安装包

     # 安装python-alipay-sdk# --upgrade 是你之前安装了pycrypto, 加它是升级, 一次都没安装的用户, 直接pip install python-alipay-sdkpip install python-alipay-sdk --upgrade
    
  2. 生成密钥文件

     # openssl window上没有, linux下和mac上都带这个命令opensslOpenSSL> genrsa -out app_private_key.pem   2048  # 私钥OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem # 导出公钥OpenSSL> exit
    
  3. 把支付宝公钥填写到沙箱环境

  4. 把私钥放在项目里

  5. 查看支付宝的公钥

  1. 把支付宝公钥复制粘贴到你项目的alipay_public_key.pem文件夹里, 记得在头加上

    将-----BEGIN PUBLIC KEY-----添加到支付宝公钥的头部
    将-----END PUBLIC KEY-----添加到支付宝的尾部
    
  2. 初始化

     from alipay import AliPayalipay = AliPay(appid="",  # 沙箱appid 或 线上appidapp_notify_url=None,  # 默认回调url  不写的话这里用Noneapp_private_key_path="", # 私钥 alipay_public_key_path="", # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,sign_type="RSA", # RSA 或者 RSA2debug=False  # 默认False   沙箱环境把这里设置为True)
    
  3. 根据对象发送请求
    5.1 电脑网站支付 alipay.trade.page.pay

     # 如果你是Python 2用户(考虑考虑升级到Python 3吧),请确保非ascii的字符串为utf8编码:subject = u"测试订单".encode("utf8")# 如果你是 Python 3的用户,使用默认的字符串即可subject = "测试订单"# 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string 这是线上环境# 电脑网站支付, 需要跳转到https://openapi.alipaydev.com/gateway.do? + order_string 这是沙箱环境order_string = alipay.api_alipay_trade_page_pay(out_trade_no="20161112",  # 订单编号total_amount="0.01",  # 总金额subject=subject,  # 订单标题 随便写个字符串return_url="https://example.com", # 返回的链接地址notify_url="https://example.com/notify" # 可选, 不填则使用默认notify url 不填这里写None)
    

    5.2 手机网站支付 alipay.trade.wap.pay

     # 手机网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string 这是线上环境# 手机网站支付, 需要跳转到https://openapi.alipaydev.com/gateway.do? + order_string 这是沙箱环境order_string = alipay.api_alipay_trade_wap_pay(out_trade_no="20161112",  # 订单编号total_amount="0.01",  # 总金额subject=subject,  # 订单标题 随便写个字符串return_url="https://example.com",  # 返回的链接地址notify_url="https://example.com/notify" # 可选, 不填则使用默认notify url  不填这里写None)
    

    5.3 App支付 alipay.trade.app.pay

     # App支付,将order_string返回给app即可order_string = alipay.api_alipay_trade_app_pay(out_trade_no="20161112",  # 订单idtotal_amount=0.01,  # 总金额subject=subject,  # 订单标题  随便写个字符串notify_url="https://example.com/notify" # 可选, 不填则使用默认notify url  不填这里写None)
    
  4. 基于flask的简单验证

     from flask import Flaskfrom flask import requestapp = Flask(__name__)@app.route('/', methods=["GET", "POST"])def hello_world():data = request.form.to_dict()# sign 不能参与签名验证signature = data.pop("sign")print(json.dumps(data))print(signature)# verifysuccess = alipay.verify(data, signature)if success and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED" ):print("trade succeed")
    
  5. 列子

    1. 支付宝付款接口链接返回给前端

       from . import apifrom ihome.models import Orderfrom ihome.utils.commons import login_requiredfrom flask import g, current_app, jsonifyfrom ihome.utils.response_code import RETfrom ihome import constantsfrom alipay import AliPayimport os@api.route("/orders/<int:order_id>/payment", methods=["POST"])@login_requireddef order_pay(order_id):"""订单支付:param order_id: 订单的id:return: 支付宝支付的链接地址 格式json"""# 接收用户iduser_id = g.user_id# 校验参数# 根据order_id查询数据库, order_id是否存在, 订单是否属于该用户, 订单是否是待支付状态try:order = Order.query.filter(Order.id == order_id, Order.user_id == user_id, Order.status == "WAIT_PAYMENT").first()except Exception as e:current_app.logger.error(e)return jsonify(errnum=RET.DBERR, errmsg=u"获取订单信息失败")if order is None:return jsonify(errnum=RET.NODATA, errmsg=u"订单信息不存在")# 业务处理# 创建支付宝sdk的工具对象alipay_client = AliPay(appid="2016092500596768",  # 沙箱appid 或 线上appidapp_notify_url=None,  # 默认回调url  不写的话这里用None# os.path.dirname(__file__): 获取当前文件所在目录的路径app_private_key_path=os.path.join(os.path.dirname(__file__), "keys/app_private_key.pem"),  # 私钥alipay_public_key_path=os.path.join(os.path.dirname(__file__), "keys/alipay_public_key.pem"),  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,sign_type="RSA2",  # RSA 或者 RSA2debug=False  # 默认False   沙箱环境把这里设置为True)# 手机网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string 这是线上环境# 手机网站支付, 需要跳转到https://openapi.alipaydev.com/gateway.do? + order_string 这是沙箱环境order_string = alipay_client.api_alipay_trade_wap_pay(out_trade_no=order.id,  # 订单编号total_amount=str(order.amount/100.0),  # 总金额subject=u"订单编号 %s" % order.id,  # 订单标题 随便写个字符串return_url="http://172.16.66.238:5000/orders.html",  # 返回的链接地址notify_url=None  # 可选, 不填则使用默认notify url  不填这里写None)# 构造让用户跳转的支付链接地址 这里用的是沙箱环境pay_url = constants.ALIPAY_URL_PREFIX + order_string# 返回应答return jsonify(errnum=RET.OK, errmsg=u"ok", data={"pay_url": pay_url})
      
    2. 前端回跳的参数

    3. 验证是否是支付宝发送过来的

       @api.route("/order/payment", methods=["PUT"])def save_order_payment_result():"""保存订单支付结果"""# 接收参数# 将form表单数据转换成字典alipay_dict = request.form.to_dict()# 对支付宝的数据进行分离  提取出支付宝的签名参数sign 和剩下的其他数据alipay_sign = alipay_dict.pop("sign")# 业务处理# 创建支付宝sdk的工具对象alipay_client = AliPay(appid="2016092500596768",  # 沙箱appid 或 线上appidapp_notify_url=None,  # 默认回调url  不写的话这里用None# os.path.dirname(__file__): 获取当前文件所在目录的路径app_private_key_path=os.path.join(os.path.dirname(__file__), "keys/app_private_key.pem"),  # 私钥alipay_public_key_path=os.path.join(os.path.dirname(__file__), "keys/alipay_public_key.pem"),# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,sign_type="RSA2",  # RSA 或者 RSA2debug=False  # 默认False   沙箱环境把这里设置为True)# 借助工具验证参数的合法性# 如果确定参数是支付宝的, 返回True, 否则返回Falseresult = alipay_client.verify(alipay_dict, alipay_sign)if result:# 获取订单idorder_id = alipay_dict.get("out_trade_no")# 获取支付宝交易号trade_no = alipay_dict.get("trade_no")try:# 这里是根据订单id查询这个订单, 并且更新订单里的status和trade_no着两个字段Order.query.filter_by(id=order_id).update({"status": "WAIT_COMMENT", "trade_no": trade_no})# 保存到数据库中db.session.commit()except Exception as e:# 有异常记录log日志current_app.logger.error(e)# 回滚到提交前db.session.commit()# 返回应答return jsonify(errnum=RET.OK, errmsg=u"ok")
      
  6. 线上环境就是把沙箱的appid换成线上的appid, 访问的域名用线上的域名.

python接入支付宝接口相关推荐

  1. 【最详细,最新】电脑网站接入支付宝接口

    开发完这个功能之后,归纳下来可分为两个大步骤:相关权限申请和代码植入.但是对于第一次开发这个功能的人来说,面对支付宝海量的文档说明是很耗费时间的.说到这里,不得不吐槽下微信的接口文档.那开始吧!!!! ...

  2. python接入支付宝

    支付宝接口集成 1.登陆蚂蚁金服开发者平台,创建沙箱应用 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传 2.生成应用的公钥与私钥 [外链图片转存失败,源站可能有防盗链机制,建议 ...

  3. 个人站长福音:接入支付宝接口,实现在线支付功能

    相信有很多个人站长跟我一样,喜欢自己开发一些小功能小程序,然后放到 web 上,就拿最简单的来说,做了个博客网站,然后看访问人气还不错.然后想想每个月服务器的开销几百块,就心疼.然后就想多个打赏功能, ...

  4. 个人如何用python支付宝收款_python怎么接入支付宝

    Python接入支付宝流程: 第一步: 首先要下载一个python的sdk,这个sdk在支付宝的开发者文档中是没有的,但是强大的python程序员自己开发了一套属于python的支付宝支付sdk. 下 ...

  5. Android接入支付宝开发

    Android接入支付宝接口主要分为以下几大步奏: 作为程序员,其实我们只是做了第五步的工作,假如你需要自己一个人都完成上述的操作,详细的步骤请看支付宝移动支付的官网: https://cshall. ...

  6. WooCommerce接入支付宝微信支付

    WooCommerce接入支付宝微信支付 前言 安装支付宝插件(方法一) 安装配置 获取注册信息 安装支付宝插件(方法二) 安装微信支付插件 下载及安装 获取微信公众号APPID,微信支付密钥 获取微 ...

  7. python 微信支付接口 详解_Python支付接口汇总大全(包含微信、支付宝等,长期更新、欢迎补充)...

    wzhifuSDK- 由微信支付SDK 官方PHP Demo移植而来,v3.37下载地址 学习Python中有不明白推荐加入交流群 号:864573496 群里有志同道合的小伙伴,互帮互助, 群里有不 ...

  8. 第四百零三节,python网站在线支付,支付宝接口集成与远程调试,

    第四百零三节,python网站在线支付,支付宝接口集成与远程调试, windows系统安装Python虚拟环境 首先保证你的系统已经安装好了Python 安装virtualenv C:\WINDOWS ...

  9. H5网站接入支付宝的支付接口

    写本文章的目的是为了记录工作中遇到的问题,方便以后遇到可以迅速解决问题 H5手机网站接入支付宝的支付接口,推荐使用支付宝提供的SDK来快速开发 我使用的是SDK开发 引用命名空间 using Aop. ...

最新文章

  1. Spring Boot 2.4.0 全新发布,还不快来实战
  2. 线性代数:特征值有重根时,相同特征值对应的不同特征向量顺序能交换吗?
  3. C#编程-Access数据库的简单应用
  4. Dinic算法----最大流常用算法之一
  5. C++远征之封装篇——类和封装、实例化和对象成员访问
  6. 吉大计算机学院刘淑芬,刘淑芬-吉林大学计算机科学与技术学院
  7. Python大佬利用新接口抓取微信公众号的所有文章
  8. 【编译原理笔记17】代码优化:数据流分析,到达定值分析,到达定值方程的计算
  9. SCCM2012系列之六,SCCM2012部署前的WDS准备
  10. java2实用教程第四版实验指导_Java2实用教程(第4版)实验指导与习题解答_IT168文库(精)...
  11. 一次debug过程描述
  12. LintCode 38: Search a 2D Matrix II
  13. 使用jsp实现成语接龙
  14. 初见Autorun病毒与解决办法
  15. 数据结构线性表-----静态链表
  16. 中国象棋(单机版)java_中国象棋大师-中国象棋单机版下载 2017最新版-中国象棋单机游戏下载-pc6游戏网...
  17. 跨页面的多选功能实现
  18. vba中FreezePanes(冻结窗格)用法
  19. 韩信点兵(中国剩余定理)
  20. SQL Server 定时自动备份和自动删除方法图文超详细步骤

热门文章

  1. imx6开发环境搭建之yocto全记录(L4.1.15_2.0.0)
  2. Keil环境添加STC系列单片机
  3. CVE 2013-2094 exploit 实验笔记
  4. 使用css做水印效果
  5. PHP 多任务秒级定时器的实现方法
  6. nginx url实现二次转发
  7. JZ77 按之字形顺序打印二叉树
  8. 【译】css动画里的steps()用法详解
  9. 其他状态(非Buff/Debuff、异常状态的状态)
  10. CentOS7.x 安装 openssh8.4、openssl1.1.1