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对象的深拷贝和浅拷贝详解
Aug 25 Python
Python中使用gzip模块压缩文件的简单教程
Apr 08 Python
用Python生成器实现微线程编程的教程
Apr 13 Python
使用Python程序抓取新浪在国内的所有IP的教程
May 04 Python
python实现将汉字转换成汉语拼音的库
May 05 Python
python中defaultdict的用法详解
Jun 07 Python
python将每个单词按空格分开并保存到文件中
Mar 19 Python
Django使用中间键实现csrf认证详解
Jul 22 Python
Python学习笔记之Django创建第一个数据库模型的方法
Aug 07 Python
Python内置类型性能分析过程实例
Jan 29 Python
python3将变量写入SQL语句的实现方式
Mar 02 Python
python三引号如何输入
Jul 06 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 读取和修改大文件的某行内容的代码
2009/10/30 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
2014/06/25 PHP
Laravel日志用法详解
2016/10/09 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
2017/02/04 PHP
Laravel配合jwt使用的方法实例
2020/10/25 PHP
Javascript 面向对象 继承
2010/05/13 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
JQuery操作表格(隔行着色,高亮显示,筛选数据)
2012/02/23 Javascript
js拦截alert对话框另类应用
2013/01/16 Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
2013/06/13 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
jquery获取tr并更改tr内容示例代码
2014/02/13 Javascript
js判断元素是否隐藏的方法
2014/06/09 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
2014/06/09 Javascript
Sublime Text 3常用插件及安装方法
2015/12/16 Javascript
Javascript json object 与string 相互转换的简单实现
2016/09/27 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
2018/01/10 Javascript
VUE 使用中踩过的坑
2018/02/08 Javascript
JS监听滚动和id自动定位滚动
2018/12/18 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
uniapp微信小程序实现一个页面多个倒计时
2020/11/01 Javascript
详解JavaScript原型与原型链
2020/11/16 Javascript
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
Django跨域请求CSRF的方法示例
2018/11/11 Python
Python帮你微信头像任意添加装饰别再@微信官方了
2019/09/25 Python
pip install python 快速安装模块的教程图解
2019/10/08 Python
pandas参数设置的实用小技巧
2020/08/23 Python
python爬虫beautifulsoup库使用操作教程全解(python爬虫基础入门)
2021/02/19 Python
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
贸易经济专业自荐书
2014/06/29 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
世界红十字日活动总结
2015/02/10 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python