Django——支付宝支付功能

时间:2021-12-21 22:50:15

前期准备

首先我们需要获得支付宝提供的权限与接口,在蚂蚁开放平台进行相关申请:https://openhome.alipay.com/platform/appDaily.htm?tab=info

申请支付宝账户权限

Django——支付宝支付功能

创建应用

Django——支付宝支付功能

沙箱测试环境

Django——支付宝支付功能

appID:我的身份

支付宝网关:测试环境

获得相关的测试账号

Django——支付宝支付功能

商户账号、客户账号后面可以通过这两个账号来进行测试

沙箱钱包(也可以不下载,直接在网页上登陆测试账号进行支付测试)

Django——支付宝支付功能

在安卓手机上进行安装

获得SDK(pay.py)

就是加密算法

SDK(加密算法,阿里没有提供python版本,从github山获得)

官方

GIHUB(请注意浏览源码)——pay.py(依赖:pip install pycryptodome)

公钥私钥

Django——支付宝支付功能

在这里下载

Django——支付宝支付功能

运行

Django——支付宝支付功能

Django——支付宝支付功能

生成公钥私钥

Django——支付宝支付功能

完成上传

Django——支付宝支付功能

应用公钥上传后自动生成支付宝公钥

在django文件中进行替换成自己的key

Django——支付宝支付功能

django程序

演示

1.运行

2.访问去支付

Django——支付宝支付功能

3.支付页面

Django——支付宝支付功能

4.登陆测试用户,完成支付

Django——支付宝支付功能

Django——支付宝支付功能

最终跳转到

Django——支付宝支付功能

说明功能正常

Django实现

代码结构

Django——支付宝支付功能

views.py

from django.shortcuts import render,redirect,HttpResponse
from django.views.decorators.csrf import csrf_exempt
from utils.pay import AliPay
import time
from django.conf import settings def aliPay():
obj = AliPay(
appid=settings.APPID,
app_notify_url=settings.NOTIFY_URL, # 如果支付成功,支付宝会向这个地址发送POST请求(校验是否支付已经完成)
return_url=settings.RETURN_URL, # 如果支付成功,重定向回到你的网站的地址。
alipay_public_key_path=settings.PUB_KEY_PATH, # 支付宝公钥
app_private_key_path=settings.PRI_KEY_PATH, # 应用私钥
debug=True, # 默认False,
)
return obj def index(request):
if request.method == 'GET':
return render(request,'index.html') alipay = aliPay() # 对购买的数据进行加密
money = float(request.POST.get('price'))
out_trade_no = "x2" + str(time.time())
# 1. 在数据库创建一条数据:状态(待支付) query_params = alipay.direct_pay(
subject="充气式韩红", # 商品简单描述
out_trade_no= out_trade_no, # 商户订单号
total_amount=money, # 交易金额(单位: 元 保留俩位小数)
) pay_url = "https://openapi.alipaydev.com/gateway.do?{}".format(query_params) return redirect(pay_url) def pay_result(request):
"""
支付完成后,跳转回的地址
:param request:
:return:
"""
params = request.GET.dict()
sign = params.pop('sign', None) alipay = aliPay() status = alipay.verify(params, sign) if status:
return HttpResponse('支付成功')
return HttpResponse('支付失败') @csrf_exempt
def update_order(request):
"""
支付成功后,支付宝向该地址发送的POST请求(用于修改订单状态)
:param request:
:return:
"""
if request.method == 'POST':
from urllib.parse import parse_qs body_str = request.body.decode('utf-8')
post_data = parse_qs(body_str) post_dict = {}
for k, v in post_data.items():
post_dict[k] = v[0] alipay = aliPay() sign = post_dict.pop('sign', None)
status = alipay.verify(post_dict, sign)
if status:
# 修改订单状态
out_trade_no = post_dict.get('out_trade_no')
print(out_trade_no)
# 2. 根据订单号将数据库中的数据进行更新
return HttpResponse('支付成功')
else:
return HttpResponse('支付失败')
return HttpResponse('')

settings.py

# 支付相关配置
APPID = "2016082500309412"
NOTIFY_URL = "http://47.106.237.76:80/update_order/"
RETURN_URL = "http://47.106.237.76:80/pay_result/"
PRI_KEY_PATH = "keys/app_private_2048.txt"
PUB_KEY_PATH = "keys/alipay_public_2048.txt"

Django——支付宝支付功能的更多相关文章

  1. django中使用事务以及接入支付宝支付功能

    之前一直想记录一下在项目中使用到的事务以及支付宝支付功能,自己一直犯懒没有完,趁今天有点兴致,在这记录一下. 商城项目必备的就是支付订单的功能,所以就会涉及到订单的保存以及支付接口的引入.先来看看订单 ...

  2. laravel实现支付宝支付功能

    起因 前段时间因为项目中需要实现支付宝手机网站支付功能,所以写下这篇文章以作记录,不足之处,欢迎指教. 后端框架:Laravel 5.5 业务功能 适用于商家在移动端网页应用中集成支付宝支付功能.商家 ...

  3. 支付宝支付功能(使用支付宝sdk)

    1.准备参数        新建一个公共参数配置类NewAlipayconfig (可将参数存放到config配置文件中读取)          public class NewAlipayconfi ...

  4. SSM 实现支付宝支付功能(图文详解+完整代码)

    阅读本文大概需要 4 分钟. 前言 本教程详细介绍了如何使用ssm框架实现支付宝支付功能.本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释, ...

  5. django支付宝支付集成

    概要 本文是关于django集成支付宝[电脑网站支付]功能的过程记录. 功能逻辑主要分为两块: 用户下单跳转至支付宝支付界面 支付成功的回调验证 本文用到的alipay-sdk是基于阿里开发文档htt ...

  6. ThinkPHP接入支付宝支付功能

    最近做系统,需要实现在线支付功能,毫不犹豫,选择的是支付宝的接口支付功能.这里我用的是即时到帐的接口,具体实现的步骤如下: 一.下载支付宝接口包 下载地址:https://b.alipay.com/o ...

  7. mui实现支付宝支付功能

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>H ...

  8. ThinkPHP5&period;0 实现 app支付宝支付功能

    前几天做项目,要求要用到支付宝接口,第一次做,弄了好几天 各种坑啊,简单写一下我做支付宝支付的过程,希望对也是第一次做支付宝支付的童鞋有帮助, 不懂的可以先去支付平台看一下支付宝支付的文档,我是下的d ...

  9. &dollar;Django 支付宝支付&comma;微信服务号推送消息 &lpar;测试需要把应用程序部署到服务器上&rpar;

    一 支付宝支付 大概 支付宝支付 正式环境:需要用营业执照去申请商户号,appid 测试环境:沙箱环境:https://openhome.alipay.com/platform/appDaily.ht ...

随机推荐

  1. PHP替代正则匹配的高效函数

    strpos() - 查找字符串首次出现的位置 strrpos() 函数查找字符串在另一字符串中最后一次出现的位置(区分大小写). strripos() 函数查找字符串在另一字符串中最后一次出现的位置 ...

  2. Linuxshell脚本之if条件判断

    IF条件判断 .基本语法: if [ command ]; then 符合该条件执行的语句 fi .扩展语法: if [ command ];then 符合该条件执行的语句 elif [ comman ...

  3. CQRS架构

    CQRS架构 命令查询的责任分离Command Query Responsibility Segregation (简称CQRS)模式是一种架构体系模式,能够使改变模型的状态的命令和模型状态的查询实现 ...

  4. 清浮动,防止上下margin重叠(浏览器顶部空白崩溃)

    清浮动 父级添加类别! .clearfix{zoom:1;//兼容ie6,7} .clearfix:after{ content:"."; display: "block ...

  5. &lbrack;51nod1357&rsqb;密码锁

    有一个密码锁,其有N位,每一位可以是一个0~9的数字,开启密码锁需要将锁上每一位数字转到解锁密码一致.这个类似你旅行用的行李箱上的密码锁,密码锁的每一位其实是一个圆形转盘,上面依次标了0,1,...9 ...

  6. Socket 聊天工具

    package cn.davy.mychat; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FontD ...

  7. Confluence 6 下载和安装 Oracle thin 驱动

    基于许可证的考虑,我们不能将 Oracle 的驱动捆绑到 Confluence 中.如果你希望你的 Confluence 能够连接到 Oracle 数据库,你需要: 停止 Confluence. 进入 ...

  8. djiango web 在进入admin的时候出现&&num;39&semi;set&&num;39&semi; object is not reversible错误

    解决方案是在你的urls.py 中 把{ } 改为[] 原因不详 治标不治本,并不能改的东西

  9. 60行代码:Javascript 写的俄罗斯方块游戏

    哈哈这个实在是有点意思 备受打击当初用java各种类写的都要几百行啦 先看效果图: 游戏结束图: javascript实现源码: [javascript] view plaincopyprint? & ...

  10. 关于dll的pdb文件的小贴士

    .pdb文件最好与生成它的.dll文件放在一起,这样调试的时候才有可能跟踪进dll的内部函数里.