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检测QQ在线状态的方法
May 09 Python
在Django的URLconf中使用命名组的方法
Jul 18 Python
Python查看微信撤回消息代码
Jun 07 Python
解决Python print 输出文本显示 gbk 编码错误问题
Jul 13 Python
如何利用Python分析出微信朋友男女统计图
Jan 25 Python
python实现雪花飘落效果实例讲解
Jun 18 Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 Python
Python爬虫库BeautifulSoup获取对象(标签)名,属性,内容,注释
Jan 25 Python
解决pycharm中导入自己写的.py函数出错问题
Feb 12 Python
python实现全排列代码(回溯、深度优先搜索)
Feb 26 Python
Python非单向递归函数如何返回全部结果
Dec 18 Python
Python下opencv库的安装过程及问题汇总
Jun 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
教你如何把一篇文章按要求分段
2006/10/09 PHP
PHP 高手之路(一)
2006/10/09 PHP
PHP Ajax实现页面无刷新发表评论
2007/01/02 PHP
php empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
PHP实现的简易版图片相似度比较
2015/01/07 PHP
Javascript中的常见排序算法
2007/03/27 Javascript
javascript中注册和移除事件的4种方式
2013/03/20 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
Python脚本后台运行的几种方式
2015/03/09 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
JQuery操作textarea,input,select,checkbox方法
2015/09/02 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
浅谈layui 数据表格前后台传值的问题
2019/09/12 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
[01:02:03]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS VG
2014/05/26 DOTA
[01:11:35]Liquid vs LGD 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[59:35]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第一场 1月8日
2021/03/11 DOTA
Python进阶篇之字典操作总结
2016/11/16 Python
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
2020/11/28 Python
美国在线精品家居网站:Burke Decor
2017/04/12 全球购物
eBay比利时购物网站:eBay.be
2019/08/09 全球购物
New Balance俄罗斯官方网上商店:购买运动鞋
2020/03/02 全球购物
中科方德软件测试面试题
2016/04/21 面试题
英文版销售经理个人求职信
2013/11/20 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
特教教师先进事迹
2014/05/21 职场文书