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 代码优化详解
Oct 27 Python
Python设计模式之工厂模式简单示例
Jan 09 Python
详解python OpenCV学习笔记之直方图均衡化
Feb 08 Python
学习python可以干什么
Feb 26 Python
Python3实现的简单工资管理系统示例
Mar 12 Python
Python如何实现转换URL详解
Jul 02 Python
Python垃圾回收机制三种实现方法
Apr 27 Python
python实现文法左递归的消除方法
May 22 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 Python
python实现取余操作的简单实例
Aug 16 Python
Django中日期时间型字段进行年月日时分秒分组统计
Nov 27 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
Feb 02 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中文字符截取防乱码
2008/03/28 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
2016/08/17 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
js鼠标左右键 键盘值小结
2010/06/11 Javascript
ExtJS PropertyGrid中使用Combobox选择值问题
2010/06/13 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
BackBone及其实例探究_动力节点Java学院整理
2017/07/14 Javascript
NodeJS使用七牛云存储上传文件的方法
2017/07/24 NodeJs
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
Mint-UI时间组件起始时间问题及时间插件使用
2018/08/20 Javascript
原生javascript实现连连看游戏
2019/01/03 Javascript
深入理解react 组件类型及使用场景
2019/03/07 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
vue props 一次传多个值实例
2020/07/22 Javascript
npm全局环境变量配置详解
2020/12/15 Javascript
教你用Python写安卓游戏外挂
2018/01/11 Python
利用pandas将numpy数组导出生成excel的实例
2018/06/14 Python
Python列表与元组的异同详解
2019/07/02 Python
python实现简单贪吃蛇游戏
2020/09/29 Python
css3给背景图片加颜色遮罩的方法
2019/11/05 HTML / CSS
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
农业资源与环境专业自荐信范文
2013/12/30 职场文书
库房管理员岗位职责
2014/03/09 职场文书
机械专业求职信
2014/05/25 职场文书
教师考察材料范文
2014/06/03 职场文书
市场营销专业求职信
2014/06/17 职场文书
服装设计专业自荐信
2014/06/17 职场文书
我的法兰西岁月观后感
2015/06/09 职场文书
小学三年级作文之写景
2019/11/05 职场文书
全网非常详细的pytest配置文件
2022/07/15 Python