ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

支付宝支付:使用第三方sdk实现--python-alipay-sdk

2022-07-19 22:00:23  阅读:197  来源: 互联网

标签:alipay 支付宝 公钥 python ----- key com sdk


目录

1 支付宝支付介绍

# 线上支付
    -支付宝支付
    -微信支付:网页版
    -云闪付的支付

# 用户把钱打到第三方平台(支付宝,微信)商家账户中----》提现提出来---》手续费
# 必须是商户:企业,有营业执照才能申请支付宝,微信的支付接入
# 用的支付宝的沙箱环境:https://openhome.alipay.com/platform/appDaily.htm?tab=info

"""
原来支付宝没有提供python的sdk,第三方有人基于api接口封装了一个sdk
现在支付宝提供了python的sdk了
目前还是用第三方的sdk:https://github.com/fzlee/alipay
"""

# 对称加密和非堆成

# 使用支付宝支付:加密是非对称加密---》支付宝官方提供了工具(https://opendocs.alipay.com/common/02kipl)--》下载用
    -公钥:配置在支付宝官方网站上----》生成支付宝公钥---》拿着用
    -私钥:拿着用

2 python-alipay-sdk基本使用流程

# 1、在沙箱环境下实名认证:https://openhome.alipay.com/platform/appDaily.htm?tab=info

# 2、电脑网站支付API:https://docs.open.alipay.com/270/105900/

# 3、完成RSA密钥生成:https://docs.open.alipay.com/291/105971

# 4、在开发中心的沙箱应用下设置应用公钥:填入生成的公钥文件中的内容

# 5、Python支付宝开源框架:https://github.com/fzlee/alipay
# >: pip install python-alipay-sdk --upgrade

# 7、公钥私钥设置
"""
# alipay_public_key.pem
-----BEGIN PUBLIC KEY-----
支付宝公钥
-----END PUBLIC KEY-----

# app_private_key.pem
-----BEGIN RSA PRIVATE KEY-----
用户私钥
-----END RSA PRIVATE KEY-----
"""

# 8、支付宝链接
"""
开发:https://openapi.alipay.com/gateway.do
沙箱:https://openapi.alipaydev.com/gateway.do
"""

3 单页面使用

# 下载python-alipay-sdk
pip install python-alipay-sdk

# 代码使用
from alipay import AliPay

app_private_key_string =   生成的私钥
alipay_public_key_string = 生成的公钥
alipay = AliPay(
    appid="2016092000554611",
    app_notify_url=None,  # 默认回调 url
    app_private_key_string=app_private_key_string,
    # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
    alipay_public_key_string=alipay_public_key_string,
    # sign_type="RSA2",  # RSA 或者 RSA2,不写默认是RSA2
    debug=True,  # 默认 False
)
# 电脑网站支付,需要跳转到:https://openapi.alipay.com/gateway.do? + order_string
res=alipay.api_alipay_trade_page_pay(
    out_trade_no='1000101',
    total_amount=float(999),  # 只有生成支付宝链接时,不能用Decimal
    subject='充气球',
    return_url='http://127.0.0.1:8000',
    notify_url='http://127.0.0.1:8000',
)

gataway = 'https://openapi.alipaydev.com/gateway.do?'
print(gataway+res)  # 即支付链接地址

4 沙箱的申请及公钥私钥配置

# 网址
https://auth.alipay.com/login/ant_sso_index.htm?redirectType=self&bizFrom=openhome&goto=https%3A%2F%2Fopen.alipay.com%2Fdev%2Fworkspace

4.1 沙箱注册

入驻

image-20220719213533946

注册

image-20220719213612030

进入沙箱

image-20220719213622616

查看沙箱信息(包含appid,密钥)

image-20220719213630016

4.2 下载支付宝开放平台开发助手

# 下载地址
https://opendocs.alipay.com/common/02khjm
--> 生成密钥-->获取工具-->windows-->下载即可

下载后打开,并依次点击下方箭头,然后复制公钥

image-20220719214204094

4.3 沙箱中配置密钥

回到网页打开沙箱,点击自定义密钥

image-20220719213630016

粘贴并保存

image-20220719214449985

5 支付宝支付二次封装

5.1 github开源框架

https://github.com/fzlee/alipay

5.2 依赖文件

pip install python-alipay-sdk --upgrade

5.3 封装及使用

包结构

libs
    ├── iPay  						# aliapy二次封装包
    │   ├── __init__.py 			 # 包文件
    │   ├── pem						 # 公钥私钥文件夹
    │   │   ├── alipay_public_key.pem  # 支付宝公钥文件
    │   │   ├── app_private_key.pem	   # 应用私钥文件
    │   ├── pay.py					 # 支付文件
    └── └── settings.py  			  # 应用配置

_init_.py

from .pay import alipay
from .settings import GATEWAY

alipay_public_key.pem

-----BEGIN PUBLIC KEY-----
拿应用公钥跟支付宝换来的支付宝公钥
-----END PUBLIC KEY-----

app_private_key.pem

-----BEGIN RSA PRIVATE KEY-----
通过支付宝公钥私钥签发软件签发的应用私钥
-----END RSA PRIVATE KEY-----

pay.py

from alipay import AliPay

from . import settings

alipay = AliPay(
    appid=settings.APP_ID,
    app_notify_url=None,  # 默认回调 url
    app_private_key_string=settings.APP_PRIVATE_KEY_STRING,
    # 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
    alipay_public_key_string=settings.ALIPAY_PUBLIC_KEY_STRING,
    sign_type=settings.SIGN,  # RSA 或者 RSA2
    debug=settings.DEBUG,  # 默认 False
)

settings.py

import os

# 应用私钥
APP_PRIVATE_KEY_STRING = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'pem', 'app_private_key.pem')).read()

# 支付宝公钥
ALIPAY_PUBLIC_KEY_STRING = open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'pem', 'alipay_public_key.pem')).read()

# 应用ID
APP_ID = '2016092000554611'

# 加密方式
SIGN = 'RSA2'

# 是否是支付宝测试环境(沙箱环境),如果采用真是支付宝环境,配置False
DEBUG = True

# 支付网关
GATEWAY = 'https://openapi.alipaydev.com/gateway.do?' if DEBUG else 'https://openapi.alipay.com/gateway.do?'

补充:在自己项目的配置文件中配置支付宝回调接口:settings.py | dev.py

# 上线后必须换成公网地址
# 后台基URL
BASE_URL = 'http://127.0.0.1:8000'
# 前台基URL
LUFFY_URL = 'http://127.0.0.1:8080'
# 支付宝同步异步回调接口配置
# 后台异步回调接口
NOTIFY_URL = BASE_URL + "/order/success/"
# 前台同步回调接口,没有 / 结尾
RETURN_URL = LUFFY_URL + "/pay/success"

其他文件中使用

from导入alipay和GATEWAY

class TestView(APIView):
    def get(self,request):
        # 1 从前端先获取total_amount(价格),subject(商品名)
        total_amount = request.data.get('total_amount')
        subject = request.data.get('subject')
        res = alipay.api_alipay_trade_page_pay(
            # 2 生成唯一订单号
            out_trade_no=uuid.uuid4(),  
            total_amount=float(total_amount),  # 只有生成支付宝链接时,不能用Decimal
            subject=subject,
            # 3 上线后必须换成公网地址
            return_url='http://127.0.0.1:8000',
            notify_url='http://127.0.0.1:8000',
        )
        # 4 直接定向到支付接口
        return redirect(hh) 

标签:alipay,支付宝,公钥,python,-----,key,com,sdk
来源: https://www.cnblogs.com/williama/p/16495954.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有