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通过openpyxl生成Excel文件的方法
May 12 Python
打包发布Python模块的方法详解
Sep 18 Python
Python+tkinter使用80行代码实现一个计算器实例
Jan 16 Python
python2 与python3的print区别小结
Jan 16 Python
Python对象与引用的介绍
Jan 24 Python
python实现得到当前登录用户信息的方法
Jun 21 Python
python 哈希表实现简单python字典代码实例
Sep 27 Python
Django异步任务线程池实现原理
Dec 17 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
May 08 Python
Python常用GUI框架原理解析汇总
Dec 07 Python
Python基于百度AI实现抓取表情包
Jun 27 Python
Python实现学生管理系统并生成exe可执行文件详解流程
Jan 22 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中使用全局变量的几种方法
2013/06/24 PHP
php 邮件发送问题解决
2014/03/22 PHP
php图片添加文字水印实现代码
2016/03/15 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
JavaScript Konami Code 实现代码
2009/07/29 Javascript
jquery delay()介绍及使用指南
2014/09/02 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
Nodejs Stream 数据流使用手册
2016/04/17 NodeJs
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
高效的jQuery代码编写技巧总结
2017/02/22 Javascript
JS逻辑运算符短路操作实例分析
2018/07/09 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
Nuxt的路由配置和参数传递方式
2020/11/06 Javascript
vue解决跨域问题(推荐)
2020/11/10 Javascript
Python压缩和解压缩zip文件
2015/02/14 Python
python实现将文本转换成语音的方法
2015/05/28 Python
python实现汉诺塔递归算法经典案例
2021/03/01 Python
python 递归遍历文件夹,并打印满足条件的文件路径实例
2017/08/30 Python
在Python中,不用while和for循环遍历列表的实例
2019/02/20 Python
Django文件存储 自己定制存储系统解析
2019/08/02 Python
pytorch中的embedding词向量的使用方法
2019/08/18 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
2020/01/14 Python
Python中os模块功能与用法详解
2020/02/26 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
Python的信号库Blinker用法详解
2020/12/31 Python
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
PHP如何防止SQL注入
2014/05/03 面试题
秘书岗位职责
2013/11/18 职场文书
个人批评与自我批评材料
2014/10/17 职场文书
毕业生党员个人总结
2015/02/14 职场文书
经理聘任证明
2015/03/02 职场文书
浅谈golang package中init方法的多处定义及运行顺序问题
2021/05/06 Golang