三分钟搭建支付宝三方支付
为什么使用三方支付?
再没有三方支付平台之前,用户发起支付请求的时候,用户要去和银行签约(转账),特别的不方便,为了解决这些问题,就有了三方支付,三方平台去完成签约,给用户节省时间。
支付宝支付的流程
商户拿到支付宝的公钥、自己的私钥(私钥加密、公钥解密),用私钥请求支付宝,支付宝解密、验签、进行支付处理,支付宝将处理的返回值传给商户,当支付成功后,返还给商户订单号、金额、时间戳等消息,支付失败后同样给商户反馈结果。
配置流程
1、获取APPID
支付宝开放平台:https://open.alipay.com/
- 登录支付宝开放平台–>点击控制台
- 点击沙箱(复制APPID)
2、在线生成密钥
- 点击文档,找到开发助手,点击在线加密。
- 获取私钥
3、获取公钥
- 点击应用公钥
- 生成公钥
现在已经拿到了需要的公钥。
python项目中集成支付宝
- 构建支付类
from datetime import datetime
from Crypto.PublicKey import RSA
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256
from urllib.parse import quote_plus
from base64 import decodebytes, encodebytes
import jsonclass AliPay:"""支付宝支付接口(PC端支付接口)"""def __init__(self, appid, app_notify_url, app_private_key_path,alipay_public_key_path, return_url, debug=False):self.appid = appidself.app_notify_url = app_notify_urlself.app_private_key_path = app_private_key_pathself.app_private_key = Noneself.return_url = return_urlwith open(self.app_private_key_path) as fp:self.app_private_key = RSA.importKey(fp.read())self.alipay_public_key_path = alipay_public_key_pathwith open(self.alipay_public_key_path) as fp:self.alipay_public_key = RSA.importKey(fp.read())if debug is True:self.__gateway = "https://openapi.alipaydev.com/gateway.do"else:self.__gateway = "https://openapi.alipay.com/gateway.do"def direct_pay(self, subject, out_trade_no, total_amount, return_url=None, **kwargs):biz_content = {"subject": subject,"out_trade_no": out_trade_no,"total_amount": total_amount,"product_code": "FAST_INSTANT_TRADE_PAY",}biz_content.update(kwargs)data = self.build_body("alipay.trade.page.pay", biz_content, self.return_url)return self.sign_data(data)def build_body(self, method, biz_content, return_url=None):data = {"app_id": self.appid,"method": method,"charset": "utf-8","sign_type": "RSA2","timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),"version": "1.0","biz_content": biz_content}if return_url is not None:data["notify_url"] = self.app_notify_urldata["return_url"] = self.return_urlreturn datadef sign_data(self, data):data.pop("sign", None)unsigned_items = self.ordered_data(data)unsigned_string = "&".join("{0}={1}".format(k, v) for k, v in unsigned_items)sign = self.sign(unsigned_string.encode("utf-8"))quoted_string = "&".join("{0}={1}".format(k, quote_plus(v)) for k, v in unsigned_items)signed_string = quoted_string + "&sign=" + quote_plus(sign)return signed_stringdef ordered_data(self, data):complex_keys = []for key, value in data.items():if isinstance(value, dict):complex_keys.append(key)for key in complex_keys:data[key] = json.dumps(data[key], separators=(',', ':'))return sorted([(k, v) for k, v in data.items()])def sign(self, unsigned_string):key = self.app_private_keysigner = PKCS1_v1_5.new(key)signature = signer.sign(SHA256.new(unsigned_string))sign = encodebytes(signature).decode("utf8").replace("\n", "")return signdef _verify(self, raw_content, signature):key = self.alipay_public_keysigner = PKCS1_v1_5.new(key)digest = SHA256.new()digest.update(raw_content.encode("utf8"))if signer.verify(digest, decodebytes(signature.encode("utf8"))):return Truereturn Falsedef verify(self, data, signature):if "sign_type" in data:data.pop("sign_type")unsigned_items = self.ordered_data(data)message = "&".join(u"{}={}".format(k, v) for k, v in unsigned_items)return self._verify(message, signature)
- 实例化类
def init_alipay():# 初始化Alipayalipay = AliPay(appid="appid",app_notify_url="回调地址",return_url="回调地址",app_private_key_path="私钥相对路径",alipay_public_key_path="公钥相对路径",debug=True # 支付环境)return alipay
- API
async def get(self):alipay = init_alipay()# 传一个标题 订单号 订单价格params = alipay.direct_pay("三方广告平台", order_no, money)url = f"https://openapi.alipaydev.com/gateway.do?{params}"return self.write(ret_json(url))# 构建一个回调地址,用于支付成功后回调,在回调地址中可以获取订单号(out_trade_no)、金额(total_amount)、时间戳(timestamp),然后进行处理业务逻辑。
总结
支付包有自己的接口文档,以上是我在python环境下配置的,可以直接使用,感谢观看!
三分钟搭建支付宝三方支付相关推荐
- Python只需3分钟即可搭建支付宝三方支付
再没有三方支付平台之前,用户发起支付请求的时候,用户要去和银行签约(转账),特别的不方便,为了解决这些问题,就有了三方支付,三方平台去完成签约,给用户节省时间. 支付宝支付的流程 商户拿到支付宝的公钥 ...
- 函数计算搭建 Serverless Web 应用(三)- 三分钟搭建 Web 应用
简介 阿里云 函数计算(Function Compute) 是事件驱动的全托管计算服务,是阿里云的 Serverless 计算平台.基于函数计算构建应用,您无需管理服务器等基础设施,而是专注于应用逻辑 ...
- 【视觉运控一体机小课堂】三分钟搭建机器视觉开发环境
回顾之前课程正运动技术与大家分享了,VPLC系列机器视觉运动控制一体机快速入门和应用案例等系列课程. 今天,我们来讲解一下正运动技术VPLC系列控制器ZDevelop编程软件如何来建立ZVision软 ...
- 支付宝三方支付——沙箱环境模拟支付
支付宝三方支付--沙箱环境模拟支付 前期配置 代码如下 前期配置 1.创建应用: 打开支付宝官网-- 进入我是开发者,–进入管理中心创建网页&移动应用,–创建成功生成APPID,–在控制台页面 ...
- 三分钟搭建超轻量级开源云平台(Nano)
基于KVM技术,使用Go语言开发,简单易学的虚拟机管理软件,从Web管理门户.主机监控.镜像克隆到故障切换,功能完备,开箱即用,数分钟之内即可将您的服务器集群升级为云主机平台. 快速安装指引 Nano ...
- 使用阿里云服务器三分钟搭建网站教程(详细图文详解)
使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网以搭建WordPress网站博客为例,来详细说下从阿里云服务器CPU内存配置选择.Web环境.域名解 ...
- react安装_「React实战」三分钟搭建React开发环境
其实16年的时候就已经接触到React,那个时候也只是入门,时隔多年,工作上一直都没有接触到相关的业务,不知不觉,前端的天也开始渐变,看到 了很多招聘要求上都是要求会React,三大框架怎么也得熟悉使 ...
- 三分钟搭建开源堡垒机JumpServer
一.简介 前面我们聊到了openvpn的部署和使用,它能够实现从互联网通过openvpn连接到公司内网服务器,从而进行远程管理:但openvpn有一个缺点它不能记录哪些用户在内网服务器上操作了什么,拥 ...
- Android自定义控件开发系列(三)——仿支付宝六位支付密码输入页面
在移动互联领域,有那么几家龙头一直是我等学习和追求的目标,比如支付宝.微信.饿了么.酷狗音乐等等,大神举不胜举,他们设计的界面.交互方式已经培养了中国(有可能会是世界)民众的操作习惯:举个小例子,对话 ...
最新文章
- 模拟红绿灯交替指示编程思路
- retrofit 解析百度地图api 返回数据_阿里二面:关于 Retrofit 你知道多少?看完你的offer稳了
- vb 如何给静态变量赋初值
- unity全栈开发是什么意思_unity游戏公司面试问题总结
- 河北大学计算机复试题,2016年河北大学综合卷计算机科学与技术学院之数据库系统概论复试笔试最后押题五套卷...
- pdfbox java.lang.outofmemoryerror_java - PDFBox 2.0.1挂起渲染pdf页面 - 堆栈内存溢出
- Delphi 打印杨辉三角
- PHP两个日期之间的所有日期
- HDUOJ--汉诺塔II
- Java不满足的依赖异常_java – 新的缺失/不满足的依赖项WildFly 9中的错误
- 【收藏推荐】Markdown常用LaTeX数学符号公式
- 浅谈输入阻抗、输出阻抗和阻抗匹配
- KATEX公式编辑器符号大全-CSDN的Mardown公式支持
- 献给80还有少数90
- Spyder的安装与汉化
- 日语零基础学习 【汇总】日语学习网站
- vue-element-admin 的使用记录(三)
- 工程流体力学笔记暂记7(动量方程)
- linux命令之----fdisk命令-磁盘分区管理工具
- Win10:键盘任一键实现了 “一键开机”