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实现的阳历转阴历(农历)算法
Apr 25 Python
Python中的Matplotlib模块入门教程
Apr 15 Python
python实现从网络下载文件并获得文件大小及类型的方法
Apr 28 Python
Python文件操作基本流程代码实例
Dec 11 Python
Django如何防止定时任务并发浅析
May 14 Python
Python3 文章标题关键字提取的例子
Aug 26 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
Dec 03 Python
利用pandas将非数值数据转换成数值的方式
Dec 18 Python
在keras中获取某一层上的feature map实例
Jan 24 Python
利用Vscode进行Python开发环境配置的步骤
Jun 22 Python
教你使用Python pypinyin库实现汉字转拼音
May 27 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
咖啡豆分级制度 咖啡豆等级分类 咖啡豆是按口感分类的吗?
2021/03/05 新手入门
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
2008/11/18 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
PHP超牛逼无限极分类生成树方法
2015/05/11 PHP
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
php防止网站被攻击的应急代码
2015/10/21 PHP
Yii框架上传图片用法总结
2016/03/28 PHP
Laravel中Facade的加载过程与原理详解
2017/09/22 PHP
jQuery不间断滚动效果(模拟百度新闻支持文字/图片/垂直滚动)
2013/02/05 Javascript
JavaScript中的运算符种类及其规则介绍
2013/09/26 Javascript
通过jquery 获取URL参数并进行转码
2014/08/18 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
AngularJS中的API(接口)简单实现
2016/07/28 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
express + jwt + postMan验证实现持久化登录
2019/06/05 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
vue界面发送表情的实现代码
2020/09/11 Javascript
[01:01:25]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第三局
2016/02/27 DOTA
关于Python如何避免循环导入问题详解
2017/09/14 Python
python提取log文件内容并画出图表
2019/07/08 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
Pycharm 2019 破解激活方法图文详解
2019/10/11 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
Python使用matplotlib绘制圆形代码实例
2020/05/27 Python
通过实例简单了解Python sys.argv[]使用方法
2020/08/04 Python
Pycharm快捷键配置详细整理
2020/10/13 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
文明礼貌演讲稿
2014/05/12 职场文书
终止合同协议书范本
2016/03/22 职场文书
比较node.js和Deno
2021/04/27 Javascript
Python OpenCV 图像平移的实现示例
2021/06/04 Python