Python 支付整合开发包的实现


Posted in Python onJanuary 23, 2019

轻量级支付方式整合集成,实现支付与业务完全剥离,快速简单完成支付模块的开发

特性

  1. 屏蔽支付方式之间接入API和数据结构的差异,统一API和数据结构
  2. 支持支付类型横向扩展
  3. 统一异常处理

支持支付方式及功能

支付方式

  • pay_type=ali_pay
  • pay_type=wx_pay

通用功能

  • 电脑网站支付
  • 手机网站支付
  • APP支付
  • 异步通知校验
  • 交易查询
  • 交易取消
  • 退款
  • 退款查询

平台特有功能

  • 微信JS支付
  • 微信企业付款到零钱

使用说明

安装

# installation
pip install all-pay --upgrade

核心说明

配置(dict)

ALIPAY_CONFIG = {
  'pay_type': 'ali_pay', # 必填 区分支付类型
  'app_id': 'xxx', #必填 应用id
  'private_key_path': 'xxx', #必填 私钥
  'public_key_path': 'xxx',#必填 公钥
  'notify_url': 'xxx',# 异步回调地址
  'sign_type': 'RSA2', # 签名算法 RSA 或者 RSA2
  'debug': False, # 是否是沙箱模式
}

WECHAT_CONFIG = {
  'pay_type': 'wx_pay', # 必填 区分支付类型
  'app_id': 'xxx', # 必填,应用id
  'mch_key': 'xxx', # 必填,商户平台密钥
  'mch_id': 'xxx', # 必填,微信支付分配的商户号
  'app_secret': 'xxx', # 应用密钥
  'notify_url': 'xxx'# 异步回调地址
  'api_cert_path': 'xxx', # API证书
  'api_key_path': 'xxx' # API证书 key
}

其中 pay_type 为本项目所需,用来区分支付类型,其余为对应支付方式所需配置参数,具体参考对应支付方式对应的官方文档。

Pay类

支付网关,支付方式分配和转发入口

PayOrder类

统一封装支付订单信息,主要用于支付下单
生成统一订单例子

order = PayOrder.Builder().subject('商品标题') .out_trade_no('商品订单号').total_fee('商品费用').build()

通过 Builder模式+链式调用 灵活组合通用参数和特殊参数 更多参数说明参见 源码

PayResponse类

统一封装支付返回业务信息,主要用于支付查询

生成统一回单例子

response = PayResponse.Builder().trade_no('平台订单号').out_trade_no('商家订单号').build()

通过 Builder模式+链式调用 灵活组合通用参数和特殊参数 更多参数说明参见源码

demo

from all_pay import PayOrder
from all_pay import Pay
ALIPAY_CONFIG = {
  'pay_type': 'ali_pay', # 必填 区分支付类型
  'app_id': 'xxx', #必填 应用id
  'private_key_path': 'xxx', #必填 私钥
  'public_key_path': 'xxx',#必填 公钥
  'notify_url': 'xxx',# 异步回调地址
  'sign_type': 'RSA2', # 签名算法 RSA 或者 RSA2
  'debug': False, # 是否是沙箱模式
}
# 额外参数,某些支付方式有些选填的参数在PayOrder并没有封装,可以自行传递
extra_params= {
  'xxx':'xxx'
  'xxx':'xxx'
  'xxx':'xxx'
}
order = PayOrder.Builder().subject('商品标题') .out_trade_no('商品订单号').total_fee('商品费用').build()
pay = Pay(ALIPAY_CONFIG) # 传入对应支付方式配置
order_res= pay.trade_page_pay(order,extra_params)# 传入对应订单和额外参数(要是需要)

功能说明

电脑网站支付[trade_page_pay]

pay = Pay(ALIPAY_CONFIG) # 传入对应支付方式配置
order_res= pay.trade_page_pay(order)# 传入对应订单

手机网站支付[trade_wap_pay]

pay = Pay(ALIPAY_CONFIG) # 传入对应支付方式配置
order_res= pay.trade_wap_pay(order)# 传入对应订单

APP支付[trade_app_pay]

pay = Pay(ALIPAY_CONFIG) # 传入对应支付方式配置
order_res= pay.trade_app_pay(order)# 传入对应订单

异步通知校验[parse_and_verify_result]

# 传入对应支付方式配置
pay = Pay(WECHAT_CONFIG)
# 传入对应支付方式返回的原始数据,校验成功会返回解析成json数据
data = pay.parse_and_verify_result(req_xml)

微信JS支付[trade_js_pay]

# 传入对应支付方式配置
pay = Pay(WECHAT_CONFIG)
# 传入对应订单
data = pay.trade_js_pay(order)

微信企业付款到零钱[enterprise_pay]

# 传入对应支付方式配置
pay = Pay(WECHAT_CONFIG)
# 传入对应订单
data = pay.enterprise_pay(order)

交易查询[trade_query]

# 传入对应支付方式配置
pay = Pay(WECHAT_CONFIG)
# 传入对应回单信息
data = pay.trade_query(response)

交易取消[trade_cancel]

# 传入对应支付方式配置
pay = Pay(WECHAT_CONFIG)
# 传入对应回单信息
data = pay.trade_cancel(response)

退款[trade_refund]

# 传入对应支付方式配置
pay = Pay(WECHAT_CONFIG)
# 传入对应回单信息
data = pay.trade_refund(response)

退款查询[trade_refund_query]

# 传入对应支付方式配置
pay = Pay(WECHAT_CONFIG)
# 传入对应回单信息
data = pay.trade_refund_query(response)

贡献

本项目目前支持的支付方式和API还不多,欢迎你给本项目提pull request,扩展新的的支付接口,同时如果你有好的意见或建议,也欢迎给本项目提issue

声明:本项目主要目标的是支付整合,统一支付API和数据结构,在具体支付模块的接入实现参考了一些开源项目

支付宝模块基于 python-alipay-sdk

微信模块基于 wx_pay_python

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python多线程抓取天涯帖子内容示例
Apr 03 Python
python在linux中输出带颜色的文字的方法
Jun 19 Python
Python聊天室实例程序分享
Jan 05 Python
Python如何为图片添加水印
Nov 25 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
Jan 11 Python
python如何重载模块实例解析
Jan 25 Python
分析python请求数据
Aug 19 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 Python
python中update的基本使用方法详解
Jul 17 Python
在python3中使用shuffle函数要注意的地方
Feb 28 Python
利用Python实现朋友圈中的九宫格图片效果
Sep 03 Python
Pycharm中使用git进行合作开发的教程详解
Nov 17 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
Jan 23 #Python
python判断字符串或者集合是否为空的实例
Jan 23 #Python
在python中对变量判断是否为None的三种方法总结
Jan 23 #Python
对Python Class之间函数的调用关系详解
Jan 23 #Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 #Python
Django JWT Token RestfulAPI用户认证详解
Jan 23 #Python
python实现QQ邮箱/163邮箱的邮件发送
Jan 22 #Python
You might like
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
PHP教程 变量定义
2009/10/23 PHP
PHP插件PHPMailer发送邮件功能
2017/02/28 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
jquery 获取表单元素里面的值示例代码
2013/07/28 Javascript
js读取配置文件自写
2014/02/11 Javascript
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
使用insertAfter()方法在现有元素后添加一个新元素
2014/05/28 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
NodeJS连接MongoDB数据库时报错的快速解决方法
2016/05/13 NodeJs
JavaScript事件详细讲解
2016/06/27 Javascript
angularjs http与后台交互的实现示例
2018/12/21 Javascript
jquery-ui 进度条功能示例【测试可用】
2019/07/25 jQuery
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
详解Python编程中基本的数学计算使用
2016/02/04 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
使用apidoc管理RESTful风格Flask项目接口文档方法
2018/02/07 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
浅谈django2.0 ForeignKey参数的变化
2019/08/06 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
python读取xml文件方法解析
2020/08/04 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
2020/11/10 Python
python 装饰器的基本使用
2021/01/13 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
微软中国官方旗舰店:销售Surface、Xbox One、笔记本电脑、Office
2018/07/23 全球购物
英国珠宝和手表专家:Pleasance & Harper
2020/10/21 全球购物
如何在发生故障的节点上重新安装 SQL Server
2013/03/14 面试题
村长贪污检举信
2014/04/04 职场文书
班长演讲稿范文
2014/04/24 职场文书
辅导员学期工作总结
2015/08/14 职场文书
高考百日冲刺决心书
2015/09/23 职场文书
Python3.10的一些新特性原理分析
2021/09/15 Python
Python中第三方库Faker的使用详解
2022/04/02 Python
vue3引入highlight.js进行代码高亮的方法实例
2022/04/08 Vue.js
如何Tomcat中使用ipv6地址
2022/05/06 Servers