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 for Informatics 第11章 正则表达式(一)
Apr 21 Python
Python 判断文件或目录是否存在的实例代码
Jul 19 Python
Python3实现的判断回文链表算法示例
Mar 08 Python
Django异步任务之Celery的基本使用
Mar 23 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
May 04 Python
在python中将list分段并保存为array类型的方法
Jul 15 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 Python
基于tensorflow for循环 while循环案例
Jun 30 Python
python如何控制进程或者线程的个数
Oct 16 Python
python实现企业微信定时发送文本消息的实例代码
Nov 25 Python
Python爬虫中Selenium实现文件上传
Dec 04 Python
PyQt QMainWindow的使用示例
Mar 24 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
php 之 没有mysql支持时的替代方案
2006/10/09 PHP
PHP 网页过期时间的控制代码
2009/06/29 PHP
php数组函数array_walk用法示例
2016/05/26 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
2017/06/10 PHP
javascript之ESC(第二类混淆)
2007/05/06 Javascript
学习ExtJS table布局
2009/10/08 Javascript
一些mootools的学习资源
2010/02/07 Javascript
jquery 无限级联菜单案例分享
2013/03/26 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
JavaScript实现自定义媒体播放器方法介绍
2017/01/03 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
vue实现路由切换改变title功能
2019/05/28 Javascript
Nodejs 识别图片类型的方法
2019/08/15 NodeJs
element-ui中按需引入的实现
2019/12/25 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
2020/09/22 Javascript
在webstorm中配置less的方法详解
2020/09/25 Javascript
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
python 生成目录树及显示文件大小的代码
2009/07/23 Python
用Python登录Gmail并发送Gmail邮件的教程
2015/04/17 Python
Python中标准库OS的常用方法总结大全
2017/07/19 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
在python中pandas的series合并方法
2018/11/12 Python
python实现大转盘抽奖效果
2019/01/22 Python
详解python使用turtle库来画一朵花
2019/03/21 Python
Python openpyxl模块原理及用法解析
2020/01/19 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
GANT英国官方网上商店:甘特衬衫
2018/02/06 全球购物
Under Armour澳大利亚官网:美国知名的高端功能性运动品牌
2018/02/22 全球购物
个人教师自我评价范文
2013/12/02 职场文书
市场安全管理制度
2014/01/26 职场文书
一年级班主任感言
2014/03/08 职场文书
2019年行政人事个人工作总结范本!
2019/07/19 职场文书
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python