You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel中集成并配置Paygreen支付工具

在Laravel中配置Paygreen PHP客户端的步骤

1. 创建配置文件

在config目录下新建paygreen.php,将.env中的变量映射到配置项,方便全局调用:

<?php

return [
    'api_key' => env('PAYGREEN_API_KEY'),
    'api_secret' => env('PAYGREEN_API_SECRET'),
    'environment' => env('PAYGREEN_ENV', 'sandbox'), // 默认使用沙箱环境
];

确保你在.env中已经定义了PAYGREEN_API_KEY、PAYGREEN_API_SECRET、PAYGREEN_ENV这几个变量,对应Paygreen后台的密钥与环境设置。

2. 初始化Paygreen客户端

有两种常用的初始化方式,按需选择:

方式一:通过服务提供者全局绑定(推荐)

在app/Providers目录下新建PaygreenServiceProvider.php,将客户端实例绑定到Laravel服务容器,实现全局可用:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Paygreen\Sdk\Core\PaygreenClient;

class PaygreenServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->singleton(PaygreenClient::class, function ($app) {
            $config = $app['config']['paygreen'];
            
            return new PaygreenClient([
                'api_key' => $config['api_key'],
                'api_secret' => $config['api_secret'],
                'environment' => $config['environment'],
            ]);
        });
    }
}

然后在config/app.php的providers数组中添加该服务提供者:

'providers' => [
    // ...其他服务提供者
    App\Providers\PaygreenServiceProvider::class,
],

之后你就能在控制器、命令行等场景通过依赖注入直接使用PaygreenClient。

方式二:控制器内直接初始化(快速测试)

如果只是临时测试,可直接在控制器中实例化客户端:

<?php

namespace App\Http\Controllers;

use Paygreen\Sdk\Core\PaygreenClient;

class PaymentController extends Controller
{
    public function createPayment()
    {
        $client = new PaygreenClient([
            'api_key' => config('paygreen.api_key'),
            'api_secret' => config('paygreen.api_secret'),
            'environment' => config('paygreen.environment'),
        ]);
        
        // 此处可调用Paygreen文档中的业务代码
    }
}

3. 调用Paygreen API示例

以创建支付订单为例,在控制器中编写业务逻辑:

public function createPayment()
{
    // 通过服务容器获取客户端实例
    $client = app(PaygreenClient::class);
    
    // 构建支付请求(参数根据Paygreen文档调整)
    $paymentRequest = new \Paygreen\Sdk\Payment\V3\Request\PaymentRequest();
    $paymentRequest->setAmount(1000) // 单位为分,此处代表10欧元
                   ->setCurrency('EUR')
                   ->setOrderId(uniqid())
                   ->setReturnUrl(route('payment.success'))
                   ->setCancelUrl(route('payment.cancel'));
    
    try {
        $response = $client->getPaymentClient()->createPayment($paymentRequest);
        // 跳转到Paygreen支付页面
        return redirect($response->getRedirectUrl());
    } catch (\Exception $e) {
        // 处理错误逻辑
        return back()->with('error', $e->getMessage());
    }
}

4. 处理Paygreen回调

Paygreen会在支付完成后回调你的接口,需创建路由与处理方法:

路由(在routes/web.php或routes/api.php中添加)

Route::post('/paygreen/callback', [PaymentController::class, 'handleCallback'])->name('paygreen.callback');

控制器回调处理方法

public function handleCallback(Request $request)
{
    $client = app(PaygreenClient::class);
    
    // 验证回调签名,防止伪造请求
    $signatureIsValid = $client->getSignatureHandler()->validate(
        $request->all(),
        config('paygreen.api_secret'),
        $request->header('X-Paygreen-Signature')
    );
    
    if (!$signatureIsValid) {
        abort(403, 'Invalid signature');
    }
    
    // 提取支付状态与订单ID,更新本地订单
    $paymentStatus = $request->get('status');
    $orderId = $request->get('order_id');
    
    if ($paymentStatus === 'SUCCESS') {
        // 标记订单为已支付
    } else {
        // 处理支付失败逻辑
    }
    
    // 返回200状态码告知Paygreen回调已接收
    return response()->json(['status' => 'ok'], 200);
}

注意事项

  • 确保.env中的变量与Paygreen后台的密钥、环境完全匹配
  • 沙箱环境与生产环境的配置需分开管理
  • 本地开发时,回调接口需通过ngrok等工具暴露公网地址,确保Paygreen能访问到

内容的提问来源于stack exchange,提问作者david walter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:55:30