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 参数列表中的self 显式不等于冗余
Dec 01 Python
Python 开发Activex组件方法
Nov 08 Python
python 接口_从协议到抽象基类详解
Aug 24 Python
老生常谈Python startswith()函数与endswith函数
Sep 08 Python
Python数据结构之单链表详解
Sep 12 Python
python做量化投资系列之比特币初始配置
Jan 23 Python
解决python彩色螺旋线绘制引发的问题
Nov 23 Python
浅谈django 模型类使用save()方法的好处与注意事项
Mar 28 Python
python使用建议与技巧分享(二)
Aug 17 Python
Python计算矩阵的和积的实例详解
Sep 10 Python
基于Python组装jmx并调用JMeter实现压力测试
Nov 03 Python
Django基于Models定制Admin后台实现过程解析
Nov 11 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命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
Yii数据库缓存实例分析
2016/03/29 PHP
javascript写的一个链表实现代码
2009/10/25 Javascript
JQuery中each()的使用方法说明
2010/08/19 Javascript
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
2013/12/11 Javascript
为什么JS中eval处理JSON数据要加括号
2015/04/13 Javascript
常见的浏览器Hack技巧整理
2017/06/29 Javascript
详解Webpack DLL用法以及功能
2017/07/11 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
vue.js实现标签页切换效果
2018/06/07 Javascript
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
AngularJS与后端php的数据交互方法
2018/08/13 Javascript
webpack 如何解析代码模块路径的实现
2019/09/04 Javascript
layui table 表格模板按钮的实例代码
2019/09/21 Javascript
[41:54]2018DOTA2亚洲邀请赛 4.1 小组赛A组加赛 TNC vs Liquid
2018/04/03 DOTA
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
Python中GeoJson和bokeh-1的使用讲解
2019/01/03 Python
用sqlalchemy构建Django连接池的实例
2019/08/29 Python
解决Python数据可视化中文部分显示方块问题
2020/05/16 Python
TripAdvisor瑞典:全球领先的旅游网站
2017/12/11 全球购物
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
招商专员岗位职责
2014/02/08 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
阳光体育活动总结
2014/04/30 职场文书
2014年党支部承诺书
2014/05/30 职场文书
保洁员岗位职责
2015/02/04 职场文书
部门经理迟到检讨书
2015/02/16 职场文书
2015年感恩母亲节的演讲稿
2015/03/18 职场文书
毕业设计致谢词
2015/05/14 职场文书
React forwardRef的使用方法及注意点
2021/06/13 Javascript
Python如何快速找到多个字典中的公共键(key)
2022/04/29 Python
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript