如何在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
相关产品推荐
相关产品推荐

