Django 项目总结(12)- 支付部分

支付部分

基本功能:使用支付宝支付

创建数据库模型类,用来保持订单 id 和对应当前订单在支付宝那里的支付编号

支付流程类似于 QQ 登录

使用支付宝支付,需要先注册应用 ID,不过开发过程中也可以先使用沙箱环境进行开发,

支付宝开发文档

支付宝开发没有对应的 python 的 SDK ,不过 python 的大佬在 github 上写出了 python 的 SDK,直接使用即可

支付流程

  • 用户点击去支付按钮
  • 浏览器向服务器发送请求,服务器拼接出支付宝支付地址,将地址和对应的参数返回
  • 浏览器根据返回的地址加载支付界面,此时就是前端与用户和支付宝之间的交互
  • 用户进行登录支付宝,根据支付宝的页面进行结算
  • 支付成功有三种通知服务器的方式,服务器好进行更新数据库
  • 第一种:支付成功,前端根据回调地址页发生请求告诉服务器,将相关数据传过去
  • 第二种:支付宝服务器判断支付成功,通过 notify 地址通知服务器
  • 第三种:服务器比较着急,会自己向支付宝服务器发个请求过去,问一下支付完了没有
  • 这里我们只使用了第一种方式,前端发送请求过来后,更新数据库,更新订单状态为发货,支付流程结束

接入支付宝服务器步骤

  • 创建应用
  • 配置密钥
  • 搭建和配置开发环境
  • 接口调用
配置密钥

和支付宝之间进行通信,肯定是需要一种更安全的方式

目前的加密的模式有:

  • 单向加密技术:sha1, sha256, md5 这种是只能加密不能解密
  • 双向加密技术:base64 即能加密也能解密,不过很容易解密
  • 对称加密算法:DES 加密和解密用的是一个密钥
  • 非对称加密算法:RSA 加密和解密用的密钥不同,公钥和私钥,用公钥加密,用私钥解密;或用私钥加密,公钥解密

服务器和支付宝服务器是双向的,所以使用的是 RSA 非对称加密

  • 在服务器端生成公钥和私钥,支付宝端会自己生成公钥和私钥
  • 将公钥互相交换
  • 服务器端拥有:支付宝公钥、美多公钥、美多私钥
  • 支付宝端拥有:美多公钥、支付宝公钥、支付宝私钥
  • 服务器端用支付宝公钥进行加密,传输数据,支付宝端用支付宝私钥进行解密
  • 支付宝端用美多公钥进行加密,传输数据,服务器端用美多私钥进行解密
  • 这样就可以实现数据的安全传输
本地生成应用的私钥和公钥
openssl
OpenSSL> genrsa -out app_private_key.pem 2048  # 私钥RSA2
OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem # 导出公钥

OpenSSL> exit

发起支付

  • 用户点击去支付按钮,向后端发送请求,带上当前的订单编号
  • 后端判断订单是否正确
  • 根据 SDK 中支付宝需要的参数构造拼接支付链接地址
  • 返回给前端

保存支付结果

  • 支付成功后会跳转到回调地址,
  • 向后端发送请求,支付宝参数会在拼接在 url 后面,并带上支付宝流水号
  • 主要是为了校验支付宝参数是否正确
  • 取出参数,从参数中先去掉 sign 签名并保存,
  • 先取出 Alipay 对象,提供了 verify 方法对数据进行校验
  • 该方法需要两个参数,支付宝去掉 sign 的数据 data 和 sign 签名,它会使用 data 重新生成一下签名,然后和传过来的前面进行对比,
  • 如果一致,说明没有问题,取出订单编号和支付流水号,进行保存,并更新订单状态,返回 支付宝流水号,前端进行展示
  • 如果出错,说明是非法请求,保存并返回
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值