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中实现参数类型检查的简单方法
Apr 21 Python
python制作爬虫并将抓取结果保存到excel中
Apr 06 Python
python实现应用程序在右键菜单中添加打开方式功能
Jan 09 Python
Python 实现购物商城,含有用户入口和商家入口的示例
Sep 15 Python
python机器学习之神经网络(二)
Dec 20 Python
pandas获取groupby分组里最大值所在的行方法
Apr 20 Python
python二维列表一维列表的互相转换实例
Jul 02 Python
Selenium元素的常用操作方法分析
Aug 10 Python
python自动循环定时开关机(非重启)测试
Aug 26 Python
使用Python实现画一个中国地图
Nov 23 Python
GDAL 矢量属性数据修改方式(python)
Mar 10 Python
Django windows使用Apache实现部署流程解析
Oct 12 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内存管理之谁动了我的内存
2013/06/20 PHP
laravel 实现划分admin和home 模块分组
2019/10/15 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
jQuery对象和Javascript对象之间转换的实例代码
2013/03/20 Javascript
利用Jquery实现可多选的下拉框
2014/02/21 Javascript
JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
2014/03/20 Javascript
javascript使用数组的push方法完成快速排序
2014/09/15 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
详解node.js搭建代理服务器请求数据
2017/04/08 Javascript
Vue中render方法的使用详解
2018/01/26 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
React 使用browserHistory项目访问404问题解决
2018/06/01 Javascript
详解VUE项目中安装和使用vant组件
2019/04/28 Javascript
js模拟F11页面全屏显示
2019/09/17 Javascript
基于Vue的商品主图放大镜方案详解
2019/09/19 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
2019/11/04 Javascript
Python中设置变量访问权限的方法
2015/04/27 Python
简介Python中用于处理字符串的center()方法
2015/05/18 Python
Python实现对一个函数应用多个装饰器的方法示例
2018/02/09 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
python 制作网站筛选工具(附源码)
2021/01/21 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
2018/05/28 HTML / CSS
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
《兰亭集序》教学反思
2014/02/11 职场文书
《大海那边》教学反思
2014/04/09 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
广播体操比赛主持词
2015/06/29 职场文书
工作简报格式范文
2015/07/21 职场文书
goland 恢复已更改文件的操作
2021/04/28 Golang
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android