1. 需要去官方网页里面登录自己的账号

https://open.alipay.com/

2. 登录后需要保存一些数据

  1. 进入网址之后进行登录=》控制台=》沙箱
  2. 保存APPID
  3. 保存公钥&密钥

3. 安装支付宝模块

pip install python-alipay-sdk --upgrade
pip uninstall PyCrypto
pip uninstall PyCryptodome
pip install PyCryptodome

4. 封装支付宝支付方法

  1. 创建一个keys/private_key.txt写入私钥
-----BEGIN RSA PRIVATE KEY-----
写入保存到的私钥
-----END RSA PRIVATE KEY-----
  1. 创建一个keys/public_key.txt写入公钥
-----BEGIN PUBLIC KEY-----
写入保存到的公钥
-----END PUBLIC KEY-----
  1. 创建一个utlis/pay.py写入代码
from datetime import datetime
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256
from urllib.parse import quote_plus
from urllib.parse import urlparse, parse_qs
from base64 import decodebytes, encodebytes
import jsonclass AliPay(object):"""支付宝支付接口(PC端支付接口)"""def __init__(self, appid, app_notify_url, app_private_key_path,alipay_public_key_path, return_url, debug=False):self.appid = appidself.app_notify_url = app_notify_urlself.app_private_key_path = app_private_key_pathself.app_private_key = Noneself.return_url = return_urlwith open(self.app_private_key_path) as fp:self.app_private_key = RSA.importKey(fp.read())self.alipay_public_key_path = alipay_public_key_pathwith open(self.alipay_public_key_path) as fp:self.alipay_public_key = RSA.importKey(fp.read())if debug is True:self.__gateway = "https://openapi.alipaydev.com/gateway.do"else:self.__gateway = "https://openapi.alipay.com/gateway.do"def direct_pay(self, subject, out_trade_no, total_amount, return_url=None, **kwargs):biz_content = {"subject": subject,"out_trade_no": out_trade_no,"total_amount": total_amount,"product_code": "FAST_INSTANT_TRADE_PAY",# "qr_pay_mode":4}biz_content.update(kwargs)data = self.build_body("alipay.trade.page.pay", biz_content, self.return_url)return self.sign_data(data)def query_pay(self, out_trade_no,return_url=None, **kwargs):biz_content = {"out_trade_no": out_trade_no,# "product_code": "FAST_INSTANT_TRADE_PAY",# "qr_pay_mode":4}biz_content.update(kwargs)data = self.build_body("alipay.trade.query", biz_content, self.return_url)return self.sign_data(data)def build_body(self, method, biz_content, return_url=None):data = {"app_id": self.appid,"method": method,"charset": "utf-8","sign_type": "RSA2","timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),"version": "1.0","biz_content": biz_content}if return_url is not None:data["notify_url"] = self.app_notify_urldata["return_url"] = self.return_urlreturn datadef sign_data(self, data):data.pop("sign", None)# 排序后的字符串unsigned_items = self.ordered_data(data)unsigned_string = "&".join("{0}={1}".format(k, v) for k, v in unsigned_items)sign = self.sign(unsigned_string.encode("utf-8"))# ordered_items = self.ordered_data(data)quoted_string = "&".join("{0}={1}".format(k, quote_plus(v)) for k, v in unsigned_items)# 获得最终的订单信息字符串signed_string = quoted_string + "&sign=" + quote_plus(sign)return signed_stringdef ordered_data(self, data):complex_keys = []for key, value in data.items():if isinstance(value, dict):complex_keys.append(key)# 将字典类型的数据dump出来for key in complex_keys:data[key] = json.dumps(data[key], separators=(',', ':'))return sorted([(k, v) for k, v in data.items()])def sign(self, unsigned_string):# 开始计算签名key = self.app_private_keysigner = PKCS1_v1_5.new(key)signature = signer.sign(SHA256.new(unsigned_string))# base64 编码,转换为unicode表示并移除回车sign = encodebytes(signature).decode("utf8").replace("\n", "")return signdef _verify(self, raw_content, signature):# 开始计算签名key = self.alipay_public_keysigner = PKCS1_v1_5.new(key)digest = SHA256.new()digest.update(raw_content.encode("utf8"))if signer.verify(digest, decodebytes(signature.encode("utf8"))):return Truereturn Falsedef verify(self, data, signature):if "sign_type" in data:sign_type = data.pop("sign_type")# 排序后的字符串unsigned_items = self.ordered_data(data)message = "&".join(u"{}={}".format(k, v) for k, v in unsigned_items)return self._verify(message, signature)
  1. 封装调用支付方法,下面的app_id需要写入自己保存的APPID
#导入支付基类
from utils.pay import AliPay#初始化阿里支付对象
def get_ali_object():# 沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=infoapp_id = "2021000120615296"  #  APPID (沙箱应用)# 支付完成后,支付偷偷向这里地址发送一个post请求,识别公网IP,如果是 192.168.20.13局域网IP ,支付宝找不到,def page2() 接收不到这个请求notify_url = "http://127.0.0.1:5000/callback"# 支付完成后,跳转的地址。return_url = "http://localhost:8080/"merchant_private_key_path = "./keys/private_key.txt" # 应用私钥alipay_public_key_path = "./keys/public_key.txt"  # 支付宝公钥alipay = AliPay(appid=app_id,app_notify_url=notify_url,return_url=return_url,app_private_key_path=merchant_private_key_path,alipay_public_key_path=alipay_public_key_path,  # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥debug=True,  # 默认False,)return alipay
  1. 去蓝图调用
# 支付宝平台
from utils.procom import get_ali_object@shops_bp.route('/alipay')
def getalipay():alipay = get_ali_object()res = alipay.direct_pay(subject='订单:123456',  # 商品描述out_trade_no='66666'),  # 用户购买的商品订单号total_amount = 66.6)  # 交易金额pay_url = f"https://openapi.alipaydev.com/gateway.do?{res}"# return redirect(pay_url)    # 访问是跳转到pay_url页面return jsonify({'code': 200, 'url': pay_url})
  1. 前端使用window跳转
window.location.href = url

flask 支付宝的使用相关推荐

  1. alipay支付宝支付的python实现(flask)

    1,环境 ubuntu16.04,python3.6, alipay-sdk-python(3.20) 2,安装包 alipay提供了python包,封装了很多api调用.签名验证等功能,直接 pip ...

  2. python客户端修改session_python中flask的Session设置的方法介绍

    本篇文章给大家带来的内容是关于python中flask的Session设置的方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 什么是Session? cookie: 客户端浏览 ...

  3. Flask爱家租房--订单支付(支付过程)

    文章目录 0.支付流程 1. 重点总结 2.后端代码 3.前端js 4.前端html 0.支付流程 1. 重点总结 1)用户进入"我的订单"页面,点击"去支付" ...

  4. flask常用的第三方平台,第三方库,扩展包

    Flask的一些第三方平台 小米推送(本来没想用小米的,抵不住前几年小米手机买的好名气大,我就用用试试.这里说一下和其他平台相比的不足点,小米推送目前不支持富文本的但是效率是很不错的.) ShareS ...

  5. python接入支付宝接口

    安装包 # 安装python-alipay-sdk# --upgrade 是你之前安装了pycrypto, 加它是升级, 一次都没安装的用户, 直接pip install python-alipay- ...

  6. 基于python Flask搭建mockServer服务

    前言: 为什么要用mockserver呢!我们自己内部接口需要使用微信,支付宝的支付功能,就需要验证和打钱才能返回固定的成功返回信息,成本太高,我们就可以用MockServer来模拟返回,绕过验证. ...

  7. p2p银行充值功能模块 支付宝调用

    银行充值简介 用户要想要投标的话,那么需要往p2p平台上进行充值 使用支付宝沙箱 调用支付宝充值接口进行测试 用户余额页面展示用户的余额 点击充值调用跳转到银行充值页面 输入密码,密码正确调转到支付宝 ...

  8. 千锋Flask学习笔记

    千锋Flask学习笔记 文章目录 千锋Flask学习笔记 写在前面 1. Flask介绍 2. Views 3. Request 4. Response 5. 会话技术 6. 模型和模板 7. 数据传 ...

  9. Python基于Flask框架前后端分离实现房屋租赁民宿预订平台

    技术环境: PyCharm + Flask + Python2.7或Python3.6 + Redis + mysql 技术简介:采用Python环境和Flask框架实现的一个爱家租房平台,整个项目的 ...

最新文章

  1. java表达式由什么组成_必知必会之Lambda表达式
  2. 低功耗无线模块超远距离无线传输实现中继的方法
  3. c语言程序设计慕课版答案第6章,C语言程序设计答案黄保和编第6章函数.doc
  4. css tips —— 神奇的max-width,min-width, width覆盖规则
  5. 2010中国存储创新年会
  6. 牛客网Java笔试题目
  7. 亲爱的我拿什么拯救你的木讷?
  8. 上传截断_文件上传路径截断实例
  9. JavaScript高级程序设计(第4版)学习随笔【第六章】
  10. JAVA_Android开发官网
  11. 【BP数据预测】差分进化算法优化BP神经网络数据预测【含Matlab源码 1315期】
  12. 简单移动平均线(Simple Moving Average,SMA) 定义及使用
  13. 4组64节蓄电池内阻/温度/电压一体监测方案
  14. 高光谱图像可视化增强matlab
  15. 几款Mac照片编辑软件推荐
  16. tinkerCAD入门操作(2):移动、旋转和缩放对象
  17. Problem 2 素数公式
  18. 呼叫中心系统解决方案
  19. 非线性ode及在工程中的应用第四次作业更正版
  20. (30 gadget day 2) 最简单也最复杂的Gadget - YubiKey

热门文章

  1. 【RPO技巧拓展】————5、RPO攻击初探
  2. 如何制作u盘pe启动盘?
  3. OTA前装搭载率逼近50%,哪些供应商正在领跑细分赛道
  4. 企业微信【加入群聊】群活码十问十答
  5. 新出炉的 100+ 篇技术热文,在微信热传,别错过哦
  6. superMap Cesium(超图) ---scene open()用法
  7. Oracle 使用xtts升级11g-to-19c
  8. HTML+CSS+JS大作业:网站设计——家具装修公司(12页 bootstrap, 响应式)
  9. php notice undefined variable,PHP错误提示,Notice: Undefined variable
  10. 坎坷的微信小程序【笔记】