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 IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
Feb 13 Python
基于python(urlparse)模板的使用方法总结
Oct 13 Python
Python爬虫爬取一个网页上的图片地址实例代码
Jan 16 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
pygame游戏之旅 调用按钮实现游戏开始功能
Nov 21 Python
pyqt5 使用cv2 显示图片,摄像头的实例
Jun 27 Python
python 协程 gevent原理与用法分析
Nov 22 Python
python异常处理try except过程解析
Feb 03 Python
通过Python实现Payload分离免杀过程详解
Jul 13 Python
python实现将中文日期转换为数字日期
Jul 14 Python
Python实现EM算法实例代码
Oct 04 Python
关于pytest结合csv模块实现csv格式的数据驱动问题
May 30 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
博士208HAF收音机实习报告
2021/03/02 无线电
由php if 想到的些问题
2008/03/22 PHP
phpExcel导出大量数据出现内存溢出错误的解决方法
2013/02/28 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
Zend Framework动作助手Redirector用法实例详解
2016/03/05 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
PHP+iframe图片上传实现即时刷新效果
2016/11/18 PHP
Nginx+php配置文件及原理解析
2020/12/09 PHP
动态调用css文件——jquery的应用
2007/02/20 Javascript
javascript 类方法定义还是有点区别
2009/04/15 Javascript
JQuery1.6 使用方法三
2011/11/23 Javascript
JQuery实现点击div以外的位置隐藏该div窗口
2013/09/13 Javascript
jquery ajax跨域解决方法(json方式)
2014/02/04 Javascript
jQuery实现ichat在线客服插件
2014/12/29 Javascript
jQuery实现垂直半透明手风琴特效代码分享
2015/08/21 Javascript
JS显示日历和天气的方法
2016/03/01 Javascript
jquery自适应布局的简单实例
2016/05/28 Javascript
js H5 canvas投篮小游戏
2016/08/18 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
vue 组件开发原理与实现方法详解
2019/11/29 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
python使用arp欺骗伪造网关的方法
2015/04/24 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
2015/12/25 Python
python matplotlib坐标轴设置的方法
2017/12/05 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
增大python字体的方法步骤
2020/07/05 Python
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
技术副厂长岗位职责
2013/12/26 职场文书
五十岁生日宴会答谢词
2014/01/15 职场文书
求职简历自我评价范例
2014/03/12 职场文书
《惊弓之鸟》教学反思
2016/02/20 职场文书
职场中的你,辞职信写对了吗?
2019/06/26 职场文书
「玫瑰之王的葬礼」舞台剧主视觉图公开
2022/03/21 日漫