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中关于时间和日期函数的常用计算总结(time和datatime)
Mar 08 Python
浅谈Python 对象内存占用
Jul 15 Python
Python中functools模块函数解析
Mar 12 Python
Python进阶之递归函数的用法及其示例
Jan 31 Python
Python实现朴素贝叶斯分类器的方法详解
Jul 04 Python
tensorflow: variable的值与variable.read_value()的值区别详解
Jul 30 Python
解决python线程卡死的问题
Feb 18 Python
Python流程控制 if else实现解析
Sep 02 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
基于python检查SSL证书到期情况代码实例
Apr 04 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 Python
Python安装Bs4的多种方法
Nov 28 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
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
formvalidator验证插件中有关ajax验证问题
2013/01/04 Javascript
cookie中的path与domain属性详解
2013/12/18 Javascript
javascript中的取反再取反~~没有意义
2014/04/06 Javascript
javascript实现微信分享
2014/12/23 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
原生js实现无缝轮播图效果
2017/01/11 Javascript
Reactjs实现通用分页组件的实例代码
2017/01/19 Javascript
js学习心得_一个简单的动画库封装tween.js
2017/07/14 Javascript
详解vue 组件之间使用eventbus传值
2017/10/25 Javascript
Vue进度条progressbar组件功能
2018/04/17 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
vue+axios+promise实际开发用法详解
2018/10/15 Javascript
使用electron实现百度网盘悬浮窗口功能的示例代码
2018/10/24 Javascript
vue 获取到数据但却渲染不到页面上的解决方法
2020/11/19 Vue.js
[01:02:06]LGD vs Mineski Supermajor 胜者组 BO3 第二场 6.5
2018/06/06 DOTA
Python3之简单搭建自带服务器的实例讲解
2018/06/04 Python
python中的字符串内部换行方法
2018/07/19 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
2019/08/19 Python
python队列原理及实现方法示例
2019/11/27 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
OpenCV中VideoCapture类的使用详解
2020/02/14 Python
CSS3实现头像旋转效果
2017/03/13 HTML / CSS
html5 利用canvas实现超级玛丽简单动画
2013/09/06 HTML / CSS
Sam’s Club山姆会员商店:沃尔玛旗下高端会员制商店
2017/01/16 全球购物
英国电器零售商:PRC Direct
2018/06/21 全球购物
do you have any Best Practice for testing
2016/06/04 面试题
企业总经理职责
2014/02/02 职场文书
大学共青团员个人自我评价
2014/04/16 职场文书
护士优质服务演讲稿
2014/08/26 职场文书
交心谈心活动总结
2015/05/11 职场文书
运动会开幕式新闻稿
2015/07/17 职场文书
运动会通讯稿200字
2015/07/20 职场文书
Html5页面播放M4a音频文件
2021/03/30 HTML / CSS
Nginx配置https原理及实现过程详解
2021/03/31 Servers
python 常用的异步框架汇总整理
2021/06/18 Python