python接入支付宝的实例操作


Posted in Python onJuly 20, 2020

Python接入支付宝流程:

第一步:

首先要下载一个python的sdk,这个sdk在支付宝的开发者文档中是没有的,但是强大的python程序员自己开发了一套属于python的支付宝支付sdk。

下载方式:pip install python-alipay-sdk ,github的链接为 https://github.com/fzlee/alipay

第二步:

下载好sdk之后,需要对支付宝进行一些相关的配置,支付宝的环境分为两种,一为正式环境,也就是程序上线之后的环境。

二为沙箱环境,即开发者在开发项目时候的测试环境。

正式环境需要创建应用,然后支付宝后台进行审核,通过后会分配一个appid作为一个唯一标志。如图为创建应用。

python接入支付宝的实例操作

这里我用到的是沙箱环境,所以不需要等待支付宝的审核,点击进入开发者中心?>研发服务?>沙箱应用。如图所示它会自动给你分配一个appid,你只需要这是一下私钥和公钥即可。

python接入支付宝的实例操作

第三步:

需要生成自己的服务端的私钥和公钥,现在支付宝支持的加密方式为sha256,sha1,

推荐使用sha256.支付宝提供了生成秘钥的方法和步骤(https://docs.open.alipay.com/291/105971/ )

打开括号中的链接,即可看到详细的生成秘钥的方法和步骤。公钥私钥生成完之后,要将公钥上传到支付宝密钥设置中。将支付宝的公钥copy到本地,将自己的公钥私钥和支付宝的公钥保存好(这个很重要),一般都保存到本地项目的文件中。

第四步:

了解并熟悉支付宝的开发流程。如图为客户端通过后端程序与支付宝后端的交互流程图

python接入支付宝的实例操作

1、用户选择使用支付宝付款

2、用户使用app向商户服务器发起请求获取签名后的订单信息

3、商户服务端返回签名后的订单信息(查询字符串或者url)例如:

app_id=201609239&biz_content=%7B%22subject%22%3A%22%5Cu6d4b%5Cu8bd5%5Cu8ba2%5Cu5%22out_trade_no%22%3A%22201702021111%22%2C%22total_amount%22%3A1000%2C%22product_code%22%3A%22FAST_INSTANT_TRADE_PAY%22%7D&charset=utf-8&method=alipay.trade.page.pay¬ify_url=http%3A%2F%dus.com%2F&return_url=http%3A%2F%2F47.92.87.172%3A8000%2F&sign_type=RSA2×tamp=2015+15%3A19%3A15&version=1.0&sign=BSzk6LzwNp

4、商户app调用支付接口

5-8、支付宝服务端接收请求,返回支付结果。

9、商户app向商户服务端发起请求,同步支付结果,服务端验证签名,解析支付结果。

10、返回支付结果。

11、商户app展示支付结果。

12、支付宝服务端向商户服务端异步发送支付通知。

13、商户服务端接收支付通知,并返回响应给支付宝服务端。

第五步:

python代码如下

# 业务处理: 使用python sdk调用支付宝的支付接口
# 初始化
from alipay import AliPay
alipay = AliPay(
    appid="2016092300574189",
    app_notify_url=None,
    app_private_key_path=r"D:\python源代码\alipay_keys\private_keys",
    alipay_public_key_path=r"D:\python源代码\alipay_keys\public_key",
    sign_type="RSA2",
    debug=True,
)
# 调用接口
# total_pay = order.total_price + order.transit_price
total_pay = 12311
order_string = alipay.api_alipay_trade_page_pay(
    out_trade_no=1231231312313,
    total_amount=str(total_pay),
    subject='测试text%s' % 1,
    return_url=None,
    notify_url=None,
)
# 返回应答
pay_url = "https://openapi.alipaydev.com/gateway.do?" + order_string
print(pay_url)

这段代码实现的功能为生成一个签名后的url,这个url就是访问支付宝支付的url

其中初始化部分的参数:appid为支付宝的唯一标志id,

app_notify_url为支付宝后台完成支付的时候异步通知到商户的后台服务器的URL地址。

 app_private_key_path为自己生成的私钥, 

alipay_public_key_path为支付宝的公钥。sign_type为签名的加密方式, 

debug为true时,支付宝的支付的url为非正式的环境,如果为线上环境可以将其改为false。

调用接口部分的参数: out_trade_no为订单编号这个是商户后台服务器自己生成的订单编号。 

total_amount为支付金额(必须为字符串类型),subject为标题,return_url为支付成功后支付页面要跳转到哪个页面。 

notify_url为异步通知的url。

第六步:

运行这段代码会得到一个签名之后的url。

python接入支付宝的实例操作

访问这个url,看到的结果为:

python接入支付宝的实例操作

可以手机下载一个沙箱环境的支付宝,也可以点击右侧的登录账户付款。在沙箱应用中提供了用于付款的账号和密码。

第七步:

登录完成支付

python接入支付宝的实例操作

实例扩展:

Python对接支付宝支付自实现功能

# -*- coding: utf-8 -*-
import base64
import json
import urllib.parse
from datetime import datetime
import requests
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import padding
class AliPayException(Exception):
 def __init__(self, data):
 super(AliPayException, self).__init__()
 self.data = data
 def __str__(self):
 return "alipay - {}".format(self.data)
 def __unicode__(self):
 return u"alipay - {}".format(self.data)
class AliPayVerifyException(AliPayException):
 def __init__(self, msg, data):
 super(AliPayVerifyException, self).__init__('alipay verify except - {}:{}'.format(msg, data))
class AliPay:
 def __init__(self, **kwargs):
 """
 :param kwargs:

到此这篇关于python接入支付宝的实例操作的文章就介绍到这了,更多相关python如何接入支付宝内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详解Django通用视图中的函数包装
Jul 21 Python
深入理解Python装饰器
Jul 27 Python
python数字图像处理之高级滤波代码详解
Nov 23 Python
python  Django中的apps.py的目的是什么
Oct 15 Python
在python下读取并展示raw格式的图片实例
Jan 24 Python
python爬虫解决验证码的思路及示例
Aug 01 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
Sep 06 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
Feb 07 Python
Python3自定义json逐层解析器代码
May 11 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
May 26 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 25 Python
高考考python编程是真的吗
Jul 20 #Python
如何基于Python Matplotlib实现网格动画
Jul 20 #Python
Python常用数据分析模块原理解析
Jul 20 #Python
Python+Kepler.gl实现时间轮播地图过程解析
Jul 20 #Python
用pandas划分数据集实现训练集和测试集
Jul 20 #Python
Python数据可视化实现漏斗图过程图解
Jul 20 #Python
浅谈pandas dataframe对除数是零的处理
Jul 20 #Python
You might like
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
自己开发Dojo的建议框架
2008/09/24 Javascript
javascript globalStorage类代码
2009/06/04 Javascript
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
2014/03/12 Javascript
JQuery实现动态添加删除评论的方法
2015/05/18 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
纯javascript移动优先的幻灯片效果
2015/11/02 Javascript
jquery中validate与form插件提交的方式小结
2016/03/26 Javascript
javascript中setAttribute兼容性用法分析
2016/12/12 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
浅析Vue中method与computed的区别
2018/03/06 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
2018/11/15 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
微信小程序tabBar设置实例解析
2019/11/14 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
微信小程序接入vant Weapp组件的详细步骤
2020/10/28 Javascript
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
对python中dict和json的区别详解
2018/12/18 Python
如何使用pyinstaller打包32位的exe程序
2019/05/26 Python
12个步骤教你理解Python装饰器
2019/07/01 Python
Python+pyplot绘制带文本标注的柱状图方法
2019/07/08 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
2019/08/21 Python
Python3 shutil(高级文件操作模块)实例用法总结
2020/02/19 Python
Python中的wordcloud库安装问题及解决方法
2020/05/27 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
HTML5 中新的全局属性(整理)
2013/07/31 HTML / CSS
护士实习生自我鉴定范文
2013/12/10 职场文书
八一建军节活动方案
2014/02/10 职场文书
高中生逃课检讨书
2014/10/10 职场文书
化工生产实习心得体会
2016/01/22 职场文书