千家信息网

python如何搭建支付宝三方支付

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章将为大家详细讲解有关python如何搭建支付宝三方支付,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。为什么使用三方支付?  再没有三方支付平台之前,用户发起
千家信息网最后更新 2025年11月07日python如何搭建支付宝三方支付

这篇文章将为大家详细讲解有关python如何搭建支付宝三方支付,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

为什么使用三方支付?

  再没有三方支付平台之前,用户发起支付请求的时候,用户要去和银行签约(转账),特别的不方便,为了解决这些问题,就有了三方支付,三方平台去完成签约,给用户节省时间。

支付宝支付的流程

  商户拿到支付宝的公钥、自己的私钥(私钥加密、公钥解密),用私钥请求支付宝,支付宝解密、验签、进行支付处理,支付宝将处理的返回值传给商户,当支付成功后,返还给商户订单号、金额、时间戳等消息,支付失败后同样给商户反馈结果。

配置流程

1、获取APPID

支付宝开放平台:https://open.alipay.com/

登录支付宝开放平台->点击控制台

点击沙箱(复制APPID)

2、在线生成密钥

点击文档,找到开发助手,点击在线加密。

获取私钥

3、获取公钥

点击应用公钥

生成公钥

现在已经拿到了需要的公钥。

python项目中集成支付宝

构建支付类

from datetime import datetimefrom Crypto.PublicKey import RSAfrom Crypto.Signature import PKCS1_v1_5from Crypto.Hash import SHA256from urllib.parse import quote_plusfrom base64 import decodebytes, encodebytesimport jsonclass AliPay:    """    支付宝支付接口(PC端支付接口)    """    def __init__(self, appid, app_notify_url, app_private_key_path,                 alipay_public_key_path, return_url, debug=False):        self.appid = appid        self.app_notify_url = app_notify_url        self.app_private_key_path = app_private_key_path        self.app_private_key = None        self.return_url = return_url        with open(self.app_private_key_path) as fp:            self.app_private_key = RSA.importKey(fp.read())        self.alipay_public_key_path = alipay_public_key_path        with 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_url            data["return_url"] = self.return_url        return data    def 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_string    def 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_key        signer = PKCS1_v1_5.new(key)        signature = signer.sign(SHA256.new(unsigned_string))        sign = encodebytes(signature).decode("utf8").replace("\n", "")        return sign    def _verify(self, raw_content, signature):        key = self.alipay_public_key        signer = PKCS1_v1_5.new(key)        digest = SHA256.new()        digest.update(raw_content.encode("utf8"))        if signer.verify(digest, decodebytes(signature.encode("utf8"))):            return True        return False    def 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():    # 初始化Alipay    alipay = 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如何搭建支付宝三方支付"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

支付 三方 公钥 平台 商户 地址 订单 时间 用户 篇文章 订单号 处理 成功 接口 更多 流程 路径 金额 utf-8 加密 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 做测绘数据库建立用什么电脑 怎么设计网络安全论文 网络技术应用 域名 数据库取值sql语句 阿里服务器软件打不开网页 乐富网络技术有限公司 命令用于检测服务器连接是否正常 遵守网络安全法发言稿 公路局网络安全应急处置预案 cs go国服服务器是韩国的吗 手机网络安全问题心得体会 护苗网络安全总结话语 arma3搭建服务器 服务器如何下载git 服务器直接接入网络安全 店务管理系统软件开发 电信网络安全我知道演讲稿 国家电网网络安全宣传标语 网络安全审计考证壁纸 重庆科技学院网络技术就业怎么样 嵌入式软件开发架构 网络技术文化墙 手机号办了信用数据库起什么作用 高端科技互联网行业分析 数据库备份与恢复方案 数据库软件开发立项 山西网络技术服务目的 固定资产数据库处理课件 数据库技术面临的挑战 重庆涪陵免费生鲜软件开发
0