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 相关文章推荐
python的类变量和成员变量用法实例教程
Aug 25 Python
零基础写python爬虫之使用urllib2组件抓取网页内容
Nov 04 Python
Python中进程和线程的区别详解
Oct 29 Python
浅谈Python爬虫基本套路
Mar 25 Python
将python文件打包成EXE应用程序的方法
May 22 Python
Windows系统下pycharm中的pip换源
Feb 23 Python
Django项目uwsgi+Nginx保姆级部署教程实现
Apr 19 Python
python cv2.resize函数high和width注意事项说明
Jul 05 Python
python递归函数用法详解
Oct 26 Python
浅析Python的命名空间与作用域
Nov 25 Python
scrapy实践之翻页爬取的实现
Jan 05 Python
基于PyInstaller各参数的含义说明
Mar 04 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
用PHP实现ODBC数据分页显示一例
2006/10/09 PHP
php表单提交问题的解决方法
2011/04/12 PHP
php去除头尾空格的2种方法
2015/03/16 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
2020/04/23 PHP
javascript之dhDataGrid Ver2.0.0代码
2007/07/01 Javascript
javascript 获取元素位置的快速方法 getBoundingClientRect()
2009/11/26 Javascript
没有document.getElementByName方法
2013/08/19 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
2013/11/03 Javascript
js判断60秒以及倒计时示例代码
2014/01/24 Javascript
jQuery内容过滤选择器用法分析
2015/02/10 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
@ResponseBody 和 @RequestBody 注解的区别
2017/03/08 Javascript
微信小程序 向左滑动删除功能的实现
2017/03/10 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
react-router 路由切换动画的实现示例
2018/12/03 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
js最实用string(字符串)类型的使用及截取与拼接详解
2019/04/26 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
解决jquery validate 验证不通过后验证正确的信息仍残留在label上的方法
2019/08/27 jQuery
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
Python随手笔记之标准类型内建函数
2015/12/02 Python
详解Python之数据序列化(json、pickle、shelve)
2017/03/30 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
python 制作简单的音乐播放器
2020/11/25 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
canvas实现按住鼠标移动绘制出轨迹的示例代码
2018/02/05 HTML / CSS
彩色的非洲教学反思
2014/02/18 职场文书
党的群众路线领导班子整改方案
2014/09/27 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
2014年领班工作总结
2014/11/25 职场文书
优秀校长事迹材料
2014/12/24 职场文书
社区党建工作总结2015
2015/05/13 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
使用Redis做预定库存缓存功能
2022/04/02 Redis