人家指定的网站还不错的:https://pypi.org/project/alipay-sdk-python/3.3.398/

pip install alipay-sdk-python==3.3.398

来个例子吧!


import logging
from alipay.aop.api.AlipayClientConfig import AlipayClientConfig
from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient
from alipay.aop.api.domain.AlipayFundTransToaccountTransferModel import AlipayFundTransToaccountTransferModel
from alipay.aop.api.domain.AlipayTradeAppPayModel import AlipayTradeAppPayModel
from alipay.aop.api.domain.AlipayTradePagePayModel import AlipayTradePagePayModel
from alipay.aop.api.request.AlipayTradeAppPayRequest import AlipayTradeAppPayRequest
from alipay.aop.api.request.AlipayTradePagePayRequest import AlipayTradePagePayRequest
from alipay.aop.api.response.AlipayFundTransToaccountTransferResponse import AlipayFundTransToaccountTransferResponse
from alipay.aop.api.request.AlipayFundTransToaccountTransferRequest import AlipayFundTransToaccountTransferRequestlogging.basicConfig(level=logging.INFO,format='%(asctime)s %(levelname)s %(message)s',filemode='a', )
logger = logging.getLogger('')class Alipay():def __init__(self, cfg):# 初始化客户端, sandbox_debug指的是否是调试默认,如果是True,则自动切换为提交环境为沙盒alipay_client_config = AlipayClientConfig()#alipay_client_config.server_url = 'https://openapi.alipay.com/gateway.do'#alipay_client_config.app_id = 'app_id'# 私钥alipay_client_config.app_private_key = 'private_key'# 公钥alipay_client_config.alipay_public_key = 'public_key'# 开始构建客户端, logger为日志对象self.client = DefaultAlipayClient(alipay_client_config=alipay_client_config, logger=logger)# 公钥self.alipay_public_key = cfg['public_key']# 签名self._sign_type = "RSA2"# 回调urlself.app_notify_url = cfg['app_notify_url']# 转账def transfer(self, data):model = AlipayFundTransToaccountTransferModel()# 订单号model.out_biz_no = data['out_biz_no']# 收款方账户类型model.payee_type = 'ALIPAY_LOGONID'# 收款方账户model.payee_account = data['account']# 金额model.amount = data['cost']# 备注model.remark = data['remark']# 执行request = AlipayFundTransToaccountTransferRequest(biz_model=model)response_content = Noneresponse_content = self.client.execute(request)if not response_content:return ''else:# 返回结果response = AlipayFundTransToaccountTransferResponse()#response.parse_response_content(response_content=response_content)#return response# 支付宝APP端支付def alipay_trade_app_pay(self, data):model = AlipayTradeAppPayModel()# 超时关闭订单的时间  30m--30分钟model.timeout_express = "30m"# 订单金额model.total_amount = data['total_amount']# 销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAYmodel.product_code = "QUICK_MSECURITY_PAY"# 商品描述model.body = data['body']# 商品标题model.subject = data['subject']# 订单号model.out_trade_no = data['out_trade_no']request = AlipayTradeAppPayRequest(biz_model=model)request.notify_url = self.app_notify_urltry:response = self.client.sdk_execute(request)return responseexcept IOError:return ''# 支付宝网页端支付def alipay_trade_page_pay(self):model = AlipayTradePagePayModel()model.out_trade_no = "pay201805020000226"model.total_amount = 0.01model.subject = "测试"model.body = "支付宝测试"model.product_code = "FAST_INSTANT_TRADE_PAY"request = AlipayTradePagePayRequest(biz_model=model)# 得到构造的请求,如果http_method是GET,则是一个带完成请求参数的url,如果http_method是POST,则是一段HTML表单片段response = self.client.page_execute(request, http_method="GET")request.notify_url = self.app_notify_urltry:response = self.client.sdk_execute(request)return responseexcept IOError:return ''

回调接口  (官网有写,回调返回的参数https://opendocs.alipay.com/open/204/105301)

@bp.route('/alipay_notify', methods=['GET', 'POST'])
def ali_pay():"""支付回调"""data = request.form.to_dict()# sign 不能参与签名验证signature = data.pop("sign")# 回调两种方案  1.验证签名  2.根据订单号查询支付情况success = Alipay.verify(data, signature)if success and data["trade_status"] in ("TRADE_SUCCESS", "TRADE_FINISHED"):# 处理支付成功的业务return data.get('trade_no')  # 这里使用支付宝返回的订单号来显示支付成功return 'fail'

一:签名验证

import time
import json
from base64 import decodebytes
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256, SHA# 签名验证def _verify(self, raw_content, signature):# 开始计算签名key = self.alipay_public_keysigner = PKCS1_v1_5.new(key)if self._sign_type == "RSA":digest = SHA.new()else:digest = SHA256.new()digest.update(raw_content.encode())return bool(signer.verify(digest, decodebytes(signature.encode())))def verify(self, data, signature):if "sign_type" in data:sign_type = data.pop("sign_type")if sign_type != self._sign_type:raise Exception(None, "Unknown sign type: {}".format(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)# 排序def _ordered_data(self, data):for k, v in data.items():if isinstance(v, dict):# 将字典类型的数据dump出来data[k] = json.dumps(v, separators=(',', ':'))return sorted(data.items())

二:订单查询

from alipay.aop.api.request.AlipayTradeQueryRequest import AlipayTradeQueryRequest
from alipay.aop.api.response.AlipayTradeQueryResponse import AlipayTradeQueryResponsedef check_order(self, order):'''订单校验order: 订单号:return:'''request = AlipayTradeQueryRequest()request.biz_content = {"trade_no": order}response_content = self.client.execute(request)response = AlipayTradeQueryResponse()response.parse_response_content(response_content)try:# print(response.send_pay_date)if response.code == "10000":# 将购买时间转换为时间戳,取当前时间做对比,如果超过十分钟pass,stamp_array = time.strptime(response.send_pay_date, '%Y-%m-%d %H:%M:%S')stamp = int(time.mktime(stamp_array))  # 转换为时间戳# print('本地时间转换成时间戳:', stamp)hour = stamp + 360if hour > time.time():print('ok!')else:print('fail!')if response.code == "40004":print("order error1!")else:print("order error2!")except Exception as e:print('error, check_order')

沉迷学习,日渐消瘦——来篇支付宝支付(Python)相关推荐

  1. Python学习【第1篇】:Python简介以及入门

    python第一篇-------python介绍 一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写Python语 ...

  2. Python学习【第6篇】:Python之文件操作

    python----------文件操作 一.文件处理流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 r模式,默认模式,文件不存在则报错 w模式,文件不存在 ...

  3. python增强运算符_Python学习【第3篇】:Python之运算符

    一.运算符 计算机可以进行的运算有很多种,不只是加减乘除,它和我们人脑一样,也可以做很多运算. 种类:算术运算,比较运算,逻辑运算,赋值运算,成员运算,身份运算,位运算,今天我们先了解前四个. 算术运 ...

  4. 学python处理数据结构_Python学习【第2篇】:Python数据结构

    dict Python内置了字典:dict的支持在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度 列表也是序列,字符串也是序列 字典 字典类型与序列类型的区别: 1. ...

  5. autojs编写的支付宝支付模板,带toast弹窗,自定义控件,界面上插入图片,功能非常强大和完善值得学习

    说明 本文提供的代码仅供参考.不建议用于生产环境. 可能有些地方在最新版本的Auto.js上面需要做修改,才能运行. Auto.js简介 Auto.js是利用安卓系统的"辅助功能" ...

  6. 【网站支付PHP篇】thinkPHP集成支付宝支付(担保交易)

    目录 系列说明 开发环境 部署支付宝 支付请求 支付宝返回处理 系列说明 最近在帮朋友的系统安装支付模块(兑换网站积分),现在总结一些开发心得,希望对大家有用.这个系列会讲以下第三方支付平台的集成: ...

  7. 支付宝支付之web篇

    在接入支付宝支付前,你需要先和支付宝签约,web端要签约即时支付,app端支付要签约app支付.当然要是需要别的也可以根据需要签约 支付宝支付相对微信支付接入要简单一些,签约成功后,你就可以在你的开发 ...

  8. 支付宝支付-当面付之扫码支付「扫码支付」

    前言 支付宝支付-沙箱环境使用 支付宝支付-支付宝PC端扫码支付 支付宝支付-手机浏览器H5支付 支付宝支付-当面付之扫码支付「本文」 当面付包含两种支付方式:商品条形码支付 + 扫码支付 经过前面两 ...

  9. 支付宝支付-手机浏览器H5支付

    前言 支付宝支付-沙箱环境使用 支付宝支付-支付宝PC端扫码支付 支付宝支付-手机浏览器H5支付「本文」 手机浏览器支付,用户在安装支付宝APP的情况下,调用手机网站支付接口默认会唤起支付宝钱包支付, ...

  10. 支付宝支付-支付宝PC端扫码支付

    前言 支付宝支付-沙箱环境使用 支付宝支付-支付宝PC端扫码支付「本文」 支付宝支付-手机浏览器H5支付「待写」 PC端扫码支付,其实就是就是 电脑网站支付,本文基于支付宝沙箱环境,不了解的可以看一下 ...

最新文章

  1. 数据库基础笔记(MySQL)7 —— 存储引擎和视图 ( 完结撒花 )
  2. 计算机视觉编程——图像搜索
  3. word受权限保护无法打开_双击文档无法打开到底是啥毛病?简单一招解决
  4. oracle 执行计划
  5. android 检测应用程序信息
  6. SAP FSM 学习笔记(四) : 现场服务技师使用的移动应用
  7. 刷breed 极路由3_路由器接入usb打印机制作无线打印机服务器
  8. python博客访问量_史诗级干货-python爬虫之增加CSDN访问量
  9. 第一次失效_直击震撼场面!宁乡新沩丰坝建成以来第一次高水位应急演练!
  10. Linux 五种I/O模型
  11. (转)HTML5开发中Access-Control-Allow-Origin跨域问题
  12. ffmpeg之图片转gif
  13. 课程设计之第二次冲刺----第一天
  14. 机器人电焊电流电压怎么调_焊电焊电流怎么调节,调多少合适?
  15. python将两列内容合并_在pandas/python中,将两列合并为同一数据帧中的一列
  16. acer switch 10 linux,【AcerSwitch10E评测】拆开来用的电脑 Acer Switch 10E评测(全文)_Acer Switch 10E_笔记本评测-中关村在线...
  17. c语言 虚拟摄像头设备_c++ 虚拟摄像头驱动程序
  18. Typo: In word xxxx
  19. 读书笔记-财务报表资本结构分析
  20. 运维:Jenkins报Suppressed: java.nio.file.FileSystemException

热门文章

  1. jt808终端鉴权_GitHub - SmallChi/JT808: JT808协议、GB808协议、道路运输车辆卫星定位系统-北斗兼容车载终端通讯协议(支持2013、2019版本)...
  2. 苹果11蓝牙配对不成功怎么办_iphone11蓝牙搜不到设备怎么办
  3. pureftpd mysql.conf_Pure-ftpd.conf 配置详解
  4. linux版高德导航软件下载,高德导航2017
  5. 宝尚市场静候收官的市场又出现短期噪音
  6. 顺丰快递 : 请收下 MySQL 灵魂十连
  7. 【css】表格单元格td元素设置最大高度
  8. 新兴新能源设施[1]--盐穴压缩空气储能相关配套设施
  9. 手机计算机图标大全,我的电脑里我的手机图标怎么删除
  10. 第6次课程作业—张欣