
金融科技后端【免费下载链接】pay可能是我用过的最优雅的 Alipay/WeChat/Douyin/Unipay/江苏银行 的支付 SDK 扩展包了项目地址https://gitcode.com/gh_mirrors/pa/pay点击查看免费下载本指南以支付宝开放平台的七种核心收单场景为脉络系统讲解 yansongda/pay 中Pay::alipay()-web()、h5()、app()、mini()、pos()、scan()、transfer()七个快捷方法的调用方式、订单参数约定与底层插件执行链路。读完本文你将能够在自己的 PHP 项目中以统一、简洁的 API 接入支付宝全部主流支付方式并理解扩展包“客观参数自动补全、业务参数与官方一致”的设计原则。快捷方式总览支付宝支付在 yansongda/pay 中直接内置支持以下快捷方式每个快捷方式对应一个支付宝开放平台接口调用方只需传入业务订单参数即可method说明参数返回值web网页支付PC 收银台array $orderResponseh5H5 支付移动端网页array $orderResponseappAPP 支付array $orderResponsemini小程序支付array $orderCollectionpos刷卡支付付款码/被扫array $orderCollectionscan扫码支付预下单array $orderCollectiontransfer账户转账array $orderCollection其中web、h5、app三个快捷方式返回Response可渲染的表单或唤起串其余返回Collection结构化响应集合可通过属性或get()方法读取字段。这一定位与各快捷方式底层的插件链严格对应详见文末“插件化内核”一节。通用约定客观参数自动处理使用任何支付快捷方式前均需先加载配置Pay::config($this-config);所有订单配置中客观参数均不用配置扩展包已经为大家自动处理了比如网页支付中的product_code默认注入FAST_INSTANT_TRADE_PAY、小程序支付中的product_code默认注入JSAPI_PAY、转账中的biz_scene默认DIRECT_TRANSFER与product_code默认TRANS_ACCOUNT_NO_PWD等。其余所有订单配置参数与支付宝官方接口无任何差别兼容所有功能完整参数列表请以支付宝开放平台对应接口文档的「请求参数」一栏为准。这意味着你无需记忆扩展包特有的参数名直接从官方文档复制参数结构即可无缝使用。网页支付web网页支付对应支付宝 PC 收银台alipay.trade.page.pay适合桌面浏览器场景返回值为可渲染的 HTML 表单Response。基本用法Pay::config($this-config); return Pay::alipay()-web([ out_trade_no .time(), total_amount 0.01, subject yansongda 测试 - 1, ]);GET 方式提交扩展包默认以 POST 方式提交表单若您想使用 GET 方式提交请求只需在参数中增加[_method get]Pay::config($this-config); return Pay::alipay()-web([ out_trade_no .time(), total_amount 0.01, subject yansongda 测试 - 1, _method get, ]);_method为扩展包私有控制参数不会进入biz_content业务字段仅影响提交方式。底层实现从源码看WebShortcut 的插件链为StartPlugin → Pay\Web\PayPlugin → FormatPayloadBizContentPlugin → AddPayloadSignaturePlugin → AddRadarPlugin → ResponseHtmlPlugin → ParserPlugin。其中 Pay\Web\PayPlugin 会向biz_content自动合并默认值$rocket-mergePayload([ method alipay.trade.page.pay, biz_content array_merge( [product_code FAST_INSTANT_TRADE_PAY], $rocket-getParams() ), ]);即product_code由扩展包注入你传入的out_trade_no、total_amount、subject等业务参数原样并入。ResponseHtmlPlugin负责将签名后的请求组装为自动提交的 HTML 表单响应。订单配置参数无需配置product_code等客观参数扩展包自动处理。业务参数与官方alipay.trade.page.pay完全一致兼容所有功能请参考支付宝开放平台该接口文档的「请求参数」一栏。H5 支付h5H5 支付对应支付宝手机网站支付alipay.trade.wap.pay适合手机浏览器场景返回值为可跳转的 HTMLResponse。基本用法Pay::config($this-config); return Pay::alipay()-h5([ out_trade_no time(), total_amount 0.01, subject yansongda 测试 - 01, quit_url https://yansongda.cn, ]);quit_url为用户支付中断后跳转的退出地址属 H5 场景常用业务参数按官方规则传即可。GET 方式提交与网页支付一致可通过_method get切换为 GET 提交Pay::config($this-config); return Pay::alipay()-h5([ out_trade_no .time(), total_amount 0.01, subject yansongda 测试 - 1, _method get, ]);底层实现H5Shortcut 的插件链与 web 完全同构StartPlugin → Pay\H5\PayPlugin → FormatPayloadBizContentPlugin → AddPayloadSignaturePlugin → AddRadarPlugin → ResponseHtmlPlugin → ParserPlugin。Pay\H5\PayPlugin 仅注入method alipay.trade.wap.pay并原样透传biz_content不额外注入product_code——这与官方 wap 支付接口的参数要求一致。订单配置参数无需配置客观参数扩展包已自动处理。业务参数与官方alipay.trade.wap.pay完全一致兼容所有功能请参考支付宝开放平台该接口文档的「请求参数」一栏。APP 支付appAPP 支付对应alipay.trade.app.pay用于支付宝 App 内唤起支付返回值为可直接交给移动端调起支付宝的字符串Response。基本用法Pay::config($this-config); // 后续 APP 调用方式不在本文档讨论范围内请参考官方文档。 return Pay::alipay()-app([ out_trade_no time(), total_amount 0.01, subject yansongda 测试 - 01, ]);返回值是签名后的“唤起串”orderStr移动端拿到后按支付宝 SDK 规范调起支付具体 APP 侧集成步骤请参考支付宝官方 APP 支付文档。底层实现AppShortcut 的插件链为StartPlugin → Pay\App\PayPlugin → FormatPayloadBizContentPlugin → AddPayloadSignaturePlugin → ResponseInvokeStringPlugin → ParserPlugin。与 web/h5 不同APP 支付没有AddRadarPlugin与ResponseHtmlPlugin而是使用ResponseInvokeStringPlugin产出唤起字符串。Pay\App\PayPlugin 注入method alipay.trade.app.pay并原样透传biz_content。订单配置参数无需配置客观参数扩展包已自动处理。业务参数与官方alipay.trade.app.pay完全一致兼容所有功能请参考支付宝开放平台该接口文档的「请求参数」一栏。小程序支付mini小程序支付对应alipay.trade.createJSAPI 场景返回值类型为Collection可读取支付宝返回的交易号等字段。基本用法Pay::config($this-config); $result Pay::alipay()-mini([ out_trade_no time()., total_amount 0.01, subject yansongda 测试 - 01, buyer_id 2088622190161234, ]); return $result-get(trade_no); // 支付宝交易号 // return $result-trade_no;Collection既支持get(trade_no)方式读取也支持属性式访问$result-trade_no。buyer_id为买家支付宝用户 ID用于小程序场景下锁定付款人。底层实现MiniShortcut 的插件链为StartPlugin → Pay\Mini\PayPlugin → FormatPayloadBizContentPlugin → AddPayloadSignaturePlugin → AddRadarPlugin → VerifySignaturePlugin → ResponsePlugin → ParserPlugin。相比 web/h5/appmini 增加了VerifySignaturePlugin验签与ResponsePlugin结构化解析因此返回Collection。Pay\Mini\PayPlugin 会注入$rocket-mergePayload([ method alipay.trade.create, biz_content array_merge( [product_code JSAPI_PAY], $rocket-getParams(), ), ]);即product_code JSAPI_PAY由扩展包自动补全。订单配置参数无需配置客观参数扩展包已自动处理含product_code。业务参数与官方alipay.trade.create完全一致兼容所有功能请参考支付宝开放平台该接口文档的「请求参数」一栏。小程序支付接入流程请参考支付宝开放平台「小程序支付」接入文档。刷卡支付pos付款码/被扫码刷卡支付对应付款码被扫场景alipay.trade.pay用户在收银台出示付款码商家扫码完成扣款返回值类型为Collection。基本用法Pay::config($this-config); $result Pay::alipay()-pos([ out_trade_no time(), auth_code 284776044441477959, total_amount 0.01, subject yansongda 测试 - 01, ]);auth_code为用户的付款码条码/二维码内容是刷卡支付的必传业务参数。底层实现PosShortcut 的插件链为StartPlugin → Pay\Pos\PayPlugin → FormatPayloadBizContentPlugin → AddPayloadSignaturePlugin → AddRadarPlugin → VerifySignaturePlugin → ResponsePlugin → ParserPlugin同样经过验签与结构化解析返回Collection。订单配置参数无需配置客观参数扩展包已自动处理。业务参数与官方alipay.trade.pay完全一致兼容所有功能请参考支付宝开放平台该接口文档的「请求参数」一栏。扫码支付scan扫码支付对应预下单接口alipay.trade.precreate服务端生成订单二维码用户用支付宝 App 扫码完成付款返回值类型为Collection可通过qr_code字段获取二维码内容。基本用法Pay::config($this-config); $result Pay::alipay()-scan([ out_trade_no time(), total_amount 0.01, subject yansongda 测试 - 01, ]); return $result-qr_code; // 二维码 url底层实现ScanShortcut 的插件链为StartPlugin → Pay\Scan\PayPlugin → FormatPayloadBizContentPlugin → AddPayloadSignaturePlugin → AddRadarPlugin → VerifySignaturePlugin → ResponsePlugin → ParserPlugin。Pay\Scan\PayPlugin 注入method alipay.trade.precreate并原样透传biz_content响应中的qr_code即为可生成二维码图片的 URL 内容。订单配置参数无需配置客观参数扩展包已自动处理。业务参数与官方alipay.trade.precreate完全一致兼容所有功能请参考支付宝开放平台该接口文档的「请求参数」一栏。账户转账transfer账户转账对应单笔转账接口alipay.fund.trans.uni.transfer用于向支付宝账户含沙箱账户打款返回值类型为Collection。基本用法Pay::config($this-config); $result Pay::alipay()-transfer([ out_biz_no 202106051432, trans_amount 0.01, product_code TRANS_ACCOUNT_NO_PWD, biz_scene DIRECT_TRANSFER, payee_info [ identity ghdhjw7124sandbox.com, identity_type ALIPAY_LOGON_ID, name 沙箱环境 ], ]);其中out_biz_no为商户转账订单号trans_amount为转账金额payee_info为收款方信息identity收款账户、identity_type账户类型、name真实姓名。底层实现TransferShortcut 的插件链为StartPlugin → Fund\Transfer\Fund\TransferPlugin → FormatPayloadBizContentPlugin → AddPayloadSignaturePlugin → AddRadarPlugin → VerifySignaturePlugin → ResponsePlugin → ParserPlugin。TransferPlugin 会自动注入默认业务参数$rocket-mergePayload([ method alipay.fund.trans.uni.transfer, biz_content array_merge( [ biz_scene DIRECT_TRANSFER, product_code TRANS_ACCOUNT_NO_PWD, ], $rocket-getParams(), ), ]);因此即使你不显式传入product_code与biz_scene扩展包也会按单笔无密转账TRANS_ACCOUNT_NO_PWD/DIRECT_TRANSFER补全显式传入时以你的参数为准array_merge后置覆盖。订单配置参数所有订单配置中客观参数均不用配置扩展包已经为大家自动处理了。业务参数与官方alipay.fund.trans.uni.transfer完全一致兼容所有功能请参考支付宝开放平台该接口文档的「请求参数」一栏。:::tip 转账查询等后续操作请参考 查询文档支付结果的通知处理可参考 回调文档。 :::插件化内核七个快捷方式背后的统一流水线从上面的源码分析可以看出七个快捷方式的差异仅体现在插件组合上整体遵循同一套 Artful 流水线范式可归纳为三类表单/唤起类web、h5、app以ResponseHtmlPlugin/ResponseInvokeStringPlugin收尾不验签、不解析直接返回可消费的Response接口调用类mini、pos、scan、transfer以VerifySignaturePlugin ResponsePlugin收尾对响应验签并解析为Collection公共环节StartPlugin负责初始化环境与配置FormatPayloadBizContentPlugin统一组装biz_contentAddPayloadSignaturePlugin完成请求签名AddRadarPlugin负责请求链路追踪Radar。快捷方式本身是实现Yansongda\Artful\Contract\ShortcutInterface的类仅声明插件类列表由 AlipayTrait 与 Alipay 服务提供者 统一调度执行。这带来两个直接收益调用方只需写业务参数无需关心签名、验签与请求细节且任何快捷方式都可拆解、可组合、可自定义。需要更底层的自定义能力时可以参考 内核文档 与 快速开始。延伸阅读支付宝支付查询订单查询、转账查询等支付宝支付退款退款与退款查询支付宝支付回调异步通知的接收与验签支付宝快速开始配置项应用 ID、公私钥、证书模式等完整说明赞分享金融科技后端【免费下载链接】pay可能是我用过的最优雅的 Alipay/WeChat/Douyin/Unipay/江苏银行 的支付 SDK 扩展包了项目地址https://gitcode.com/gh_mirrors/pa/pay点击查看免费下载相关推荐Yansongda Pay 支付宝支付实战指南web / h5 / app / pos / scan / transfer / mini 七种支付方式与返回值详解Yansongda Pay 支付宝支付实战指南web / h5 / app / pos / scan / transfer / mini 七种支付方式与返回值金融科技后端yansongda/pay 支付宝 V3 支付实战指南付款码支付与扫码支付yansongda/pay 支付宝 V3 支付实战指南付款码支付与扫码支付 本指南聚焦 yansongda/pay 中支付宝 V3 网关的两大当面付场景——付金融科技后端【限时免费】 yansongda/pay 支付宝H5支付实现解析yansongda/pay 支付宝H5支付实现解析 问题背景 在使用 yansongda/pay 3.7.4 版本进行支付宝H5支付开发时开发者遇到了一个常见后端金融科技上一篇Obsidian Style Settings实战案例打造专业级知识管理界面终极指南下一篇推荐一款神奇的工具Webapp Manager - 让网页应用如同本地应用一样运行创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考