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(Tornado)模拟登录小米抢手机
Nov 12 Python
python实现的二叉树算法和kmp算法实例
Apr 25 Python
Python简单实现查找一个字符串中最长不重复子串的方法
Mar 26 Python
python opencv检测目标颜色的实例讲解
Apr 02 Python
Python实现的银行系统模拟程序完整案例
Apr 12 Python
Python 通过截图匹配原图中的位置(opencv)实例
Aug 27 Python
解决pycharm 安装numpy失败的问题
Dec 05 Python
Python for循环与getitem的关系详解
Jan 02 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
May 13 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
Jun 11 Python
python模板入门教程之flask Jinja
Apr 11 Python
python神经网络 使用Keras构建RNN训练
May 04 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下使用strpos需要注意 === 运算符
2010/07/17 PHP
php防攻击代码升级版
2010/12/29 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
thinkphp多层MVC用法分析
2015/12/30 PHP
thinkphp框架下实现登录、注册、找回密码功能
2016/04/06 PHP
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
ExtJS4 Grid改变单元格背景颜色及Column render学习
2013/02/06 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
javascript制作坦克大战全纪录(1)
2014/11/27 Javascript
jQuery中fadeOut()方法用法实例
2014/12/24 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
js实现格式化金额,字符,时间的方法
2015/02/26 Javascript
javascript图片滑动效果实现
2021/01/28 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
Vue使用vue-cli创建项目
2017/09/01 Javascript
react基本安装与测试示例
2020/04/27 Javascript
解决vue的router组件component在import时不能使用变量问题
2020/07/26 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
python中__call__内置函数用法实例
2015/06/04 Python
python实现装饰器、描述符
2018/02/28 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
Python StringIO及BytesIO包使用方法解析
2020/06/15 Python
什么是View State?
2013/01/27 面试题
日语翻译个人求职的自我评价
2013/10/14 职场文书
申请任职学生会干部自荐书范文
2014/02/13 职场文书
年度考核自我鉴定
2014/03/19 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
团结演讲稿范文
2014/05/23 职场文书
财产保全担保书
2015/01/20 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python