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中使用中文的方法
Feb 19 Python
python多进程操作实例
Nov 21 Python
在Python的Tornado框架中实现简单的在线代理的教程
May 02 Python
Python中有趣在__call__函数
Jun 21 Python
利用python求相邻数的方法示例
Aug 18 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
python中的tcp示例详解
Dec 09 Python
python自动循环定时开关机(非重启)测试
Aug 26 Python
Python2与Python3的区别详解
Feb 09 Python
Python3 字典dictionary入门基础附实例
Feb 10 Python
python自动下载图片的方法示例
Mar 25 Python
Python3实现飞机大战游戏
Apr 24 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版网站缓存加快打开速度的方法分享
2012/06/03 PHP
Symfony核心类概述
2016/03/17 PHP
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
jquery一句话全选/取消全选
2011/03/01 Javascript
jQuery中的jQuery()方法用法分析
2014/12/27 Javascript
原生js和jquery实现图片轮播淡入淡出效果
2015/04/23 Javascript
Uploadify上传文件方法
2016/03/16 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
Vue中render方法的使用详解
2018/01/26 Javascript
vue+element-ui动态生成多级表头的方法
2018/08/28 Javascript
关于单文件组件.vue的使用
2018/09/20 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
解决vue admin element noCache设置无效的问题
2019/11/12 Javascript
Vue退出登录时清空缓存的实现
2019/11/12 Javascript
python将人民币转换大写的脚本代码
2013/02/10 Python
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
总结Python编程中函数的使用要点
2016/03/20 Python
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
python用列表生成式写嵌套循环的方法
2018/11/08 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
印尼购物网站:iLOTTE
2019/10/16 全球购物
总经理司机岗位职责
2014/02/06 职场文书
学生生病请假条范文
2014/02/16 职场文书
人资专员岗位职责
2014/04/04 职场文书
舞蹈专业求职信
2014/06/13 职场文书
委托书怎么写
2014/07/31 职场文书
2014领导干部四风问题查摆思想汇报
2014/09/13 职场文书
护士医德医风自我评价
2014/09/15 职场文书
创业计划书之酒店
2019/08/30 职场文书
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript
Android实现获取短信验证码并自动填充
2023/05/21 Java/Android