专题: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 请求参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递,具体参照各产品快速接入文档

signbiz_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&timestamp=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&notify_time=2016-07-19 14:10:49&subject=大乐透2.1&sign_type=RSA2&charset=utf-8&notify_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&notify_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&notify_time=2016-07-19 14:10:49&notify_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.支付宝公钥,私钥,沙箱环境配置相关推荐

  1. 【Vue+DRF生鲜电商】28.支付宝支付接口类解读,支付逻辑编辑

    专题:Vue+Django REST framework前后端分离生鲜电商 Vue+Django REST framework 打造前后端分离的生鲜电商项目(慕课网视频). Github地址:http ...

  2. vue一级分类和耳机分类_【Vue+DRF生鲜电商】10.商品分类层级获取,Vue跨域请求商品分类...

    欢迎访问我的博客专题 源码可访问 Github 查看 DRF实现商品分类获取 实现商品分类层级结构显示 商品类别ViewSet 在商品类别中,不需要对类别进行分页,因为类别的数据量不大,只要在数据量很 ...

  3. Django+Vue开发生鲜电商平台之1.项目介绍

    文章目录 一.项目概览 二.项目技术要点 三.项目预览 我永远相信只要永不放弃,我们还是有机会的.最后,我们还是坚信一点,这世界上只要有梦想,只要不断努力,只要不断学习,不管你长得如何,不管是这样,还 ...

  4. Django+Vue开发生鲜电商平台之10.购物车、订单管理和支付功能

    文章目录 一.购物车功能实现 1.加入购物车功能实现 2.修改购物车数量功能实现 3.和Vue结合实现购物车功能 二.订单功能实现 1.订单管理接口 2.Vue接入订单接口 三.支付宝支付接口完成 1 ...

  5. Django+Vue开发生鲜电商平台之11.首页、商品数量、缓存和限速功能开发

    文章目录 一.首页功能完善 1.轮播图实现 2.新品功能开发 3.商品系列分类展示功能 二.商品相关数量功能实现 1.商品点击数.收藏数功能实现 2.商品库存量和销量功能实现 三.DRF缓存设置 1. ...

  6. python全栈生鲜电商_Django REST framework+Vue 打造生鲜电商项目(笔记十)

    (from:https://www.cnblogs.com/derek1184405959/p/8877643.html  有修改) 十三.首页.商品数量.缓存和限速功能开发 首先把pycharm环境 ...

  7. Django+Vue开发生鲜电商平台之3.数据模型设计和资源导入

    文章目录 一.项目初始化 二.数据模型设计 1.用户数据模型设计 2.商品数据模型设计 3.交易数据模型设计 4.用户操作数据模型设计 三.xadmin后台管理系统的配置 四.数据迁移和数据导入 1. ...

  8. Django+Vue开发生鲜电商平台之2.开发环境搭建

    文章目录 一.PyCharm的安装和简单使用 二.MySQL和Navicat的安装和使用 三.Python的安装 四.虚拟环境的安装和配置 五.Vue开发环境搭建 一.PyCharm的安装和简单使用 ...

  9. python全栈生鲜电商_Django REST framework+Vue 打造生鲜电商项目(笔记一)

    首先,这系列随笔是我个人在学习Bobby老师的Django实战项目中,记录的觉得对自己来说比较重要的知识点,不是完完整整的项目步骤过程....如果有小伙伴想找完整的教程,可以看看这个(https:// ...

最新文章

  1. 一个函数打天下,einsum
  2. 如何设计一个深度学习项目
  3. 图的深度优先和广度优先算法(DFS递归与非递归)
  4. 您的主机不满足在启用Hyper-V 或DeviceCredential Guard的情况下运行VMware player的最低要求
  5. 小甲鱼c语言课后作业_知识,就是力量——山财“学习小课堂”助你蓄力
  6. apache1.3 php编译,安装Apache1.3.29 - Linux+Apache+Mysql+PHP典型配置详解_Linux教程_Linux公社-Linux系统门户网站...
  7. mysql 服务器管理员_mysql 查看数据库管理员
  8. 最简单的SpringCloud教程 | 第二篇: 服务消费者(rest+ribbon)(Finchley版本)
  9. 下载并导入mysql提供的测试数据库employees
  10. 二叉树查找最大最小值c语言,用C语言实现二叉排序树查找小于关键字key的最大节点的函数...
  11. 学会这6个强大的CSS选择器,将真正帮你写出干净的CSS代码!
  12. 如何删掉oracle服务,oracle留下的服务如何删除啊
  13. 【论文写作】本科、硕士研究生毕业论文格式问题
  14. php函数体用return,php递归函数使用return问题
  15. 【爆牙游记】黄山归来不看岳-走进新时代。
  16. 据消息称小米显示器34寸带鱼屏即将暂停销售:因为三星屏幕停止供应。
  17. PHP 微信JSP支付
  18. Error unpacking rpm package initscripts解决方案
  19. 贴图教程_次世代游戏基础教程-maya烘焙AO贴图
  20. 亲测有效,解决MAC无法联网的问题

热门文章

  1. 交换机、路由器和防火墙的关系
  2. 龙纹身的女孩 The Girl with the Dragon Tattoo
  3. 浏览器查看pdf插件pdfobject
  4. 阴阳师服务器维护2.11,[公告] 《阴阳师》2月11日正式服维护详情
  5. @Transactional导致的生产事故
  6. [7]云计算相关-理解云计算|角色与边界|云使能技术|unit4云安全|云安全威胁|威胁作用者
  7. Java创建线程Thread的两个方法
  8. python1~100猜数字游戏规则_Python小游戏——猜数字教程(random库教程)
  9. ftl不存在为真_freemarker判断对象是否为空的方法
  10. 《大数据导论》之数据的概念、类型和组织形式