Django使用支付宝SDK完整网站应用支付。

简介: Django使用支付宝SDK完整网站应用支付。

一、初始工作

首先注册一个沙箱,获取测试用的商家与买家账户以及app_id和各种公私钥。

直接pip安装支付宝的SDK,我用的django是4.2版本,最新版。


二、简化代码

支付宝SDK提供的实例是直接可以用,简化一下去除不必要的导入:

#!/usr/bin/env python# -*- coding: utf-8 -*-importloggingfromalipay.aop.api.AlipayClientConfigimportAlipayClientConfigfromalipay.aop.api.DefaultAlipayClientimportDefaultAlipayClientfromalipay.aop.api.domain.AlipayTradePagePayModelimportAlipayTradePagePayModelfromalipay.aop.api.request.AlipayTradePagePayRequestimportAlipayTradePagePayRequest# 应用私钥、支付宝公钥fromuser.pay.alipay_keysimportALIPAY_PUBLIC_KEY, APP_PRIVATE_KEY, APP_ID, APP_GATEWAYlogging.basicConfig(
level=logging.INFO,
format='%(asctime)s %(levelname)s %(message)s',
filemode='a', )
logger=logging.getLogger('')
classAlipayClient:
def__init__(self):
alipay_client_config=AlipayClientConfig()
alipay_client_config.server_url=APP_GATEWAYalipay_client_config.app_id=APP_IDalipay_client_config.app_private_key=APP_PRIVATE_KEYalipay_client_config.alipay_public_key=ALIPAY_PUBLIC_KEYself.client=DefaultAlipayClient(alipay_client_config=alipay_client_config, logger=logger)
defcreate_alipay(self, out_trade_on, amount, subject, body, time_expire):
"""        out_trade_on:订单号        amount:价格        subject: 标题        body: 描述        """# 对照接口文档,构造请求对象model=AlipayTradePagePayModel()
# 商户订单model.out_trade_no=out_trade_on# 订单总金额,单位为元,精确到小数点后两位model.total_amount=amount# 标题model.subject=subject# 超时5分钟model.time_expire=time_expire# 商品描述model.body=bodymodel.product_code="FAST_INSTANT_TRADE_PAY"request=AlipayTradePagePayRequest(biz_model=model)
request.notify_url="https://www.***.cn/user/verify/"request.return_url="https://www.***.cn/user/profile/"# 得到构造的请求,如果http_method是GET,则是一个带完成请求参数的url,如果http_method是POST,则是一段HTML表单片段response=self.client.page_execute(request, http_method="GET")
returnresponse

公共参数里面传入公私钥,应用id和支付宝网关即可,请求体里面我们只需要,准备订单号,价格,标题即可,描述可有可无,请求方式我选的是GET,就是直接跳转到支付宝付款页面。


三、创建订单

我们在其他视图可以直接是实例化,然后调用create_alipay方法

client=AlipayClient()
resp=client.create_alipay(out_trade_on=order_id, amount=amount, subject=subject, body=body, time_expire=time_expire)

支付成功之后,如果不关闭支付宝页面会自动跳转到return_url填写的地址然后携带一系列参数,然后同样的参数还会以POST的形式请求到notify_url填写的地址,然后我们需要在notify_url这个地址进行验签,就是判断用户是否真正支付成功。


三、支付验签

验签使用支付宝SDK里面的:verify_with_rsa方法

fromalipay.aop.api.util.SignatureUtilsimportverify_with_rsa

verify_with_rsa:接受三个参数(支付宝公钥,message,sign)

message就是POST传过来的所有参数,sign包含在里面,将POST所有参数组合成字典的形式,将sign和sign_type提取出来,不能留在字典中,剩下的就是message,然后传递给verify_with_rsa,返回True就是验签成功,表示支付成功。


四、组合参数

这是我写的组合message的函数,可直接用:

defget_dic_sorted_params(org_dic_params):
content=''org_dic_params.pop('sign')
org_dic_params.pop('sign_type')  # 去除sign、sigh_typenew_list=sorted(org_dic_params, reverse=False)  # 待验签参数进行排序foriinnew_list:
p=i+'='+org_dic_params.get(i) +'&'content+=psorted_params=content.strip('&')  # 重组字符串,将{k:v}形式的字典类型原始响应值--》转换成'k1=v1&k2=v2'形式的字符串格式returnsorted_params

到这里支付宝电脑支付就完成了。

目录
相关文章
|
1月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
64 1
|
24天前
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
34 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
|
22天前
|
移动开发 安全 API
微信H5支付--微信JS-SDK支付--点金计划
本文详细介绍了微信H5支付和JS-SDK支付的原理、配置和开发流程,涵盖了H5支付在移动端浏览器外唤起微信支付的细节,以及JS-SDK支付在微信内置浏览器中完成支付的相关注意事项。文章还针对微信支付常见问题,提供了解决方案和代码示例。最后,文章深入解析了微信支付点金计划,包括商家小票的自定义开发、API接口以及支付成功后的页面展示逻辑,为开发者提供了完整的开发参考。
22 0
微信H5支付--微信JS-SDK支付--点金计划
|
25天前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
96 0
|
25天前
|
存储 开发框架 JSON
【查漏补缺】Django模型字段类型及其应用
【查漏补缺】Django模型字段类型及其应用
14 0
|
26天前
|
存储 安全 UED
GitHub OAuth认证的Django应用
GitHub OAuth认证的Django应用
21 0
|
27天前
|
Python
基于python-django的matlab护照识别网站系统
基于python-django的matlab护照识别网站系统
14 0
|
27天前
|
安全 Java Python
基于python-django的Java网站全站漏洞检测系统
基于python-django的Java网站全站漏洞检测系统
30 0
|
3月前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
102 0
|
3月前
|
中间件 数据库连接 UED
Django中间件秘籍:如何用几行代码让你的应用变得超级强大?
【8月更文挑战第31天】中间件是Django框架的核心特性,位于视图与HTTP服务器之间,允许全局处理请求和响应,增强Web应用功能。通过实现`MiddlewareMixin`类的方法,如`process_request`和`process_response`,可以轻松实现请求预处理或响应后处理。中间件应用场景广泛,包括用户认证、CSRF防护和数据库连接管理等。创建并配置中间件需将其加入`settings.py`的`MIDDLEWARE`列表,顺序决定执行优先级。合理利用中间件能提高代码重用性和应用性能,带来更好的用户体验。
51 0