前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >高性能PHP框架webman集成支付宝支付

高性能PHP框架webman集成支付宝支付

作者头像
Tinywan
发布于 2025-04-13 07:59:42
发布于 2025-04-13 07:59:42
12400
代码可运行
举报
文章被收录于专栏:开源技术小栈开源技术小栈
运行总次数:0
代码可运行

开源技术小栈本文导读:本文介绍如何在webman框架中集成支付宝支付,并实现支付功能。

概述

本文将以高性能PHP框架webman为技术载体,深度解析支付宝支付在现代化企业系统中的集成策略与实践方案。通过本文,开发者将掌握从沙箱环境配置到生产环境部署的全链路实现方案,了解如何利用webman的异步非阻塞特性与支付宝的RESTful API构建高并发支付系统,并获取支付接口安全加固、交易状态同步等关键环节的最佳实践。

文章特别针对webman框架的模块化设计特点,提供可复用的支付SDK集成方案,涵盖当面付、手机网站支付等主流场景,同时详解异步通知机制与对账系统的实现要点,助力开发者打造既符合企业级安全标准又具备优异用户体验的支付解决方案。

应用场景

本方案专为采用webman前后端分离架构的企业级应用量身定制,旨在助力集成支付宝支付功能。常见应用场景广泛,涵盖在线商城的商品交易支付,让消费者能够便捷购买心仪商品;会员充值场景,方便用户快速完成会员权益的续费或升级;以及各类订单支付场景,确保企业业务流程中的资金流转高效、安全,全面提升用户支付体验,满足企业多样化的线上支付需求。

解决方案

  1. 搭建支付基础环境:要开展支付宝支付集成工作,首先需准备好支付环境。这其中关键的一步是完成支付宝开发者账户的配置,你要在支付宝开放平台完成账号注册,严格按照平台指引填写相关信息,完成身份认证等操作,以获取后续开发所需的各类权限和密钥。
  2. 集成支付 SDK:借助composer来添加项目所需依赖,从而实现支付宝 SDK 的集成。通过在项目根目录下运行特定的composer命令,从官方源拉取最新且稳定版本的支付宝 SDK 到项目中,让项目具备与支付宝支付系统交互的基础能力。
  3. 配置与读取支付参数:对支付所需的各项参数进行细致配置,这些参数涵盖商户号、密钥、回调地址等重要信息。将这些参数妥善存储在配置文件中,并编写代码实现从配置文件中读取参数,确保在支付流程中能正确引用这些关键信息。
  4. 编写支付业务逻辑:此环节是实现支付功能的核心。需要编写完整的支付业务逻辑,其中包括下单和回调处理等关键流程。在下单环节,要根据业务需求生成订单信息,并将其按照支付宝规定的格式封装后发送给支付宝支付系统;在回调处理环节,要对支付宝返回的支付结果通知进行验证和处理,确保订单状态与支付结果保持一致。
  5. 创建前端调用接口:为了让前端能够方便地触发支付流程,需要创建专门的支付接口。这些接口要遵循前后端约定的数据交互格式,接收前端传递的订单信息,调用之前编写的支付业务逻辑生成支付链接或支付二维码,然后将结果返回给前端,供前端展示给用户完成支付操作。

Step.1 配置支付环境

1. 登录支付宝:https://open.alipay.com/develop/manage

2. 创建应用

3. 进入设置页面

4. 接口加签方式

5. 下载支付宝密钥工具

6. 生成CSR文件

7. 打开生成的文件

8. 支付宝页面下一步

9. 上传刚刚生成的CSR文件

10. 提交应用: 提交应用,等待签约审核成功

11. 下载证书

Step.2 集成支付 SDK

在项目中添加支付宝 SDK 依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
composer require yansongda/pay ~3.0

Step.3 配置支付宝参数

开源技术小栈说明:以下以支付宝沙箱环境为环境进行文档编写,若有问题,请及时反馈哦!

配置文件config/payment.php,通过支付宝沙箱环境获取所需参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
/**
 * @desc 支付配置文件
 * @author Tinywan(ShaoBo Wan)
 */
return [
    '_force' => true, 
    'alipay' => [
        'default' => [
            // 必填-支付宝分配的 app_id
            'app_id' => '20160909004708941',
            // 必填-应用私钥 字符串或路径
            'app_secret_cert' => 'MIIEpAIBAAKCxxxxxxxxxxxxxxP4r3m4OUmD/+XDgCg==',
            // 必填-应用公钥证书 路径
            'app_public_cert_path' => base_path().'/payment/appCertPublicKey_2016090900470841.crt',
            // 必填-支付宝公钥证书 路径
            'alipay_public_cert_path' => base_path().'/payment/alipayCertPublicKey_RSA2.crt',
            // 必填-支付宝根证书 路径
            'alipay_root_cert_path' => base_path().'/payment/alipayRootCert.crt',
            // 选填-同步回调地址
            'return_url' => 'https://webman.tinywan.cn/payment/alipay-return',
            // 选填-异步回调地址
            'notify_url' => 'https://webman.tinywan.cn/payment/alipay-notify',
            // 选填-服务商模式下的服务商 id,当 mode 为 Pay::MODE_SERVICE 时使用该参数
            'service_provider_id' => '',
            // 选填-默认为正常模式。可选为: MODE_NORMAL, MODE_SANDBOX, MODE_SERVICE
            'mode' => \Yansongda\Pay\Pay::MODE_SANDBOX,
        ]
    ],
    'logger' => [
        'enable' => false,
        'file' => runtime_path().'/logs/alipay.log',
        'level' => 'debug', // 建议生产环境等级调整为 info,开发环境为 debug
        'type' => 'single', // optional, 可选 daily.
        'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
    ],
    'http' => [ // optional
        'timeout' => 5.0,
        'connect_timeout' => 5.0,
    ]
];

开源技术小栈注意:证书目录没有规定,以上示例是放在的框架的payment目录下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
├── payment
│   ├── alipayCertPublicKey_RSA2.crt
│   ├── alipayRootCert.crt
│   └── appCertPublicKey_2016090900470841.crt

Step.4 编写支付业务逻辑

获取config/payment.php配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$config = config('payment');
\Yansongda\Pay\Pay::config($config);

开源技术小栈注意:如果是支付宝沙箱模式,一定要记得开启配置文件 'mode' => \Yansongda\Pay\Pay::MODE_SANDBOX,,该选项默认为默认为正常模式。

Step.5 编写支付业务逻辑

PC网页支付伪代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

usesupport\Request;
useYansongda\Pay\Pay;

/**
 * @param Request $request
 * @return string
 */
publicfunction payment(Request $request)
{
    // 1. 初始化配置
    Pay::config(config('payment'));

    // 2. 网页支付
    $order = [
        'out_trade_no' => time(),
        'total_amount' => '8888.88',
        'subject' => 'webman payment',
        '_method' => 'get'// 使用get方式跳转
    ];
    return Pay::alipay()->web($order)->getBody()->getContents();
}

Step.6 异步回调处理

对于App支付产生的交易,支付宝会根据原始支付API中传入的异步通知地址notify_url,通过POST请求的形式将支付结果作为参数通知到商户系统。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
usesupport\Request;
useYansongda\Pay\Pay;

/**
 * @desc:『支付宝』异步通知
 * @param Request $request
 * @return Response
 */
publicfunction alipayNotify(Request $request): Response
{
    // 1. 初始化配置
    Pay::config(config('payment'));

    // 2. 支付宝回调处理
    $result = Pay::alipay()->callback($request->post());

    // ===================================================================================================
    // 请自行对 trade_status 进行判断及其它逻辑进行判断,只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时,支付宝才会认定为买家付款成功。
    // 1、商户需要验证该通知数据中的out_trade_no是否为商户系统中创建的订单号;
    // 2、判断total_amount是否确实为该订单的实际金额(即商户订单创建时的金额);
    // 3、校验通知中的seller_id(或者seller_email) 是否为out_trade_no这笔单据的对应的操作方;
    // 4、验证app_id是否为该商户本身。
    // 5、其它业务逻辑情况
    // ===================================================================================================

    // 5. 支付宝回调处理
    returnnew Response(200, [], 'success');
}

开源技术小栈注意:不能使用插件本身 return Pay::alipay()->success();响应支付宝回调,如果你用到中间件会出现中间件问题。所以响应支付宝需要使用webman的响应类 support\Response;

服务器异步通知页面特性

开源技术小栈

  • 必须保证服务器异步通知页面(notify_url)上无任何字符,如空格、HTML标签、开发系统自带抛出的异常提示信息等;
  • 支付宝是用POST方式发送通知信息,因此该页面中获取参数的方式,如:request.Form(“out_trade_no”)$_POST[‘out_trade_no’]
  • 支付宝主动发起通知,该方式才会被启用;
  • 只有在支付宝的交易管理中存在该笔交易,且发生了交易状态的改变,支付宝才会通过该方式发起服务器通知(即时到账交易状态为“等待买家付款”的状态默认是不会发送通知的);
  • 服务器间的交互,不像页面跳转同步通知可以在页面上显示出来,这种交互方式是不可见的;
  • 第一次交易状态改变(即时到账中此时交易状态是交易完成)时,不仅会返回同步处理结果,而且服务器异步通知页面也会收到支付宝发来的处理结果通知;
  • 程序执行完后必须打印输出“success”(不包含引号)。如果商户反馈给支付宝的字符不是success这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。一般情况下,25小时以内完成8次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h);
  • 程序执行完成后,该页面不能执行页面跳转。如果执行页面跳转,支付宝会收不到success字符,会被支付宝服务器判定为该页面程序运行出现异常,而重发处理结果通知;
  • cookies、session等在此页面会失效,即无法获取这些数据;
  • 该方式的调试与运行必须在服务器上,即互联网上能访问;
  • 该方式的作用主要防止订单丢失,即页面跳转同步通知没有处理订单更新,它则去处理;
  • 当商户收到服务器异步通知并打印出success时,服务器异步通知参数notify_id才会失效。也就是说在支付宝发送同一条异步通知时(包含商户并未成功打印出success导致支付宝重发数次通知),服务器异步通知参数notify_id是不变的。

特别注意说明

开源技术小栈

  • 状态TRADE_SUCCESS的通知触发条件是商户签约的产品支持退款功能的前提下,买家付款成功;
  • 交易状态TRADE_FINISHED的通知触发条件是商户签约的产品不支持退款功能的前提下,买家付款成功;或者,商户签约的产品支持退款功能的前提下,交易已经成功并且已经超过可退款期限。

调试流程

  1. 支付请求:在webman前后端分离架构的企业应用中,用户于前端发起支付,像在线商城购物、会员充值或订单支付场景,前端会将含订单金额、编号等数据的请求发至后端服务器。
  2. 获取链接:后端收到请求,依支付宝支付参数调用其接口,校验、格式化数据后,成功获取承载订单金额、有效期等信息的支付链接。
  3. 跳转支付:后端把链接回传,前端引导用户点击,跳转至支付宝页面,用户可选余额、银行卡、花呗等方式完成支付。
  4. 更新状态:支付成功,支付宝按notifyUrl向服务器回调,携带支付结果。服务器验证数据,确认无误后更新订单状态,完成库存扣减等后续操作
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开源技术小栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
支付宝支付与开源管理后台webman-admin的完美结合:轻松实现一键支付
图片来源:https://opendocs.alipay.com/open/270/105899?pathHash=d57664bf
Tinywan
2023/11/13
4990
支付宝支付与开源管理后台webman-admin的完美结合:轻松实现一键支付
PHP语言最优雅的支付SDK扩展包
yansongda/pay 是一个用于处理支付宝、微信、抖音、银联和江苏银行支付的 PHP SDK 扩展包。该项目旨在提供一个优雅、易扩展的支付解决方案,支持多种支付方式和平台。主要编程语言为 PHP,适合在PHP环境中使用
Tinywan
2025/03/06
1780
PHP语言最优雅的支付SDK扩展包
微信小程序中的支付宝支付
支付宝开放平台: https://open.alipay.com , 使用支付宝扫码登录,进入控制台,找到沙箱环境
很酷的站长
2022/12/28
8.7K1
微信小程序中的支付宝支付
Thinkphp5实现支付宝支付、余额提现、订单查询、取消/关闭订单
最近很多朋友在博客给我留言问,叫我写一个支付宝支付的功能,今天整理了一套比较完整的支付宝支付相关的demo改进版,下面的代码都是在我一个真实的项目中改进出来的。包含:【pc扫码支付】、【查询订单】、【余额提现】、【取消订单】、【关闭订单】
程序猿的栖息地
2022/04/29
2.1K0
Thinkphp5实现支付宝支付、余额提现、订单查询、取消/关闭订单
字节跳动集成支付宝支付
https://microapp.bytedance.com/docs/payment/#给开发者使用的服务端下单接口
悟空码字
2021/02/05
1.4K0
springboot整合支付宝支付
1、首先我们需要建立一个springboot工程,支付宝开发助手需要去支付宝开发平台去下载
java后端指南
2021/05/13
9390
springboot整合支付宝支付
APP(UniAPP) 支付宝支付操作指导 + 遇到的坑(PHP实现)
前言 近期进行 Uniapp 的开发学习,最后阶段用到了 支付宝支付,相对移动应用的开发周期和专业复杂度,个人觉得这个前端框架还是很有可取之处的 本人在此记录一下,初涉此框架遇到的极有可能入坑的地方,希望道友们引以为鉴 开发框架 : ThinkPHP5.1.2 前端编辑器: HBuilderX 测试手机 : 魅族、iphone7 支付场景: APP-支付宝支付 整理时间: 2019-06-18 ☛ 前端代码 首先 Uniapp 提供的官方 Demo 已经比较全面了,而服务端是需要我们自行编写
泥豆芽儿 MT
2019/06/19
8.2K2
支付宝支付-扫码支付
扫码支付,指用户打开支付宝钱包中的“扫一扫”功能,扫描商户针对每个订单实时生成的订单二维码,并在手机端确认支付。
Javen
2018/08/21
3.3K0
支付宝支付-扫码支付
接入支付宝支付服务
若是想接入真实的支付宝支付业务,需要大量的材料审核,所以,我们以支付宝提供的沙箱环境为例进行介绍,首先下载官方DEMO,地址为 https://opendocs.alipay.com/open/270/106291/:
wangweijun
2022/05/10
1.8K0
接入支付宝支付服务
基于thinkphp5.0和支付宝面对面扫码支付DEMO制作的扫码支付
基于thinkphp5.0和支付宝面对面扫码支付DEMO制作的扫码支付 今天接口申请下来,下载了官方demo对着调试了一天,终于实现想要的功能,先看图
OwenZhang
2021/12/08
1.4K0
基于thinkphp5.0和支付宝面对面扫码支付DEMO制作的扫码支付
支付宝即时到帐接口的python实现,示例采用django框架
http://blog.csdn.net/hornbills/article/details/40338949
bear_fish
2018/09/20
1.4K0
支付宝即时到帐接口的python实现,示例采用django框架
微信支付/支付宝支付
接下来就是用户扫前端生成的二维码,进行付款,在付款成功之后微信会通过上述发送的notify_url同时是否完成支付
用户8447427
2023/10/18
1.1K0
「支付专题」微信支付如何接入webman-admin开源管理后台
这篇文章主要为大家详细介绍微信支付如何接入开源管理后台webman-admin开发教程
Tinywan
2023/11/13
6460
「支付专题」微信支付如何接入webman-admin开源管理后台
支付宝支付-PC电脑网站支付
支付产品全面升级(更新时间:2017/05/05 ),若您使用的是老接口,请移步老版本即时到账文档。
Javen
2018/08/21
2.4K0
支付宝支付-PC电脑网站支付
网站调用支付宝进行支付-Java后台调用支付宝支付
网站调用支付宝进行支付-Java后台调用支付宝支付 最近公司一个产品用到了打赏支付,其中一个是支付宝,记录一下java后台调用支付宝的过程付代码。本文讲的是使用沙箱环境(支付宝提供的一种开发专用模式,不要实际支付,可以走通整个流程)。 一、准备工作 1.首先要到 蚂蚁金服开发者中心 注册商家账户,并认证。 2.下载java版的sdk和demo sdk&demo下载地址 3.将sdk加入到项目中,在项目根路径下新建libs文件夹,将jar包复制进去,我这里使用的是gradle,如果各位使用的是maven,
用户2235302
2018/06/19
2.4K0
手把手教你接入支付宝支付
前一久做了支付宝支付,分享一下接入的详细步骤吧,移动端和服务端demo源码已上传至GitHub,要下载的移步至文章末尾。 先给出支付宝官方文档:https://docs.open.alipay.com/204/105051/
全栈程序员站长
2022/09/01
2.4K0
手把手教你接入支付宝支付
laravel实现支付宝支付功能
前段时间因为项目中需要实现支付宝手机网站支付功能,所以写下这篇文章以作记录,不足之处,欢迎指教。
猿哥
2019/07/25
2.7K0
支付宝支付流程解读
请求 alipay.trade.wap.pay(手机网站支付接口2.0接口)生成 form 表单数据返回给前端,前端模拟表单提交唤起收银台,用户输入支付密码确认支付后创建订单。
一个风轻云淡
2023/10/15
5090
支付宝支付流程解读
ASP.NET Core 2.0 使用支付宝PC网站支付
前言 最近在使用ASP.NET Core来进行开发,刚好有个接入支付宝支付的需求,百度了一下没找到相关的资料,看了官方的SDK以及Demo都还是.NET Framework的,所以就先根据官方SDK的源码,用.NET Standard 2.0 实现了支付宝服务端SDK,Alipay.AopSdk.Core(github:https://github.com/stulzq/Alipay.AopSdk.Core) ,支持.NET CORE 2.0。为了使用方便,已上传至Nuget可以直接使用。 支付宝有比较多的
晓晨
2018/06/22
1.5K0
支付宝当面付对接
当面付顾名思义,面对面付款,帮助商家在线下消费场景下实现快速收款;当面付产品支持条码支付和扫码支付两种付款方式。 我们这里对接的就是扫码支付 扫码支付,指用户打开支付宝钱包中的“扫一扫”功能,扫描商家展示在某收银场景下的二维码并进行支付的模式。该模式适用于线下实体店支付、面对面支付等场景。业务流程如下图所示:
阿珏
2024/10/16
2730
支付宝当面付对接
相关推荐
支付宝支付与开源管理后台webman-admin的完美结合:轻松实现一键支付
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验