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的ORM框架SQLObject入门实例
Apr 28 Python
Python简单操作sqlite3的方法示例
Mar 22 Python
python_opencv用线段画封闭矩形的实例
Dec 05 Python
Python实现判断一个整数是否为回文数算法示例
Mar 02 Python
Django框架实现的普通登录案例【使用POST方法】
May 15 Python
Python Django框架单元测试之文件上传测试示例
May 17 Python
Pandas之groupby( )用法笔记小结
Jul 23 Python
Python Selenium安装及环境配置的实现
Mar 17 Python
Python selenium使用autoIT上传附件过程详解
May 26 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
Jun 30 Python
Python OpenCV去除字母后面的杂线操作
Jul 05 Python
基于Python和C++实现删除链表的节点
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
phpMyAdmin 安装配置方法和问题解决
2009/06/08 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
判断客户浏览器是否支持cookie的示例代码
2013/12/23 Javascript
利用jQuery实现可以编辑的表格
2014/05/26 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
Javascript中3个需要注意的运算符
2015/04/02 Javascript
JavaScript实现瀑布流布局
2020/06/28 Javascript
基于jQuery实现的无刷新表格分页实例
2016/02/17 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
微信小程序之电影影评小程序制作代码
2017/08/03 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
js中document.write和document.writeln的区别
2018/03/11 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
Node.js使用supervisor进行开发中调试的方法
2019/03/26 Javascript
vue+vuex+json-seiver实现数据展示+分页功能
2019/04/11 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
2019/09/10 Javascript
Python写的一个简单DNS服务器实例
2014/06/04 Python
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
浅谈function(函数)中的动态参数
2017/04/30 Python
Python合并同一个文件夹下所有PDF文件的方法
2019/03/11 Python
Python安装Bs4的多种方法
2020/11/28 Python
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
美国家居用品和厨具购物网站:DealsDot
2019/10/07 全球购物
Java面试题及答案
2012/09/08 面试题
酒店行政人事部经理职务说明书
2014/02/26 职场文书
大学新生军训方案
2014/05/03 职场文书
运动会入场口号
2014/06/07 职场文书
产品陈列协议书(标准版)
2014/09/17 职场文书
离婚上诉状范文
2015/05/23 职场文书
《工作是最好的修行》读后感3篇
2019/12/13 职场文书
基于python实现银行管理系统
2021/04/20 Python
Python干货实战之八音符酱小游戏全过程详解
2021/10/24 Python