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使用PyGreSQL操作PostgreSQL数据库教程
Jul 30 Python
Python编码类型转换方法详解
Jul 01 Python
python实现决策树
Dec 21 Python
PyCharm安装第三方库如Requests的图文教程
May 18 Python
python跳过第一行快速读取文件内容的实例
Jul 12 Python
Python延时操作实现方法示例
Aug 14 Python
在Python中输入一个以空格为间隔的数组方法
Nov 13 Python
python消费kafka数据批量插入到es的方法
Dec 27 Python
Python Django 实现简单注册功能过程详解
Jul 29 Python
Python3 main函数使用sys.argv传入多个参数的实现
Dec 25 Python
Python PyQt5模块实现窗口GUI界面代码实例
May 12 Python
利用python中的matplotlib打印混淆矩阵实例
Jun 16 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语法(3)
2006/10/09 PHP
php pcntl_fork和pcntl_fork 的用法
2009/04/13 PHP
php获取数组中重复数据的两种方法
2013/06/28 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
php PDO异常处理详解
2016/11/20 PHP
php设计模式之单例模式用法经典示例分析
2019/09/20 PHP
Javascript 阻止javascript事件冒泡,获取控件ID值
2009/06/27 Javascript
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
两个Javascript小tip资料
2010/11/23 Javascript
AeroWindow 基于JQuery的弹出窗口插件
2011/06/27 Javascript
Ext中下拉列表ComboBox组件store数据格式用法介绍
2013/07/15 Javascript
javascript eval(func())使用示例
2013/12/05 Javascript
浅谈JavaScript中运算符的优先级
2015/07/07 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
AngularJS中过滤器的使用与自定义实例代码
2016/09/17 Javascript
React Native实现地址挑选器功能
2017/10/24 Javascript
浅谈angularJs函数的使用方法(大小写转换,拷贝,扩充对象)
2018/10/08 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
JS实现打砖块游戏
2020/02/14 Javascript
jQuery实现图片切换效果
2020/10/19 jQuery
python使用百度翻译进行中翻英示例
2014/04/14 Python
浅析Python基础-流程控制
2016/03/18 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
使用 Python 处理 JSON 格式的数据
2019/07/22 Python
python 非线性规划方式(scipy.optimize.minimize)
2020/02/11 Python
Selenium之模拟登录铁路12306的示例代码
2020/07/31 Python
详解python os.path.exists判断文件或文件夹是否存在
2020/11/16 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
C++面试题:关于链表和指针
2013/06/05 面试题
毕业生个人的求职信范文
2013/12/03 职场文书
新郎婚宴答谢词
2014/01/19 职场文书
老师的检讨书
2014/02/23 职场文书
初中班主任寄语
2014/04/04 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
2014年幼儿园工作总结
2014/11/10 职场文书