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


Posted in Python onOctober 17, 2019

安装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'), # 订单支付

]

以上就是本次介绍的相关知识点以及实例代码,更多内容可以参考三水点靠木相关栏目。

Python 相关文章推荐
通过代码实例展示Python中列表生成式的用法
Mar 31 Python
深入理解 Python 中的多线程 新手必看
Nov 20 Python
python将文本分每两行一组并保存到文件
Mar 19 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
django和vue实现数据交互的方法
Aug 21 Python
python3 实现调用串口功能
Dec 26 Python
基于pycharm实现批量修改变量名
Jun 02 Python
Python pexpect模块及shell脚本except原理解析
Aug 03 Python
Python Merge函数原理及用法解析
Sep 16 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 Python
python中用ctypes模拟点击的实例讲解
Nov 26 Python
python通过实例讲解反射机制
Oct 17 #Python
python集合常见运算案例解析
Oct 17 #Python
Pandas聚合运算和分组运算的实现示例
Oct 17 #Python
18个Python脚本可加速你的编码速度(提示和技巧)
Oct 17 #Python
python numpy中cumsum的用法详解
Oct 17 #Python
python hashlib加密实现代码
Oct 17 #Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
Oct 17 #Python
You might like
php文件怎么打开 如何执行php文件
2011/12/21 PHP
深入PHP运行环境配置的详解
2013/06/04 PHP
php中将一个对象保存到Session中的方法
2015/03/13 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
PHP程序守护进程化实现方法详解
2020/07/16 PHP
仅IE支持clearAttributes/mergeAttributes方法使用介绍
2012/05/04 Javascript
js选取多个或单个元素的实现代码(用class)
2012/08/22 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
图片Slider 带左右按钮的js示例
2013/08/30 Javascript
JavaScript中的类数组对象介绍
2014/12/30 Javascript
js+css实现tab菜单切换效果的方法
2015/01/20 Javascript
javascript获取select值的方法分析
2015/07/02 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
JS图片轮播与索引变色功能实例详解
2017/07/06 Javascript
js实现加载页面就自动触发超链接的示例
2017/08/31 Javascript
基于vue.js无缝滚动效果
2018/01/25 Javascript
jQuery实现鼠标响应式透明度渐变动画效果示例
2018/02/13 jQuery
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
详解小程序之简单登录注册表单验证
2019/05/13 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
seajs和requirejs模块化简单案例分析
2019/08/26 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
python实现代理服务功能实例
2013/11/15 Python
详解Python中的静态方法与类成员方法
2017/02/28 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
Python 实现在文件中的每一行添加一个逗号
2018/04/29 Python
Python使用reportlab模块生成PDF格式的文档
2019/03/11 Python
禁毒主题班会教案
2015/08/14 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
实习报告怎么写
2019/06/20 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
Pytest中conftest.py的用法
2021/06/27 Python
mybatis 解决从列名到属性名的自动映射失败问题
2021/06/30 Java/Android
Redis+AOP+自定义注解实现限流
2022/06/28 Redis