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 相关文章推荐
linux系统使用python监控apache服务器进程脚本分享
Jan 15 Python
python使用wmi模块获取windows下硬盘信息的方法
May 15 Python
手把手教你python实现SVM算法
Dec 27 Python
ML神器:sklearn的快速使用及入门
Jul 11 Python
给你一面国旗 教你用python画中国国旗
Sep 24 Python
Python正则表达式学习小例子
Mar 03 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
Mar 06 Python
Python IDLE或shell中切换路径的操作
Mar 09 Python
python deque模块简单使用代码实例
Mar 12 Python
pygame实现弹球游戏
Apr 14 Python
python requests包的request()函数中的参数-params和data的区别介绍
May 05 Python
Pytorch中使用ImageFolder读取数据集时忽略特定文件
Mar 23 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教程 变量定义
2009/10/23 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
php数组函数序列之array_search()- 按元素值返回键名
2011/11/04 PHP
PHP优于Node.js的五大理由分享
2012/09/15 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
JavaScript confirm选择判断
2008/10/18 Javascript
javascript设计模式之解释器模式详解
2014/06/05 Javascript
在linux中使用包管理器安装node.js
2015/03/13 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
基于jquery实现智能提示控件intellSeach.js
2016/03/17 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
vue实现用户长时间不操作自动退出登录功能的实现代码
2020/07/23 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
使用Python设置tmpfs来加速项目的教程
2015/04/17 Python
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
python实现图片上添加图片
2019/11/26 Python
TensorFlow绘制loss/accuracy曲线的实例
2020/01/21 Python
工商管理系学生的自我评价分享
2013/11/29 职场文书
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
货车司机岗位职责
2014/03/18 职场文书
竞选班干部演讲稿
2014/04/24 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
党员群众路线个人整改措施思想汇报
2014/10/12 职场文书
优秀教师先进材料
2014/12/16 职场文书
五星级酒店前台接待岗位职责
2015/04/02 职场文书
项目备案申请报告
2015/05/15 职场文书
防震减灾主题班会
2015/08/14 职场文书
班级管理经验交流材料
2015/11/02 职场文书
2019通用版导游词范本!
2019/08/07 职场文书