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发送邮件实例
Jan 10 Python
谈谈python中GUI的选择
Mar 01 Python
对python requests的content和text方法的区别详解
Oct 11 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
Apr 11 Python
简单了解Python matplotlib线的属性
Jun 29 Python
Flask配置Cors跨域的实现
Jul 12 Python
python飞机大战pygame游戏之敌机出场实现方法详解
Dec 17 Python
dpn网络的pytorch实现方式
Jan 14 Python
Python计算公交发车时间的完整代码
Feb 12 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
Python实现一个简单的毕业生信息管理系统的示例代码
Jun 08 Python
Python函数参数定义及传递方式解析
Jun 10 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 反向排序和随机排序代码
2010/06/30 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
2011/08/11 PHP
PHP中使用cURL实现Get和Post请求的方法
2013/03/13 PHP
ThinkPHP分页实例
2014/10/15 PHP
yii使用activeFileField控件实现上传文件与图片的方法
2015/12/28 PHP
PHP文件类型检查及fileinfo模块安装使用详解
2019/05/09 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
在线编辑器的实现原理(兼容IE和FireFox)
2007/03/09 Javascript
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
浏览器脚本兼容 文本框中,回车键触发事件的兼容
2010/06/21 Javascript
jQuery的text()方法用法分析
2014/12/20 Javascript
jQuery中replaceAll()方法用法实例
2015/01/16 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
分享自己用JS做的扫雷小游戏
2016/02/17 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
javascript中使用未定义变量或值的情况分析
2016/07/19 Javascript
jQuery使用正则表达式替换dom元素标签用法示例
2017/01/16 Javascript
浅谈关于angularJs中使用$.ajax的注意点
2017/08/12 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
JavaScript实现随机五位数验证码
2019/09/27 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
Python中调用其他程序的方式详解
2019/08/06 Python
基于Python第三方插件实现西游记章节标注汉语拼音的方法
2020/05/22 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
Python eval函数原理及用法解析
2020/11/14 Python
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
美国知名户外用品畅销中心:Sierra Trading Post
2016/07/19 全球购物
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
巴西购物网站:Onofre Agora
2020/06/08 全球购物
运动会加油稿100字
2014/09/19 职场文书
2015年高校图书馆工作总结
2015/04/30 职场文书
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL