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

 更新时间:2019年10月17日 15:58:12   作者:BZ易风  
在本篇文章里小编给大家整理的是一篇关于django支付宝支付的代码实例内容,需要的朋友们可以学习下。

安装python-alipay-sdk

pip install python-alipay-sdk --upgrade

配置

视图函数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 高级库15 个让新手爱不释手(推荐)

    Python 高级库15 个让新手爱不释手(推荐)

    对于初学者来说,这是一种简单易学的编程语言;另一个原因:大量开箱即用的第三方库,正是 23 万个由用户提供的软件包使得 Python 真正强大和流行,本文给大家分享15 个让新手爱不释手Python 高级库的相关知识,感兴趣的朋友一起看看吧
    2021-05-05
  • python匹配两个短语之间的字符实例

    python匹配两个短语之间的字符实例

    今天小编就为大家分享一篇python匹配两个短语之间的字符实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • 如何使用PyCharm将代码上传到GitHub上(图文详解)

    如何使用PyCharm将代码上传到GitHub上(图文详解)

    这篇文章主要介绍了如何使用PyCharm将代码上传到GitHub上(图文详解),文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 解决numpy矩阵相减出现的负值自动转正值的问题

    解决numpy矩阵相减出现的负值自动转正值的问题

    这篇文章主要介绍了解决numpy矩阵相减出现的负值自动转正值的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 在PyCharm中实现添加快捷模块

    在PyCharm中实现添加快捷模块

    今天小编就为大家分享一篇在PyCharm中实现添加快捷模块,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python获取从命令行输入数字的方法

    python获取从命令行输入数字的方法

    这篇文章主要介绍了python获取从命令行输入数字的方法,涉及Python操作命令行输入的相关技巧,需要的朋友可以参考下
    2015-04-04
  • Python连接DB2数据库

    Python连接DB2数据库

    DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本。今天我们来探讨下如何使用Python连接DB2数据库
    2016-08-08
  • 在Python中处理时间之clock()方法的使用

    在Python中处理时间之clock()方法的使用

    这篇文章主要介绍了在Python中处理时间之clock()方法的使用,是Python入门学习中的基础知识,需要的朋友可以参考下
    2015-05-05
  • Python网络爬虫与信息提取(实例讲解)

    Python网络爬虫与信息提取(实例讲解)

    下面小编就为大家带来一篇Python网络爬虫与信息提取(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 10个Python中python_docx库的实用案例分享

    10个Python中python_docx库的实用案例分享

    在日常办公和文档处理中,Word文档是我们最常用的格式之一,Python通过python - docx库能够实现对Word文档的各种自动化操作,本文为大家准备了10个常用的案例,希望对大家有所帮助
    2025-02-02

最新评论