当前位置: 首页 > news >正文

支付宝支付

支付宝介绍

-https://open.alipay.com/develop/manage 扫码登录
-网站支付:https://opendocs.alipay.com/open/270/105899
扫码登录自己的支付宝之后
这个是电脑网端的支付宝支付

网端的两种支付方式
第一种是自己在网端输入自己的用户名和密码、
第二种是自己用手机扫码支付

“”"

接入条件

-1 支付宝账号:个人和商户(需要用营业执照申请)
-2 网站:备案过ICP    ICP证浙B2-20160559    ---》没有-国内:所有网站--》通过工信部审核--》上线运营-域名:购买,按年付费-云服务器:有公网ip--》所有人都能根据ip访问这个机器-阿里云买的服务器-->协助你备案--》两周
-3 营业执照,且支付宝账号名称需与营业执照主体一致
# 公司里:公司专门有财务-1 商户号-2 私钥-3 公钥-4 支付宝公钥

费率
0.6%
“”"

支付宝开发

https://opendocs.alipay.com/open/270/01didh?ref=api 开发流程介绍
“”"

支付流程

用户在我们网站前端---》点下单,立即购买---》向我们后端发起请求---》我们后端要请求支付宝--》支付宝返回给我们一个支付链接---》我们把链接返回给前端---》前端打开链接----》进入支付宝页面---》登录--》付款---》付款成功---》支付宝会两个回调:get post --->咱们后端接收到post回调后-->修改订单状态

关于回调

-用户付款成功,支付宝会有个回调-get:调用前端---》给用户看-post:调用后端--》修改订单状态的--》异步通知说明-对于 PC 网站支付的交易,在用户支付完成之后,支付宝会根据 API 中商家传入的 notify_url,通过 POST 请求的形式将支付结果作为参数通知到商家系统。-在进行异步通知交互时,如果支付宝收到的应答不是 success ,支付宝会认为通知失败,会通过一定的策略定期重新发起通知。通知的间隔频率为:4m、10m、10m、1h、2h、6h、15h。

我们现在申请不了商户—》开发测试只能用沙箱环境–》后期公司里申请了商户号后
-只需要修改:商户号,公钥,私钥即可

支付宝测试环境:
沙箱环境地址:测试环境—》数据都假的–》流程跟正常一样
-https://open.alipay.com/develop/sandbox/app?is_switch_sandbox=true
“”"
在这里插入图片描述

支付测试

支付宝提供了 API 也有SDK
官方的:https://opendocs.alipay.com/common/02n6z6 --》官方文档

# 创建一个文件
from alipay.aop.api.AlipayClientConfig import AlipayClientConfig
from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient
from alipay.aop.api.domain.AlipayTradePagePayModel import AlipayTradePagePayModel
from alipay.aop.api.request.AlipayTradePagePayRequest import AlipayTradePagePayRequestif __name__ == '__main__':"""设置配置,包括支付宝网关地址、app_id、应用私钥、支付宝公钥等,其他配置值可以查看AlipayClientConfig的定义。"""alipay_client_config = AlipayClientConfig()# alipay_client_config.server_url = 'https://openapi.alipay.com/gateway.do'  # 真实环境 支付地址alipay_client_config.server_url = ''  # 沙箱环境alipay_client_config.app_id = ''  # 商户appid# 注意 应用私钥alipay_client_config.app_private_key = ''# 阿里公钥alipay_client_config.alipay_public_key = ''"""得到客户端对象。注意,一个alipay_client_config对象对应一个DefaultAlipayClient,定义DefaultAlipayClient对象后,alipay_client_config不得修改,如果想使用不同的配置,请定义不同的DefaultAlipayClient。logger参数用于打印日志,不传则不打印,建议传递。"""client = DefaultAlipayClient(alipay_client_config=alipay_client_config)"""页面接口示例:alipay.trade.page.pay"""# 对照接口文档,构造请求对象model = AlipayTradePagePayModel()model.out_trade_no = "000010200554"model.total_amount = 8888model.subject = "重启娃娃-保密发货"  # 商品注释model.body = "重启娃娃"  # 商品名字model.product_code = "FAST_INSTANT_TRADE_PAY"request = AlipayTradePagePayRequest(biz_model=model)# 两个回调地址:get回调  post 回调request.return_url = 'http://www.baidu.com'  # get回调 支付完成之后跳转回的地址request.notify_url = 'http://www.baidu.com/post'  # post 回调  我们看不到# 得到构造的请求,如果http_method是GET,则是一个带完成请求参数的url,如果http_method是POST,则是一段HTML表单片段response = client.page_execute(request, http_method="GET")print("alipay.trade.page.pay response:" + response)

第三方库的sdk

接口加密的两种方式

第一种 :系统默认密钥 只需要配置 # 注意 应用私钥alipay_client_config.app_private_key = ''# 阿里公钥alipay_client_config.alipay_public_key = ''第二种 :自定义的密钥"""如果使用的是自定义密钥的方式alipay_client_config.app_private_key   这里填写应用公钥alipay_client_config.alipay_public_key  这里填写支付宝公钥"""
支付宝软件:生成公钥私钥---》验证签名
下载安装地址:https://opendocs.alipay.com/common/02kipk?pathHash=0d20b438
-使用下载工具 生成应用公钥,应用私钥-在沙箱环境自定义的密钥中填入应用公钥---》自动生成一个支付宝公钥-如何有了三个 应用公钥,应用私钥(不要给别人),支付宝公钥-咱们自己生成的跟支付宝提供给咱们的没有区别,只能用一个

第三方支付宝sdk

from alipay import AliPay, DCAliPay, ISVAliPay
from alipay.utils import AliPayConfig# 支付宝网页下载的证书不能直接被使用,需要加上头尾
# 你可以在此处找到例子: tests/certs/ali/ali_private_key.pem# 自己的私钥
app_private_key_string = open("./private_key.pem").read()
# 支付宝的公钥
alipay_public_key_string = open("./public_key_alipay").read()alipay = AliPay(appid="9021000134604",app_notify_url=None,  # 默认回调 urlapp_private_key_string=app_private_key_string,# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,alipay_public_key_string=alipay_public_key_string,sign_type="RSA2",  # RSA 或者 RSA2 生成密钥的加密方式debug=False,  # 默认 Falseverbose=False,  # 输出调试数据config=AliPayConfig(timeout=15)  # 可选,请求超时时间
)# 电脑网站支付,需要跳转到:https://openapi.alipay.com/gateway.do? + order_string
import uuid
order_string = alipay.api_alipay_trade_page_pay(out_trade_no=uuid.uuid4(),  # 订单号total_amount=8,  # 价格subject='充气娃娃',  # 标题return_url="https://www.baidu.com",  # 支付完成回调地址notify_url="https://www.baidu.com/post"  # 可选,不填则使用默认 notify url
)
#
print('https://openapi-sandbox.dl.alipaydev.com/gateway.do' + order_string)# 在同级目录创建两个文件存放 私钥和公钥private_key.pem 私钥文件
-----BEGIN RSA PRIVATE KEY-----
# 支付宝的私钥
-----END RSA PRIVATE KEY-----public_key_alipay  公钥文件
-----BEGIN PUBLIC KEY-----
# 支付宝的公钥
-----END PUBLIC KEY-----

支付宝支付封装

libs├── iPay  							# aliapy二次封装包│   ├── __init__.py 				# 包文件│   ├── pem							# 公钥私钥文件夹│   │   ├── alipay_public_key.pem	# 支付宝公钥文件│   │   ├── app_private_key.pem		# 应用私钥文件│   ├── pay.py						# 支付文件└── └── settings.py  	pay.py
from alipay import AliPay
from alipay.utils import AliPayConfig
from . import settingsalipay = AliPay(appid=settings.APP_ID,app_notify_url=None,  # 默认回调 urlapp_private_key_string=settings.APP_PRIVATE_KEY_STRING,# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,alipay_public_key_string=settings.ALIPAY_PUBLIC_KEY_STRING,sign_type=settings.SIGN,  # RSA 或者 RSA2debug=settings.DEBUG,  # 默认 Falseverbose=False,  # 输出调试数据config=AliPayConfig(timeout=15)  # 可选,请求超时时间
)settings.pyimport os#### 替换应用私钥   支付宝公钥  和 应用ID即可# 应用私钥
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 = '9021000129694319'
# 加密方式
SIGN = 'RSA2'
# 是否是支付宝测试环境(沙箱环境),如果采用真是支付宝环境,配置False
DEBUG = True
# 支付网关
GATEWAY = 'https://openapi-sandbox.dl.alipaydev.com/gateway.do' if DEBUG else 'https://openapi.alipay.com/gateway.do'ini.py
from .pay import alipay
from .settings import GATEWAY
http://www.lryc.cn/news/302786.html

相关文章:

  • qt中读写锁与互斥锁的区别
  • Why Not Http?
  • 基于JAVA的停车场收费系统 开源项目
  • 在PyTorch中,如何查看深度学习模型的每一层结构?
  • 洛谷-P1478-陶陶摘苹果(升级版)(贪心)
  • 【大数据面试题】007 谈一谈 Flink 背压
  • 爬虫知识--01
  • 【Azure 架构师学习笔记】- Azure Databricks (7) --Unity Catalog(UC) 基本概念和组件
  • react【六】 React-Router 路由
  • AUTOSAR CP--chapter7从CAN网络学习Autosar通信
  • NX/UG二次开发—CAM—平面铣边界准确设置方法
  • 网络安全综合实验
  • QT-地形3D
  • C++拷贝构造函数与赋值运算符重载
  • 全球各国海外媒体发稿新闻营销推广,英美德意法俄日韩多语言
  • 将phantomjs制成docker镜像
  • 【LeetCode+JavaGuide打卡】Day20|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
  • 【工具类】开源照片管理工具pthtoprism
  • [ linux网络 ] 网关服务器搭建,综合应用SNAT、DNAT转换,dhcp分配、dns分离解析,nfs网络共享以及ssh免密登录
  • MySQL全量备份
  • 【Linux系统化学习】动静态库 | 软硬链接
  • linux-firewalld防火墙端口转发
  • adobe软件提示This non-genuine Adobe app will be disabled soon【软件版本】
  • python coding with ChatGPT 打卡第20天| 二叉搜索树:搜索、验证、最小绝对差、众数
  • Stable Diffusion——基础模型、VAE、LORA、Embedding各个模型的介绍与使用方法
  • Python自动化部署与配置管理:Ansible与Docker
  • 《摔跤吧爸爸》19岁女星突患皮肌炎离世
  • 用结构体数组,完成宠物信息登记管理。
  • 频率主义线性回归和贝叶斯线性回归
  • 【感知算法】Dempster-Shafer理论(下)