安装python-alipay-sdk

pip install python-alipay-sdk --upgrade
pip install crypto

如果是python 2.7安装0.6.4这个版本

pip install python-alipay-sdk==1.5.0

原理介绍:

  1.进行秘钥配置,因为传输的数据必须要进行签名加密,ubuntu内置命令openssl可以生成私钥,根据私钥生成公钥

  openssl
  OpenSSL> genrsa -out app_private_key.pem   2048  # 私钥 2048对应的是rsa加密时候的复杂程度,即rsa2
  OpenSSL> rsa -in app_private_key.pem -pubout -out app_public_key.pem # 导出公钥
  OpenSSL> exit

  2.cat app_publict_key.pem 查看公钥的内容

  将-----BEGIN PUBLIC KEY-----和-----END PUBLIC KEY-----中间的内容保存在支付宝的用户配置中(沙箱或者正式)

https://openhome.alipay.com/platform/appDaily.htm?tab=info

  3.配置好公钥后,支付宝会生成公钥,将公钥的内容复制保存到一个文本文件中(alipay_pubilc_key.pem),注意需要在文本的首尾添加标记位(-----BEGIN   PUBLIC KEY-----和-----END PUBLIC KEY-----)

  4.将刚刚生成的私钥app_private_key.pem和支付宝公钥alipay_public_key.pem放到我们的项目目录中

  5.使用支付宝 python包的初始化

  6.调用支付接口

  https://docs.open.alipay.com/270/alipay.trade.page.pay/

  7.获取支付结果接口

  https://docs.open.alipay.com/api_1/alipay.trade.query

代码部分:

1.整个项目架构

index.html代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="static/js/jquery-1.4.2.min.js"></script>
<script>
$(function () {
$('#btn').click(function () {
var order_id = "";
var req_data = {
order_id: order_id,
csrfmiddlewaretoken: "{{ csrf_token }}"
};
$.post("/pay/", req_data, function (data) {
window.open(data.url)
});
$.get("/check_pay/?order_id=" + order_id, function (data) {
if (0 == data.code) {
// 支付成功
alert("支付成功");
location.reload();
} else {
alert(data.message)
}
})
})
})
</script>
</head>
<body>
<input type="button" id="btn" value="支付">
</body>
</html>

2.AppTest.views.py代码

#coding:utf-8
from django.shortcuts import render from django.shortcuts import render
from django.http import JsonResponse
from alipay import AliPay
import os
from django.conf import settings def index(request):
return render(request, "index.html",locals()) def pay(request):
order_id = request.POST.get("order_id")
# 创建用于进行支付宝支付的工具对象
alipay = AliPay(
appid=settings.ALIPAY_APPID,
app_notify_url=None, # 默认回调url
app_private_key_path=os.path.join(settings.BASE_DIR, "AppTest/app_private_key.pem"),
alipay_public_key_path=os.path.join(settings.BASE_DIR, "AppTest/alipay_public_key.pem"),
# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
sign_type="RSA2", # RSA 或者 RSA2
debug=True # 默认False 配合沙箱模式使用
) # 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
order_string = alipay.api_alipay_trade_page_pay(
out_trade_no=order_id,
total_amount=str(0.01), # 将Decimal类型转换为字符串交给支付宝
subject="测试订单",
return_url="https://example.com",
notify_url="https://example.com/notify" # 可选, 不填则使用默认notify url
) # 让用户进行支付的支付宝页面网址
url = settings.ALIPAY_URL + "?" + order_string return JsonResponse({"code": 0, "message": "请求支付成功", "url": url}) def check_pay(request):
# 创建用于进行支付宝支付的工具对象
order_id = request.GET.get("order_id")
alipay = AliPay(
appid=settings.ALIPAY_APPID,
app_notify_url=None, # 默认回调url
app_private_key_path=os.path.join(settings.BASE_DIR, "AppTest/app_private_key.pem"),
alipay_public_key_path=os.path.join(settings.BASE_DIR, "AppTest/alipay_public_key.pem"),
# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
sign_type="RSA2", # RSA2,官方推荐,配置公钥的时候能看到
debug=True # 默认False 配合沙箱模式使用
) while True:
# 调用alipay工具查询支付结果
response = alipay.api_alipay_trade_query(order_id) # response是一个字典
# 判断支付结果
code = response.get("code") # 支付宝接口调用成功或者错误的标志
trade_status = response.get("trade_status") # 用户支付的情况 if code == "" and trade_status == "TRADE_SUCCESS":
# 表示用户支付成功
# 返回前端json,通知支付成功
return JsonResponse({"code": 0, "message": "支付成功"}) elif code == "" or (code == "" and trade_status == "WAIT_BUYER_PAY"):
# 表示支付宝接口调用暂时失败,(支付宝的支付订单还未生成) 后者 等待用户支付
# 继续查询
print(code)
print(trade_status)
continue
else:
# 支付失败
# 返回支付失败的通知
return JsonResponse({"code": 1, "message": "支付失败"})
# Create your views here.

3.主urls.py

from django.conf.urls import include, url
from django.contrib import admin urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('AppTest.urls')),
]

4.AppTest urls.py

from django.conf.urls import include, url
from views import * urlpatterns = [
url(r"^$", index),
url(r"^pay/$", pay),
url(r"^check_pay/$", check_pay),
]

5.setttings.py中设置

修改templates部分

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(BASE_DIR,"template").replace("\\","/")
],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

末尾加入

STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")] # 支付宝配置参数
ALIPAY_APPID = ""
ALIPAY_URL = "https://openapi.alipay.com/gateway.do"

测试效果:

返回结果

https://example.com/?total_amount=0.01&timestamp=2018-01-06+21%3A28%3A38&sign=fg19hD85DPPuN1aaI%2B%2BskuomKUxaDGE%2FdvyttEyV3vubVkVvBDXVziZaGybXqZs5o4bXYojx587qNBb8e%2FjAJOBCwKwYZxd7qR3AKlVabkPDzEOlzvEaSW7HTQpsWsVeX6BW%2ByEO8pWQ8c%2BS8B8tS8a8AFtQxeW92as4hdNjQU2YBZ2SVxtKSohWbFWpny1gDWXinQ3y2HNo4t5lmA8fRknB0MaUPwR1SzWa0k%2BylYjpWEnzC6OihP0Er21Ad8fiUwtSxZqH4xIAhnbofAy%2BHYZZVsv5lYg%2Brb87eM6Yz7xwUe5v5dDEoz%2FOLjsuB0GDRTdvhHqs39cGIoMXFfEpbw%3D%3D&trade_no=2018010621001004260217512776&sign_type=RSA2&auth_app_id=2017072407880788&charset=utf-8&seller_id=2088221936946848&method=alipay.trade.page.pay.return&app_id=2017072407880788&out_trade_no=20180105002&version=1.0

Python Django 支付宝 扫码支付的更多相关文章

  1. 记录:c#实现微信,支付宝扫码支付(一)

    因为公司系统业务需要,这几天了解了一下微信和支付宝扫码支付的接口,并用c#实现了微信和支付宝扫码支付的功能. 微信支付分为6种支付模式:1.付款码支付,2.native支付,3.jsapi支付,4.a ...

  2. Spring使用支付宝扫码支付

    前一段一直在研究支付宝的扫码支付,不得不说,支付宝的文档写的真是一个烂(起码在下刚开始看的时候是mengbi的).文档上面的示例和demo里面的示例长的完全不一样.往往文档上面的例子很简单,而demo ...

  3. PHP PC端支付宝扫码支付

    前面的文章已经描述过在蚂蚁金服开放平台创建应用签约等流程,详见:PHP App端支付宝支付,这里就不多说了,剩下的分两步,第一步是支付前的准备工作,也就是整合支付类文件,我已经整合好可以直接用,代码开 ...

  4. .NET Core2.0 环境下MVC模式的支付宝扫码支付接口-沙箱环境开发测试

    所有配置以及相关信息均可以从PC支付中获取 使用的生成二维码的组件名为QRCoder,该组件引用了一个第三方实现的System.Drawing类库,和支付宝官网类似 当面付SDK为Alipay.Aop ...

  5. Python实现微信扫码支付模式二(NativePay)

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/7649207.html 核心代码github地址:https://github.com/ygj0930/Pyth ...

  6. DUMP4 企业级电商项目 —— 对接支付宝扫码支付

    延展 <谈谈微信支付曝出的漏洞> [联调 DEMO下载地址]https://docs.open.alipay.com/194/105201/ [内置 一份 说明文档可做参考] [impor ...

  7. laravel5集成支付宝alipay扫码支付流程(Laravel 支付解决方案)

    首先我们来探讨如何在Laravel应用中使用支付宝进行支付,对此,GitHub上有很多相关的包,其中最流行的两个包:Omnipay For Laravel 5 & Lumen 和 Larave ...

  8. 微信扫码支付PHP接入总结

    微信扫码支付分为两种模式, 模式一比较复杂,需要公众号配置回调地址. 模式二比较简单,只需要在代码中配置回调地址就可以了. 我这次使用的是模式二. 需要配置参数, const APPID = 'xxx ...

  9. PC、h5项目接入第三方支付宝扫码登录、扫码付款

    首先介绍一下pc项目接入支付宝扫码支付. 1.pc.移动接入支付宝扫码支付. 其实这个逻辑很简单,前端所需要处理的不是很多,后台会给一个连接,前端只需要将要支付的订单id拼接在这个连接上,然后打开跳转 ...

随机推荐

  1. Python3 面向对象进阶1

    目录 组合 概念 目的 实现方式 封装 概念 目的 实现方式 访问限制 概念 目的 实现方式 property 概念 目的 实现方式 多态 概念 目的 抽象类 概念 目的 实现方法 鸭子类型 组合 概 ...

  2. 【搞定Jvm面试】 JVM 垃圾回收揭秘附常见面试题解析

    JVM 垃圾回收 写在前面 本节常见面试题 问题答案在文中都有提到 如何判断对象是否死亡(两种方法). 简单的介绍一下强引用.软引用.弱引用.虚引用(虚引用与软引用和弱引用的区别.使用软引用能带来的好 ...

  3. 【Java Web开发学习】Spring加载外部properties配置文件

    [Java Web开发学习]Spring加载外部properties配置文件 转载:https://www.cnblogs.com/yangchongxing/p/9136505.html 1.声明属 ...

  4. vue bus.js 使用方法

    1 ,新建bus.js 内容如下 2,bus.$emit 绑定数据 bus.$emit('tags', this.tagsList); 第一个参数为定义的变量,第二个为集合数据 3, 监听数据 bus ...

  5. Centos6.5 Intel X722 编译安装网卡驱动

    1,编译环境准备,安装好kernel-devl ,kenel-headers等; 注意: 一定要注意kernel 的内核,一定要保持被安装的机器与编译的内核保持一致; 下载驱动地址:https://d ...

  6. Android WebView 加载富文本内容

    WebView加载数据的方式有两种: 1. webView.loadUrl(data);//加载url 2. webView.loadDataWithBaseURL(null,data, " ...

  7. selenium的安装、报错和解决

      selenium是的作用是模拟点击浏览器上的按钮,配合一个无头浏览器就可以快速解决一些前端需要加解密的功能. 第一步pip install selenium安装的第一步就是用pip把模块下载回来. ...

  8. windows 安装xps查看器; windows 10 安装 xps viewer

    最近发现windows 默认是没有xps 查看器的,需要自己手动添加: 安装完成后,即可使用: 参考链接:https://www.windowscentral.com/how-get-xps-view ...

  9. 【1】基于OpenCV的DLL动态库隐式连接

    1DLL的作用 DLL是一个包含可由多个程序同时使用的代码和数据的库.例如:在Windows操作系统中,Comdlg32 DLL执行与对话框有关的常见函数.因此,每个程序都可以使用该DLL中包含的功能 ...

  10. Python爬虫基础——正则表达式

    说到爬虫,不可避免的会牵涉到正则表达式. 因为你需要清晰地知道你需要爬取什么信息?它们有什么共同点?可以怎么去表示它们? 而这些,都需要我们熟悉正则表达,才能更好地去提取. 先简单复习一下各表达式所代 ...