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月前
|
JSON Serverless API
Serverless 应用引擎常见问题之通过SDK修改调度器报错如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
22 0
|
1月前
|
Java 应用服务中间件 开发工具
如何使用支付宝沙箱环境支付并公网调用sdk创建支付单服务
如何使用支付宝沙箱环境支付并公网调用sdk创建支付单服务
|
2月前
|
Java API 开发工具
支付与银行业线上客户协议应用中的DocuSign集成方式选择——SDK和API
跨境支付公司和Docusign进行集成时,碰到问题时的解决方案。分别用SDK和API集成后的各自使用体验。
46 2
支付与银行业线上客户协议应用中的DocuSign集成方式选择——SDK和API
|
3月前
|
搜索推荐 算法 前端开发
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
104 4
美食物管理与推荐系统Python+Django网站开发+协同过滤推荐算法应用【计算机课设项目推荐】
|
2天前
|
JavaScript 前端开发 API
给网站添加一个邮件反馈(django+vue)
给网站添加一个邮件反馈(django+vue)
4 0
|
10天前
|
Python
基于Django的Python应用—学习笔记—功能完善
基于Django的Python应用—学习笔记—功能完善
|
12天前
|
安全 JavaScript Go
跨站脚本攻击(XSS)防护在Django中的应用
【4月更文挑战第15天】本文介绍了Django如何防范XSS攻击。Django模板引擎自动转义HTML以防止恶意脚本,提供`mark_safe`函数和CSRF防护。此外,建议开发者验证清理用户输入、使用内容安全策略、更新库以及遵循安全编码实践来增强防护。通过这些措施,开发者能构建更安全的Web应用。
|
17天前
|
供应链 JavaScript 前端开发
使用Django和Vue实现电子商务网站的后端和前端
【4月更文挑战第10天】本文介绍了使用Django和Vue构建电子商务网站的后端与前端方法。Django作为Python的Web框架负责后端,其模型-视图-控制器设计简化了商品管理、购物车和订单处理。Vue.js用于前端,提供数据驱动和组件化的用户界面。通过定义Django模型和视图处理请求,结合Vue组件展示商品和管理购物车,开发者可构建交互性强的电商网站。虽然实际开发涉及更多细节,但本文为入门提供了基础指导。
|
25天前
|
前端开发 测试技术 数据库
【python】为什么使用python Django开发网站这么火?
【python】为什么使用python Django开发网站这么火?
|
1月前
|
安全 数据库 开发工具
Django实战:从零到一构建安全高效的Web应用
Django实战:从零到一构建安全高效的Web应用
50 0