luffy之支付

支付宝支付介绍

流程

image

公钥私钥设置

# alipay_public_key.pem
-----BEGIN PUBLIC KEY-----
支付宝公钥
-----END PUBLIC KEY-----

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

支付宝链接

开发:https://openapi.alipay.com/gateway.do
沙箱:https://openapi.alipaydev.com/gateway.do

# 购买课程,付款---》支付宝支付
	- 支付宝支付(即便没有账号,也可以测试)
    - 微信支付(需要用营业执照申请商家帐号)
    - 银联支付
    
# 支付宝支付介绍
https://opendocs.alipay.com/open/203/106493
    
# 集成支付宝流程
	-我们自己的网站:点击购买按钮---》向我们后端发送请求---》携带购买商品信息---》生成订单,入库,订单是未支付状态-----》生成支付宝支付链接----》返回给前端
    -前端拿到支付链接---》get请求打开----》咱们的前端就来到了支付宝的页面--》用户掏出手机扫描支付---》付款完成----》支付宝收到了钱----》get回调(咱们配置回调地址)----》跳回我们自己的网页---》支付宝还会发送post请求给我们后端----》我们要验签,通过后,把订单状态改为已支付状态
    

使用第三方sdk

-基于官方的api封装的
-pip install python-alipay-sdk --upgrade

要使用支付宝:需要营业执照注册,咱们没有,咱们使用沙箱环境测试, 测试通过,后期只要换成公司的商户号和支付宝公钥私钥即可

沙箱环境:

https://openhome.alipay.com/platform/appDaily.htm?tab=info

需要生成公钥私钥:非对称加密---》公钥加密,私钥解密

https://opendocs.alipay.com/common/02kipl
下载
image
自定义密钥
image

生成公钥和私钥

把你的公钥,配置在支付宝账号里,生成支付宝公钥----》写支付,需要用支付宝公钥和私钥

image


from alipay import AliPay, DCAliPay, ISVAliPay
from alipay.utils import AliPayConfig

# 私钥和支付宝公钥 需要去支付宝官网申请
# 只能使用测试环境:沙箱环境
app_private_key_string = open("./private.key").read()
alipay_public_key_string = open("./alipayPublic.key").read()

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
    debug=False,  # 默认 False
    verbose=False,  # 输出调试数据
    config=AliPayConfig(timeout=15)  # 可选,请求超时时间
)

subject = '兰博基尼'

order_string = alipay.api_alipay_trade_page_pay(
    out_trade_no="201102102102102102",
    total_amount=644491.03,
    subject=subject,
    return_url="https://example.com",
    notify_url="https://example.com/notify" # 可选,不填则使用默认 notify url
)

print('https://openapi.alipaydev.com/gateway.do?'+order_string)

aliapy二次封装包

GitHub开源框架
https://github.com/fzlee/alipay
依赖
>: pip install python-alipay-sdk --upgrade
# 如果抛ssl相关错误,代表缺失该包
>: pip install pyopenssl

结构

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

alipay_public_key.pem

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

app_private_key.pem

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

setting.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 = '2016093000631831'

# 加密方式
SIGN = 'RSA2'

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

# 支付网关
GATEWAY = 'https://openapi.alipaydev.com/gateway.do' if DEBUG else 'https://openapi.alipay.com/gateway.do'
pay.py
from alipay import AliPay
from . import settings

# 支付对象
alipay = AliPay(
    appid=settings.APP_ID,
    app_notify_url=None,
    app_private_key_string=settings.APP_PRIVATE_KEY_STRING,
    alipay_public_key_string=settings.ALIPAY_PUBLIC_KEY_STRING,
    sign_type=settings.SIGN,
    debug=settings.DEBUG
)

# 支付网关
gateway = settings.GATEWAY

init.py

# 包对外提供的变量
from .pay import gateway, alipay

补充:在自己项目的配置文件中配置支付宝回调接口: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"
posted @ 2023-07-04 18:44  岳宗柯  阅读(29)  评论(0)    收藏  举报