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

如何在Laravel中通过Omnipay集成NMI支付网关?

在Laravel中集成Omnipay-NMI支付网关

Omnipay是一套提供统一支付API的工具库,能快速对接各类支付网关。下面是在Laravel中集成NMI支付网关的具体步骤:

1. 安装依赖包

通过Composer安装Omnipay核心库、NMI驱动以及Laravel集成包:

composer require league/omnipay omnipay/nmi laravel/omnipay

2. 配置Laravel项目

  • 发布Omnipay配置文件:
    php artisan vendor:publish --provider="Omnipay\Laravel\OmnipayServiceProvider"
    
  • 在config/omnipay.php中添加NMI网关配置:
    'gateways' => [
        'nmi' => [
            'driver' => 'NMI',
            'api_key' => env('NMI_API_KEY'),
            'testMode' => env('APP_DEBUG', false),
        ],
    ],
    
  • 在.env文件中填入NMI提供的API密钥:
    NMI_API_KEY=你的NMI_API_KEY
    

3. 编写支付业务逻辑

创建一个支付服务类封装NMI的支付操作(示例):

<?php

namespace App\Services;

use Omnipay\Omnipay;

class PaymentService
{
    protected $gateway;

    public function __construct()
    {
        $this->gateway = Omnipay::create('NMI');
        $this->gateway->setApiKey(config('omnipay.gateways.nmi.api_key'));
        $this->gateway->setTestMode(config('omnipay.gateways.nmi.testMode'));
    }

    // 处理信用卡支付
    public function processCreditCardPayment(array $params)
    {
        try {
            $response = $this->gateway->purchase([
                'amount' => $params['amount'],
                'currency' => 'USD',
                'card' => [
                    'number' => $params['card_number'],
                    'expiryMonth' => $params['expiry_month'],
                    'expiryYear' => $params['expiry_year'],
                    'cvv' => $params['cvv'],
                    'firstName' => $params['first_name'],
                    'lastName' => $params['last_name'],
                ],
            ])->send();

            if ($response->isSuccessful()) {
                return [
                    'success' => true,
                    'transaction_id' => $response->getTransactionReference(),
                    'message' => '支付成功'
                ];
            }

            return [
                'success' => false,
                'message' => $response->getMessage()
            ];
        } catch (\Exception $e) {
            return [
                'success' => false,
                'message' => $e->getMessage()
            ];
        }
    }

    // 处理退款
    public function processRefund(array $params)
    {
        try {
            $response = $this->gateway->refund([
                'transactionReference' => $params['transaction_id'],
                'amount' => $params['amount'],
            ])->send();

            if ($response->isSuccessful()) {
                return [
                    'success' => true,
                    'message' => '退款成功'
                ];
            }

            return [
                'success' => false,
                'message' => $response->getMessage()
            ];
        } catch (\Exception $e) {
            return [
                'success' => false,
                'message' => $e->getMessage()
            ];
        }
    }
}

4. 在控制器中调用服务

示例控制器代码,处理前端支付请求:

<?php

namespace App\Http\Controllers;

use App\Services\PaymentService;
use Illuminate\Http\Request;

class PaymentController extends Controller
{
    protected $paymentService;

    public function __construct(PaymentService $paymentService)
    {
        $this->paymentService = $paymentService;
    }

    public function pay(Request $request)
    {
        $validated = $request->validate([
            'amount' => 'required|numeric|min:0.01',
            'card_number' => 'required|digits:16',
            'expiry_month' => 'required|digits_between:1,2|min:1|max:12',
            'expiry_year' => 'required|digits:4|min:' . date('Y'),
            'cvv' => 'required|digits_between:3,4',
            'first_name' => 'required|string',
            'last_name' => 'required|string',
        ]);

        $result = $this->paymentService->processCreditCardPayment($validated);

        return response()->json($result);
    }
}

5. 测试注意事项

  • NMI测试环境可使用测试卡号4111111111111111,过期日期设为未来年月,CVV填123。
  • 测试时确保testMode配置为true,生产环境切换为false。

内容的提问来源于stack exchange,提问作者Lingaraju DP

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:07:40