支付宝支付:使用第三方sdk实现–python-alipay-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) 

原创文章,作者:506227337,如若转载,请注明出处:https://blog.ytso.com/275476.html

(0)
上一篇 2022年7月19日
下一篇 2022年7月19日

相关推荐

发表回复

登录后才能评论