python sdk怎么用_python - alipay sdk 使用 及 注意点
一. 在
如果想要得到 支付宝的公钥 就需要获取 应用的公钥,具体获取方式 :
应用私钥和支付宝公钥 获取 和 配置 过程:
1. 下载后打开文件夹 点击 RSA签名验签工具.bat 然后生成密钥 , 然后退出就行了
2. 找到 RSA密钥 的文件夹 , 将里面的 应用公钥 复制一下 , 然后在 沙箱应用 中点击 -> 查看应用公钥,
-> 点击修改, 将刚才的 应用公钥 粘贴上去,然后保存,此刻你会多一个支付宝公钥 ( 注: 当你修改应用公钥后,支付宝公钥会自动生成 )
3. 准备两个文本文件名为( 文件名随意,注意规范 ) :
alipay_public_2048.txt (存放支付宝公钥) 和app_private_2048.txt (存放应用私钥)
这里注意两点 :
1. 应用私钥指的是 刚刚 RSA密钥 文件夹中 的应用私钥 ,而 公钥指的是 刚刚上传 应用公钥后给你自动生成的 应用公钥
2. 将应用私钥和支付宝公钥保存在 文本中的时候 要添加 一个标识 ( 必须加 ):
- 打开alipay_public_2048.txt(存放支付宝公钥) 这个空文本 格式是这样的:
-----BEGIN PUBLIC KEY-----
中间放入你的支付宝公钥
-----END PUBLIC KEY-----
- 打开 app_private_2048.txt (存放应用私钥)这个空文本 格式是这样的:
-----BEGIN RSA PRIVATE KEY-----
中间放你的应用私钥
-----END RSA PRIVATE KEY-----
下载工作
pip install python-alipay-sdk --upgrade
2. 导入加密模块
pip install Crypto
二:示例代码
- Url
urlpatterns=[
url(r"^index/$",views.index), #商品页面 API
url(r"^back_url/$",views.back_url), #支付成功后的重定向 API
url(r"^update_order/$",views.back_url), #支付成功后的异步POST请求 API
]
- Views
from django.shortcuts importrender,HttpResponse,redirectfrom django.views.decorators.csrf import csrf_exempt #取消 csrf组件
importtimedefAlipay():
alipay=AliPay(
appid='2016092800613180', #appid (详细在你的沙箱应用中的 APPID)
app_notify_url='http://127.0.0.1:8045/update_order/', #异步回调url(回调地址需是服务器地址,否则接收不到回调结果)
app_private_key_path='app_test/app_private_2048.txt', #应用私钥
alipay_public_key_path='app_test/alipay_public_2048.txt', #支付宝公钥
sign_type="RSA2", #RSA 或者 RSA2 -- 这里注意一点:2018年1月5日后创建的应用只支持RSA2的格式;
debug=True, #默认False -- 设置为True则是测试模式,正式上线的话改为 False就行了
)returnalipaydefindex(request):"""# 这里发起POST的支付请求"""
if request.method == 'GET':return render(request,'index.html')
alipay=Alipay()
out_trade_no= "x2" +str(time.time())
order_string=alipay.api_alipay_trade_page_pay(
out_trade_no=out_trade_no, #订单号 - 注 : 每次的订单号不能一致
total_amount=0.01, #商品价格
subject='shop_name', #商品名称
return_url = 'http://127.0.0.1:8045/back_url/', #支付成功后 - 重定向自己的网站
notify_url='http://127.0.0.1:8045/update_order/' #支付成功后 - 异步发送支付结果到回调地址(地址需是服务器地址,否则无法接收到回调结果)
)
pay_url= "https://openapi.alipaydev.com/gateway.do?{}".format(order_string)#注 :这里结尾不能加 /
returnredirect(pay_url)defback_url(request):"""# 支付成功后的回调函数 -- 重定向自己的网站
# 同时在重定向之前会校验此次支付信息是否正确
:param request:
:return:"""params=request.GET.dict()
sign= params.pop('sign', None)print(params)
alipay=Alipay()
status= alipay.verify(params, sign) #返回 True or False
ifstatus:return HttpResponse('支付成功')return HttpResponse('支付失败')
@csrf_exemptdefupdate_order(request):"""支付成功后,支付宝向该地址发送的POST请求(用于修改订单状态)
:param request:
:return:"""
if request.method == 'POST':from urllib.parse importparse_qs
body_str= request.body.decode('utf-8')
post_data=parse_qs(body_str)
post_dict={}for k, v inpost_data.items():
post_dict[k]=v[0]
alipay=Alipay()
sign= post_dict.pop('sign', None)
status=alipay.verify(post_dict, sign)ifstatus:#1. 获取订单号(获取的订单号是你上面的参数: out_trade_no)
out_trade_no = post_dict.get('out_trade_no')print(out_trade_no)#2. 根据订单号将数据库中的数据进行更新(修改订单状态)
return HttpResponse('success')# 3. 最终需要返回 "success" 字符给支付宝,否则支付宝将一直请求该地址并发送回调结果(具体看官方文档)return HttpResponse('success')
- AliPay 中的加密配置(本身就是配置好的,但是如果验证出问题了,看看这里对不对):
from datetime importdatetimefrom Crypto.PublicKey importRSAfrom Crypto.Signature importPKCS1_v1_5from Crypto.Hash importSHA256from urllib.parse importquote_plusfrom urllib.parse importurlparse, parse_qsfrom base64 importdecodebytes, encodebytesimport json
三:最后总结一点容易出现的错误 和 一些方法的说明
-return_url :支付成功后 - 重定向自己的网站
- notify_url :支付成功后 - 发送的POST订单验证消息(异步)
- out_trade_no :这个是订单号 -- 注意一点,千万不要测试的时候每次使用一个同一个订单号,否则会出现支付页面无法打开的问题
- debug = True / False :如果等于 True 的话就是测试环境的支付,如果是 False 就是正式环境的支付
- app_private_key_path :后面写 应用的私钥 路径位置
- alipay_public_key_path : 后面写 支付宝的公钥 路径位置
- sign_type = "RSA2" :可以使用 RSA 或者 RSA2 ,
这里注意下 :2018年1月5日后创建的应用只支持RSA2的格式;
-"https://openapi.alipaydev.com/gateway.do?{}".format(order_string) -- 结尾不要加 / (反斜杠)
注:带 dev 则是测试用的接口,但是不带 dev 就是真正的支付接口
- 最后说一点规范:
1. 建议把 AliPay 下面的 appid 什么的信息 写在 settings 中,
然后导入 settings 在通过 settings.APPID 拿到信息
2. 将存放 应用密钥 和 支付宝公钥 的 txt 文件放到单独一个文件夹中
python sdk怎么用_python - alipay sdk 使用 及 注意点相关推荐
- 如何开发python sdk调用数据_Python SDK调用示例
开发者可以通过Python SDK,调用物联网数据分析中生成的API. 步骤一:安装SDK 登录Python官方网站下载2.6.5及以上版本的Python,并按说明完成安装. (可选)安装Python ...
- Xamarin只言片语3——Xamarin.Android下支付宝(Alipay SDK)使用
开发环境Visual Studio 2015,Xamarin 3.11.1537,Xamarin Android5.1.7.12 下载支付宝移动支付的SDK(http://doc.open.alipa ...
- python如何使用sdk_如何使用SDK开发一个博客
一.开发环境搭建 1.安装python 请在python官网下载根据机器选择下载python2.7.14.参考链接https://www.python.org/downloads/release/py ...
- python如何使用sdk_Python实现海康威视SDK二次开发-1
此贴能起到的作用 通过这个帖子,能了解到如何用Python调用海康SDK,实现业务逻辑需要结合哪些资料,这些接口的参数是怎么样的,如何翻译成Python,如何传参,参数中的一些变量,常量可以怎样查找. ...
- 提升普适性,阿里云官方SDK发布支持Go语言SDK
摘要: 日前,阿里云官方SDK发布支持新语言--Go 语言SDK,意味着90%以上产品可以随时生成并发布Go SDK,给Go语言的开发者使用. 此次阿里云发布支持Go SDK的新功能,可以让Go语言开 ...
- python输出去空格_python不空格
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 退格(backspace) e 转义 000 空 n 换行 v 纵向制表符 t ...
- python国内下载地址_python下载链接
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 1.需要的python库requests2.代码(复制可用)#引用 reques ...
- iSpring SDK 10 Crack!iSpring SDK NEW @ 2022定格!
iSpring SDK-------5.7.0到 10.0版本 iSpring SDK(软件开发工具包)是一种高性能解决方案,可为网站和在线应用程序提供自动 PowerPoint 到 HTML 5 ...
- python怎么求整数_python求整数
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 求解方法:1.整数求余2.重复进行,整数除2再求余,直到除数为03.拼接余数4. ...
- python 语音播报库_python 语音库
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我需要自动分离两位发言者的声音. 我刚开始学习语音识别,我看了python的wa ...
最新文章
- 核弹级漏洞!我把log4j扒给你看!
- 一个颠覆性答案,登上《科学》封面:是什么弄破了这些泡泡? | 科学GIF
- termux pythonlxml安装_将安卓手机打造成你的python全栈开发利器
- 「 每日一练,快乐水题 」693. 交替位二进制数
- SAP UI5 xml view content parse
- C#并行编程(2):.NET线程池
- 个人学习机器学习笔记--
- [转载] Python开发系列课程(16) - 进程和线程
- 【转贴】 java 调用SAP RFC函数 报错信息搜集
- Tomcat------如何配置域名和80端口
- android 5.1 内核版本号,最新的安卓5.1.1 ROOT教程(不需要刷第三方内核)
- ext.js解决html乱码,extjs 中文乱码
- 湖南交通学院校友会小程序云开发解决方案
- android学习日记——高级组件3(PopupWindow,Notifcation,Style,Theme,自定义组件)
- minecraft刷怪笼java_Minecraft怪物经验top9!刷怪箱位列第4,杀玩家第2出乎意料
- RDkit二:利用RDkit筛选进行化学小分子2D药效团筛选
- 做人要低调,绝对经典的低调
- RabbitMQ教程_2 RabbitMQ 安装
- itextpdf convert html string to Pdf
- 学习笔记-三维超声相关知识