Python只需3分钟即可搭建支付宝三方支付



为什么使用三方支付?


-------------------------


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

支付宝支付的流程

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

配置流程

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 json`  
`class 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只需3分钟即可搭建支付宝三方支付”的全部内容,希望对你有所帮助。

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

二、Python必备开发工具

img

三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

五、Python练习题

检查学习结果。

img

六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

最后祝大家天天进步!!

上面这份完整版的Python全套学习资料已经上传至CSDN官方,朋友如果需要可以直接微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值