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统计文件行数示例分享
Feb 21 Python
Python中zfill()方法的使用教程
May 20 Python
Python如何判断数独是否合法
Sep 08 Python
Unicode和Python的中文处理
Mar 19 Python
深入探究Django中的Session与Cookie
Jul 30 Python
python中的常量和变量代码详解
Jul 25 Python
Python面向对象之继承和多态用法分析
Jun 08 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
Jun 17 Python
python argparser的具体使用
Nov 10 Python
详解pandas中iloc, loc和ix的区别和联系
Mar 09 Python
Python如何在循环内使用list.remove()
Jun 01 Python
Python 求向量的余弦值操作
Mar 04 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
支持oicq头像的留言簿(二)
2006/10/09 PHP
discuz7 phpMysql操作类
2009/06/21 PHP
PHP函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
php中base_convert()进制数字转换函数实例
2014/11/20 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
JavaScript脚本性能的优化方法
2007/02/02 Javascript
flash javascript之间的通讯方法小结
2008/12/20 Javascript
jQuery 表单验证扩展(四)
2010/10/20 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
js实现鼠标悬停图片上时滚动文字说明的方法
2015/02/17 Javascript
响应式表格之固定表头的简单实现
2016/08/26 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
2016/12/23 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
用React-Native+Mobx做一个迷你水果商城APP(附源码)
2017/12/25 Javascript
vue-week-picker实现支持按周切换的日历
2019/06/26 Javascript
vue使用map代替Aarry数组循环遍历的方法
2020/04/30 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
Linux 发邮件磁盘空间监控(python)
2016/04/23 Python
对Python3 goto 语句的使用方法详解
2019/02/16 Python
Python简单基础小程序的实例代码
2019/04/28 Python
django如何自己创建一个中间件
2019/07/24 Python
python实现异常信息堆栈输出到日志文件
2019/12/26 Python
Keras模型转成tensorflow的.pb操作
2020/07/06 Python
利用Python的folium包绘制城市道路图的实现示例
2020/08/24 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
Python getsizeof()和getsize()区分详解
2020/11/20 Python
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
Clarks鞋美国官网:全球领军鞋履品牌
2017/05/13 全球购物
计算机专业个人求职信范例
2013/09/23 职场文书
标准毕业生自荐信范文
2013/11/04 职场文书
《走一步再走一步》教学反思
2014/02/15 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android