【Vue+DRF生鲜电商】27.支付宝公钥,私钥,沙箱环境配置
专题:Vue+Django REST framework前后端分离生鲜电商
Vue+Django REST framework 打造前后端分离的生鲜电商项目(慕课网视频)。
Github地址:https://github.com/xyliurui/DjangoOnlineFreshSupermarket ;
Django版本:2.2、djangorestframework:3.9.2。
前端Vue模板可以直接联系我拿。
更多内容请点击 我的博客 查看,欢迎来访。
注册开放平台
访问支付宝开放平台 https://open.alipay.com/platform/home.htm ,右上角进入 管理中心
[外链图片转存失败(img-tvOxhcHD-1565442608659)(https://blog.starmeow.cn/media/blog/images/2019/08/BLOG_20190810_210747_47.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 “博客图集BLOG_20190810_210747_47.png”)]
企业账户才能创建应用,个人账户不行,但可以在沙箱中进行调试,这个应用是自动生成的
[外链图片转存失败(img-2JjJcZ9g-1565442608660)(https://blog.starmeow.cn/media/blog/images/2019/08/BLOG_20190810_210740_37.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 “博客图集BLOG_20190810_210740_37.png”)]
密钥生成步骤
查看密钥生成方法
[外链图片转存失败(img-TFocO0HB-1565442608661)(https://blog.starmeow.cn/media/blog/images/2019/08/BLOG_20190810_210731_91.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 “博客图集BLOG_20190810_210731_91.png”)]
可以访问 https://docs.open.alipay.com/291/105971 按步骤即可
下载 RSA签名验签工具windows,运行里面的 .bat 文件
[外链图片转存失败(img-b96h3JcO-1565442608661)(https://blog.starmeow.cn/media/blog/images/2019/08/BLOG_20190810_210724_71.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 “博客图集BLOG_20190810_210724_71.png”)]
注意:
生成的私钥需妥善保管,避免遗失,不要泄露。应用私钥需填写到代码中供签名时使用。应用公钥需提供给支付宝账号管理者上传到支付宝开放平台。
可以看到生成的文件
[外链图片转存失败(img-aVRHCqhJ-1565442608661)(https://blog.starmeow.cn/media/blog/images/2019/08/BLOG_20190810_210715_31.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 “博客图集BLOG_20190810_210715_31.png”)]
然后在沙箱页面中 RSA2(SHA256)密钥(推荐) 点击 设置应用公钥,复制应用公钥,粘贴到输入框,官方文档: https://docs.open.alipay.com/291/105972/
[外链图片转存失败(img-2J0i46Vt-1565442608661)(https://blog.starmeow.cn/media/blog/images/2019/08/BLOG_20190810_210708_72.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 “博客图集BLOG_20190810_210708_72.png”)]
保存3个密钥到项目
应用私钥和公钥
公钥和私钥都需要妥善保存,保存到我们项目目录 apps/trade/keys 下,千万别泄露了,不要通过Git上传。
保存到项目的密钥需要加上下面的字符串,不能有错
-----BEGIN PRIVATE KEY-----
KEY。。。
-----END PRIVATE KEY-----
[外链图片转存失败(img-tyCGavhr-1565442608662)(https://blog.starmeow.cn/media/blog/images/2019/08/BLOG_20190810_210701_78.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 “博客图集BLOG_20190810_210701_78.png”)]
这儿执行文件名的修改,将中文改为英文,第一个为应用私钥,第二个为应用公钥(对用户来说用处不大)
支付宝公钥
在页面上也会出现 查看支付宝公钥,点击会出现下面的弹框,这个支付宝公钥在代码中验签使用。
[外链图片转存失败(img-RzYubfEd-1565442608662)(https://blog.starmeow.cn/media/blog/images/2019/08/BLOG_20190810_210648_17.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240 “博客图集BLOG_20190810_210648_17.png”)]
复制内容保存到我们项目中,格式和之前的一样,在同一目录下新建一个文件,名为 alipay_key_2048.txt
-----BEGIN PRIVATE KEY-----
支付宝公钥
-----END PRIVATE KEY-----
应用私钥和支付宝公钥特别重要,应用公钥对我们用处不大。请求支付宝接口时,用我们的应用私钥来进行加密,支付宝用我们上传的应用公钥对签名做验证;支付宝公钥用来查询订单状态。
分析接口文档
支付宝 统一收单下单并支付页面接口 文档在 https://docs.open.alipay.com/api_1/alipay.trade.page.pay/ ,可以通过访问 开放平台 https://openhome.alipay.com/developmentDocument.htm ,点击 电脑网站支付 ,点击 API列表,点击 alipay.trade.page.pay 进入 统一收单下单并支付页面接口
公共参数
请求地址
环境 | HTTPS请求地址 |
---|---|
正式环境 | https://openapi.alipay.com/gateway.do |
使用沙箱环境,就是用沙箱环境的网关
公共请求参数
请求时需要带一些参数,主要看必填字段
参数 | 类型 | 是否必填 | 最大长度 | 描述 | 示例值 |
---|---|---|---|---|---|
app_id | String | 是 | 32 | 支付宝分配给开发者的应用ID | 2014072300007148 |
method | String | 是 | 128 | 接口名称 | alipay.trade.page.pay |
format | String | 否 | 40 | 仅支持JSON | JSON |
return_url | String | 否 | 256 | HTTP/HTTPS开头字符串 | https://m.alipay.com/Gk8NF23 |
charset | String | 是 | 10 | 请求使用的编码格式,如utf-8,gbk,gb2312等 | utf-8 |
sign_type | String | 是 | 10 | 商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2 | RSA2 |
sign | String | 是 | 344 | 商户请求参数的签名串,详见签名 | 详见示例 |
timestamp | String | 是 | 19 | 发送请求的时间,格式"yyyy-MM-dd HH:mm:ss" | 2014-07-24 03:07:50 |
version | String | 是 | 3 | 调用的接口版本,固定为:1.0 | 1.0 |
notify_url | String | 否 | 256 | 支付宝服务器主动通知商户服务器里指定的页面http/https路径。 | http://api.test.alipay.net/atinterface/receive_notify.htm |
app_auth_token | String | 否 | 40 | 详见应用授权概述 | |
biz_content | String | 是 | 请求参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递,具体参照各产品快速接入文档 |
sign
和biz_content
最重要,且容易出错。
请求参数(查看必填字段)
参数 | 类型 | 是否必填 | 最大长度 | 描述 | 示例值 |
---|---|---|---|---|---|
out_trade_no | String | 必选 | 64 | 商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复 | 20150320010101001 |
product_code | String | 必选 | 64 | 销售产品码,与支付宝签约的产品码名称。 注:目前仅支持FAST_INSTANT_TRADE_PAY | FAST_INSTANT_TRADE_PAY |
total_amount | Price | 必选 | 11 | 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]。 | 88.88 |
subject | String | 必选 | 256 | 订单标题 | Iphone6 16G |
公共响应参数
参数 | 类型 | 是否必填 | 最大长度 | 描述 | 示例值 |
---|---|---|---|---|---|
code | String | 是 | - | 网关返回码,详见文档 | 40004 |
msg | String | 是 | - | 网关返回码描述,详见文档 | Business Failed |
sub_code | String | 否 | - | 业务返回码,参见具体的API接口文档 | ACQ.TRADE_HAS_SUCCESS |
sub_msg | String | 否 | - | 业务返回码描述,参见具体的API接口文档 | 交易已被支付 |
sign | String | 是 | - | 签名,详见文档 | DZXh8eeTuAHoYE3w1J+POiPhfDxOYBfUNn1lkeT/V7P4zJdyojWEa6IZs6Hz0yDW5Cp/viufUb5I0/V5WENS3OYR8zRedqo6D+fUTdLHdc+EFyCkiQhBxIzgngPdPdfp1PIS7BdhhzrsZHbRqb7o4k3Dxc+AAnFauu4V6Zdwczo= |
响应参数
参数 | 类型 | 是否必填 | 最大长度 | 描述 | 示例值 |
---|---|---|---|---|---|
trade_no | String | 必填 | 64 | 支付宝交易号 | 2013112011001004330000121536 |
out_trade_no | String | 必填 | 64 | 商户订单号 | 6823789339978248 |
seller_id | String | 必填 | 16 | 收款支付宝账号对应的支付宝唯一用户号。 以2088开头的纯16位数字 | 2088111111116894 |
total_amount | Price | 必填 | 11 | 交易金额 | 128.00 |
merchant_order_no | String | 必填 | 32 | 商户原始订单号,最大长度限制32位 | 20161008001 |
使用应用私钥生成请求签名
官方文档: https://docs.open.alipay.com/291/106118
如果未使用支付宝开放平台SDK,需要自行实现签名过程。
1.筛选并排序
获取所有请求参数,不包括字节类型参数,如文件、字节流,剔除sign字段,剔除值为空的参数,并按照第一个字符的键值ASCII码递增排序(字母升序排序),如果遇到相同字符则按照第二个字符的键值ASCII码递增排序,以此类推。
2.拼接
将排序后的参数与其对应值,组合成“参数=参数值”的格式,并且把这些参数用&字符连接起来,此时生成的字符串为待签名字符串。
例如下面的请求示例,参数值都是示例,开发者参考格式即可:
REQUEST URL: https://openapi.alipay.com/gateway.do
REQUEST METHOD: POST
CONTENT:
app_id=2014072300007148
method=alipay.mobile.public.menu.add
charset=GBK
sign_type=RSA2
timestamp=2014-07-24 03:07:50
biz_content={"button":[{"actionParam":"ZFB_HFCZ","actionType":"out","name":"话费充值"},{"name":"查询","subButton":[{"actionParam":"ZFB_YECX","actionType":"out","name":"余额查询"},{"actionParam":"ZFB_LLCX","actionType":"out","name":"流量查询"},{"actionParam":"ZFB_HFCX","actionType":"out","name":"话费查询"}]},{"actionParam":"http://m.alipay.com","actionType":"link","name":"最新优惠"}]}
sign=e9zEAe4TTQ4LPLQvETPoLGXTiURcxiAKfMVQ6Hrrsx2hmyIEGvSfAQzbLxHrhyZ48wOJXTsD4FPnt+YGdK57+fP1BCbf9rIVycfjhYCqlFhbTu9pFnZgT55W+xbAFb9y7vL0MyAxwXUXvZtQVqEwW7pURtKilbcBTEW7TAxzgro=
version=1.0
则待签名字符串为:
app_id=2014072300007148&biz_content={"button":[{"actionParam":"ZFB_HFCZ","actionType":"out","name":"话费充值"},{"name":"查询","subButton":[{"actionParam":"ZFB_YECX","actionType":"out","name":"余额查询"},{"actionParam":"ZFB_LLCX","actionType":"out","name":"流量查询"},{"actionParam":"ZFB_HFCX","actionType":"out","name":"话费查询"}]},{"actionParam":"http://m.alipay.com","actionType":"link","name":"最新优惠"}]}&charset=GBK&method=alipay.mobile.public.menu.add&sign_type=RSA2×tamp=2014-07-24 03:07:50&version=1.0
3.调用签名函数
使用各自语言对应的SHA256WithRSA(对应sign_type为RSA2)或SHA1WithRSA(对应sign_type为RSA)签名函数利用商户私钥对待签名字符串进行签名,并进行Base64编码。
使用支付宝公钥验签
如果未使用支付宝开放平台SDK,需要自行实现验签过程。
同步返回和异步通知报文格式及验签方法有所区别。
同步返回验签
开发者只对支付宝返回的json中xxx_response的值做验签(xxx代表接口名)。
xxx_response的json值内容需要包含首尾的“{”和“}”两个尖括号,双引号也需要参与验签,如果字符串中包含“http://”的正斜杠,需要先将正斜杠做转义,默认打印出来的字符串是已经做过转义的。建议验签不通过时将正斜杠转义一次后再做一次验签。
如当面付扫码支付获取二维码的返回内容为:
{"alipay_trade_precreate_response":{"code":"10000","msg":"Success","out_trade_no":"6141161365682511","qr_code":"https:\/\/qr.alipay.com\/bax03206ug0kulveltqc80a8"},"sign":"VrgnnGgRMNApB1QlNJimiOt5ocGn4a4pbXjdoqjHtnYMWPYGX9AS0ELt8YikVAl6LPfsD7hjSyGWGjwaAYJjzH1MH7B2/T3He0kLezuWHsikao2ktCjTrX0tmUfoMUBCxKGGuDHtmasQi4yAoDk+ux7og1J5tL49yWiiwgaJoBE="}
则待验签字段为:
{"code":"10000","msg":"Success","out_trade_no":"6141161365682511","qr_code":"https:\/\/qr.alipay.com\/bax03206ug0kulveltqc80a8"}
同时取出签名值sign:
VrgnnGgRMNApB1QlNJimiOt5ocGn4a4pbXjdoqjHtnYMWPYGX9AS0ELt8YikVAl6LPfsD7hjSyGWGjwaAYJjzH1MH7B2/T3He0kLezuWHsikao2ktCjTrX0tmUfoMUBCxKGGuDHtmasQi4yAoDk+ux7og1J5tL49yWiiwgaJoBE=
调用验签函数:使用各自语言对应的SHA256WithRSA(对应sign_type为RSA2)或SHA1WithRSA(对应sign_type为RSA)签名验证函数,传入待验签字段、支付宝公钥、签名内容(sign),验签方法(signType)进行验签,根据返回结果判定是否验签通过。
异步通知验签
某些情况下(比如扫码支付成功时),支付宝会给商户发送异步通知。
如果某商户设置的通知地址为https://api.xx.com/receive_notify.htm,对应接收到通知的示例如下:
https://api.xx.com/receive_notify.htm?total_amount=2.00&buyer_id=2088102116773037&body=大乐透2.1&trade_no=2016071921001003030200089909&refund_fee=0.00¬ify_time=2016-07-19 14:10:49&subject=大乐透2.1&sign_type=RSA2&charset=utf-8¬ify_type=trade_status_sync&out_trade_no=0719141034-6418&gmt_close=2016-07-19 14:10:46&gmt_payment=2016-07-19 14:10:47&trade_status=TRADE_SUCCESS&version=1.0&sign=kPbQIjX+xQc8F0/A6/AocELIjhhZnGbcBN6G4MM/HmfWL4ZiHM6fWl5NQhzXJusaklZ1LFuMo+lHQUELAYeugH8LYFvxnNajOvZhuxNFbN2LhF0l/KL8ANtj8oyPM4NN7Qft2kWJTDJUpQOzCzNnV9hDxh5AaT9FPqRS6ZKxnzM=&gmt_create=2016-07-19 14:10:44&app_id=2015102700040153&seller_id=2088102119685838¬ify_id=4a91b7a78a503640467525113fb7d8bg8e
验签流程:
1.在通知返回参数列表中,除去sign、sign_type两个参数外,凡是通知返回回来的参数皆是待验签的参数。
**TIPS:**生活号异步通知组成的待验签串里需要保留
sign_type
参数。
2.将剩下参数进行url_decode, 然后进行字典排序,组成字符串,得到待签名字符串:
body=大乐透2.1&buyer_id=2088102116773037&charset=utf-8&gmt_close=2016-07-19 14:10:46&gmt_payment=2016-07-19 14:10:47¬ify_time=2016-07-19 14:10:49¬ify_type=trade_status_sync&out_trade_no=0719141034-6418&refund_fee=0.00&subject=大乐透2.1&total_amount=2.00&trade_no=2016071921001003030200089909&trade_status=TRADE_SUCCESS&version=1.0
3.将签名参数(sign)使用base64解码为字节码串。
4.使用RSA的验签方法,通过签名字符串、签名参数(经过base64解码)及支付宝公钥验证签名,根据返回结果判定是否验签通过。
【Vue+DRF生鲜电商】27.支付宝公钥,私钥,沙箱环境配置相关推荐
- 【Vue+DRF生鲜电商】28.支付宝支付接口类解读,支付逻辑编辑
专题:Vue+Django REST framework前后端分离生鲜电商 Vue+Django REST framework 打造前后端分离的生鲜电商项目(慕课网视频). Github地址:http ...
- vue一级分类和耳机分类_【Vue+DRF生鲜电商】10.商品分类层级获取,Vue跨域请求商品分类...
欢迎访问我的博客专题 源码可访问 Github 查看 DRF实现商品分类获取 实现商品分类层级结构显示 商品类别ViewSet 在商品类别中,不需要对类别进行分页,因为类别的数据量不大,只要在数据量很 ...
- Django+Vue开发生鲜电商平台之1.项目介绍
文章目录 一.项目概览 二.项目技术要点 三.项目预览 我永远相信只要永不放弃,我们还是有机会的.最后,我们还是坚信一点,这世界上只要有梦想,只要不断努力,只要不断学习,不管你长得如何,不管是这样,还 ...
- Django+Vue开发生鲜电商平台之10.购物车、订单管理和支付功能
文章目录 一.购物车功能实现 1.加入购物车功能实现 2.修改购物车数量功能实现 3.和Vue结合实现购物车功能 二.订单功能实现 1.订单管理接口 2.Vue接入订单接口 三.支付宝支付接口完成 1 ...
- Django+Vue开发生鲜电商平台之11.首页、商品数量、缓存和限速功能开发
文章目录 一.首页功能完善 1.轮播图实现 2.新品功能开发 3.商品系列分类展示功能 二.商品相关数量功能实现 1.商品点击数.收藏数功能实现 2.商品库存量和销量功能实现 三.DRF缓存设置 1. ...
- python全栈生鲜电商_Django REST framework+Vue 打造生鲜电商项目(笔记十)
(from:https://www.cnblogs.com/derek1184405959/p/8877643.html 有修改) 十三.首页.商品数量.缓存和限速功能开发 首先把pycharm环境 ...
- Django+Vue开发生鲜电商平台之3.数据模型设计和资源导入
文章目录 一.项目初始化 二.数据模型设计 1.用户数据模型设计 2.商品数据模型设计 3.交易数据模型设计 4.用户操作数据模型设计 三.xadmin后台管理系统的配置 四.数据迁移和数据导入 1. ...
- Django+Vue开发生鲜电商平台之2.开发环境搭建
文章目录 一.PyCharm的安装和简单使用 二.MySQL和Navicat的安装和使用 三.Python的安装 四.虚拟环境的安装和配置 五.Vue开发环境搭建 一.PyCharm的安装和简单使用 ...
- python全栈生鲜电商_Django REST framework+Vue 打造生鲜电商项目(笔记一)
首先,这系列随笔是我个人在学习Bobby老师的Django实战项目中,记录的觉得对自己来说比较重要的知识点,不是完完整整的项目步骤过程....如果有小伙伴想找完整的教程,可以看看这个(https:// ...
最新文章
- 一个函数打天下,einsum
- 如何设计一个深度学习项目
- 图的深度优先和广度优先算法(DFS递归与非递归)
- 您的主机不满足在启用Hyper-V 或DeviceCredential Guard的情况下运行VMware player的最低要求
- 小甲鱼c语言课后作业_知识,就是力量——山财“学习小课堂”助你蓄力
- apache1.3 php编译,安装Apache1.3.29 - Linux+Apache+Mysql+PHP典型配置详解_Linux教程_Linux公社-Linux系统门户网站...
- mysql 服务器管理员_mysql 查看数据库管理员
- 最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)(Finchley版本)
- 下载并导入mysql提供的测试数据库employees
- 二叉树查找最大最小值c语言,用C语言实现二叉排序树查找小于关键字key的最大节点的函数...
- 学会这6个强大的CSS选择器,将真正帮你写出干净的CSS代码!
- 如何删掉oracle服务,oracle留下的服务如何删除啊
- 【论文写作】本科、硕士研究生毕业论文格式问题
- php函数体用return,php递归函数使用return问题
- 【爆牙游记】黄山归来不看岳-走进新时代。
- 据消息称小米显示器34寸带鱼屏即将暂停销售:因为三星屏幕停止供应。
- PHP 微信JSP支付
- Error unpacking rpm package initscripts解决方案
- 贴图教程_次世代游戏基础教程-maya烘焙AO贴图
- 亲测有效,解决MAC无法联网的问题
热门文章
- 交换机、路由器和防火墙的关系
- 龙纹身的女孩 The Girl with the Dragon Tattoo
- 浏览器查看pdf插件pdfobject
- 阴阳师服务器维护2.11,[公告] 《阴阳师》2月11日正式服维护详情
- @Transactional导致的生产事故
- [7]云计算相关-理解云计算|角色与边界|云使能技术|unit4云安全|云安全威胁|威胁作用者
- Java创建线程Thread的两个方法
- python1~100猜数字游戏规则_Python小游戏——猜数字教程(random库教程)
- ftl不存在为真_freemarker判断对象是否为空的方法
- 《大数据导论》之数据的概念、类型和组织形式