django实现支付宝支付实例讲解

作者:BZ易风 时间:2023-08-27 04:45:44 

安装python-alipay-sdk

pip install python-alipay-sdk --upgrade

配置

django实现支付宝支付实例讲解

视图函数orders/views.py

# 订单支付
# /order/pay
from alipay import AliPay, ISVAliPay
import os
from django.conf import settings
class OrderPayView(View):
 def post(self, request):
   '''支付页面'''
   # 判断用户是否登录
   user = request.user
   if not user.is_authenticated():
     return JsonResponse({'res':0, 'errmsg':'用户尚未登录'})
   # 接收订单id
   order_id = request.POST.get('order_id')
   # 校验订单id
   if not order_id:
     return JsonResponse({'res':1, 'errmsg':'无效的订单id'})
   # 查询订单信息
   try:
     order = OrderInfo.objects.get(order_id=order_id, user=user, pay_method=3, order_status=1)
   except OrderInfo.DoesNotExist:
     return JsonResponse({'res':2, 'errmsg':'订单错误'})
# 业务处理 使用python sdk调用支付宝的支付接口
   # 支付宝信息  不能放在settings里 会报错
   alipay = AliPay(
     appid="2016101200665304",
     app_notify_url=None, # 默认回调url 如果为空的话不能用'' 要用None
     # 个人私钥
     app_private_key_string=os.path.join(settings.BASE_DIR, 'apps/orders/app_private_key.pem'),
     # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
     alipay_public_key_string=os.path.join(settings.BASE_DIR, 'apps/orders/alipay_public_key.pem'),
     # 加密方式
     sign_type="RSA2", # RSA 或者 RSA2
     # 沙箱是True 正式环境是False
     debug=True # 默认False
   )
   # 调用支付接口
   # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string 实际地址
   # 沙箱地址 https://openapi.alipaydev.com/gateway.do? + order_string 沙箱地址在alipay后面加上dev
   total_price = order.total_price + order.transit_price # Decimal
   order_string = alipay.api_alipay_trade_page_pay(
     out_trade_no=order_id, # 订单id
     total_amount=str(total_price), # 支付总金额 因为Decimal格式不能序列化 所以先转成字符串
     subject='天天生鲜%s'%order_id,
     return_url=None,
     notify_url=None # 可选, 不填则使用默认notify url
   )
   # 返回应答
   pay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string
   return JsonResponse({'res':3, 'pay_url':pay_url})

配置路由urls.py

from django.conf.urls import url
from orders.views import OrderPlaceView, OrderCommitView, OrderPayView
urlpatterns = [
 url(r'^place$', OrderPlaceView.as_view(), name='place'), # 提交订单页面
 url(r'^commit$', OrderCommitView.as_view(), name='commit'), # 提交订单处理
 url(r'^pay$', OrderPayView.as_view(), name='pay'), # 订单支付
]

来源:https://www.cnblogs.com/yifengs/p/11691423.html

标签:django,支付宝支付
0
投稿

猜你喜欢

  • ASP FSO生成静态htm页面简单代码

    2010-04-24 16:04:00
  • OpenCV+python实现膨胀和腐蚀的示例

    2021-06-12 10:35:00
  • Opencv实现眼睛控制鼠标的实践

    2023-07-04 11:21:52
  • 用python生成mysql数据库结构文档

    2021-05-15 12:04:33
  • .net 6精简版webapi教程及热重载、代码自动反编译演示

    2024-05-05 09:13:12
  • Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例

    2023-07-18 20:11:01
  • python显示天气预报

    2022-04-22 23:46:38
  • Python机器学习之scikit-learn库中KNN算法的封装与使用方法

    2021-04-05 15:32:40
  • 基于vue-draggable 实现三级拖动排序效果

    2024-05-29 22:18:05
  • Firefox 下 innerHTML 的一个 BUG

    2008-08-05 18:19:00
  • Python xlwings插入Excel图片的实现方法

    2023-11-23 05:53:18
  • 轻松解决:mysql数据库连接过多的错误

    2010-09-30 14:28:00
  • 利用Python+PyQt5实现简易浏览器的实战记录

    2022-10-30 23:16:26
  • python计算书页码的统计数字问题实例

    2021-03-26 01:23:18
  • 如何实现固定长度的自动编号?

    2010-06-03 10:08:00
  • windows系统下Python环境的搭建(Aptana Studio)

    2021-03-16 20:40:37
  • Python脚本开发漏洞的批量搜索与利用(GlassFish 任意文件读取)

    2023-01-30 20:08:36
  • MySQL和SQLServer的比较

    2024-01-15 00:30:39
  • SQL语句练习实例之五 WMS系统中的关于LIFO或FIFO的问题分析

    2024-01-16 06:47:26
  • 详解python--模拟轮盘抽奖游戏

    2023-07-25 15:35:14
  • asp之家 网络编程 m.aspxhome.com