Django中实现支付宝支付

接入支付宝支付逻辑

支付流程:

return_url:用户支付成功返回的页面

notify_url:通知商户用户支付成功与否的页面

1-用户点击支付,调用支付宝登录的接口(携带订单编号,总金额,return_url,notify_url参数),获取到支付宝登录的url参数,拼接到支付宝支付的url中

2-登录支付宝,登录成功后输入支付密码

3-支付,支付成功后跳转到支付成功页面

4-支付宝携带支付结果数据重定向到商户指定的return_url页面,显示订单支付成功

5-浏览器携带支付结果数据访问notify_url页面,后端保存支付结果

对称/非对称加密

对称:公钥和私钥的加密方法一样

非对称:公钥和私钥的加密方法不一样

商户和支付宝互相存储对方的公钥,双方发送消息给对方时用各自的私钥验证身份是否合法

支付宝接入

  1. 创建应用
  2. 配置密钥
  3. 搭建和配置开发环境
  4. 接口调用

创建数据库模型类
创建应用payment

from django.db import models

from meiduo_mall.utils.models import BaseModel
from orders.models import OrderInfo

    class Payment(BaseModel):
        """
        支付信息
        """
        order = models.ForeignKey(OrderInfo, on_delete=models.CASCADE, verbose_name='订单')
        trade_id = models.CharField(max_length=100, unique=True, null=True, blank=True, verbose_name="支付编号")
    
        class Meta:
            db_table = 'tb_payment'
            verbose_name = '支付信息'
            verbose_name_plural = verbose_name

python对接支付宝SDK安装

pip install python-alipay-sdk --upgrade`

配置秘钥

①生成应用的私钥和公钥

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

②保存应用私钥文件

在payment应用中新建keys目录,用来保存秘钥文件。

将应用私钥文件app_private_key.pem复制到payment/keys目录下。

③ 查看公钥

cat app_publict_key.pem

将公钥内容复制给支付宝

在这里插入图片描述

④保存支付宝公钥

在payment/keys目录下新建alipay_public_key.pem文件,用于保存支付宝的公钥文件。

将支付宝的公钥内容复制到alipay_public_key.pem文件中
在这里插入图片描述

注意,还需要在公钥文件中补充开始与结束标志

-----BEGIN PUBLIC KEY-----
此处是公钥内容
-----END PUBLIC KEY-----

发起支付的接口

接口设计

1-请求方式:GET /orders/?P<order_id>\d+/payment/

2-请求参数:路径参数order_id

3-返回参数:支付宝支付的url

具体实现

1-校验order_id

2-调用sdk中api获取支付参数

3-将支付参数拼接到支付宝的url

4-返回

# 发起支付接口,获取支付宝支付的url
# GET /orders/(?P<order_id>\d+)/payment/
class PayMentView(APIView):
    permission_classes = [IsAuthenticated]  # 仅登陆认证的用户才能访问

    def get(self, request, order_id)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值