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

Laravel 8集成iyzico支付加载表单返回Failure状态问题咨询

iyzico支付返回Failure状态排查及修复方案

第一步:先获取具体错误信息

iyzico接口返回Failure时会附带明确的错误描述,你可以先打印接口返回的完整结果定位问题:
在控制器的payment方法中调用paymentForm()后,添加如下代码打印完整返回值:

dd($payment->getRawResult());
// 或单独打印错误信息
dd($payment->getErrorMessage(), $payment->getErrorGroup());

根据返回的错误提示可以直接定位对应参数或配置问题。


第二步:修复必填参数缺失问题

iyzico创建支付表单接口要求必须传入以下字段,你的代码均未配置,是返回失败的核心原因:

1. 补充setForm方法内的必填参数

你当前的setForm只设置了会话ID和订单金额,还需要补充:

  • 实付金额paidPrice(无优惠时和price一致即可)
  • 货币类型currency(一般为\Iyzipay\Model\Currency::TL土耳其里拉)
  • 支付分组paymentGroup(一般为\Iyzipay\Model\PaymentGroup::PRODUCT)
  • 支付回调地址callbackUrl(用户支付完成后iyzico会推送支付结果到这个地址)

2. 调用所有必填的参数设置方法

你的控制器里只调用了setForm,其余必填的买家信息、地址信息、商品列表方法都没有调用,修改后的控制器代码示例:

public function payment()
{
    $iyzico = new Iyzico();
    $payment = $iyzico->setForm([
            'conversationID' => '123456789',
            'price' => '120.0',
            'paidPrice' => '120.0',
            'currency' => \Iyzipay\Model\Currency::TL,
            'paymentGroup' => \Iyzipay\Model\PaymentGroup::PRODUCT,
            'callbackUrl' => route('iyzico.callback') // 替换为你自己的回调路由
        ])
        // 补充买家信息,所有字段都是必填
        ->setBuyer([
            'id' => '1',
            'name' => 'test',
            'surname' => 'user',
            'email' => 'test@test.com',
            'gsmNumber' => '+905555555555',
            'identityNumber' => '11111111111', // 沙箱环境可使用测试身份证号
            'lastLoginDate' => '2023-01-01 12:00:00',
            'registrationDate' => '2023-01-01 12:00:00',
            'registrationAddress' => 'Test address',
            'ip' => request()->ip(),
            'city' => 'Istanbul',
            'country' => 'Turkey',
            'zipCode' => '34000'
        ])
        // 补充配送地址
        ->setShipping([
            'name' => 'test user',
            'city' => 'Istanbul',
            'country' => 'Turkey',
            'address' => 'Test address',
            'zipCode' => '34000'
        ])
        // 补充账单地址
        ->setBilling([
            'name' => 'test user',
            'city' => 'Istanbul',
            'country' => 'Turkey',
            'address' => 'Test address',
            'zipCode' => '34000'
        ])
        // 补充商品列表
        ->setItem([
            [
                'id' => 'item1',
                'name' => 'Test Product',
                'category1' => 'General',
                'itemType' => \Iyzipay\Model\BasketItemType::PHYSICAL,
                'price' => '120.0'
            ]
        ])
        ->paymentForm();

    $paymentContent = $payment->getCheckoutFormContent();
    $paymentStatus = $payment->getStatus();
    return view(
        'iyzico',
        compact('paymentContent', 'paymentStatus')
    );
}

3. 完善Iyzico类里的参数赋值逻辑

你现有的setBuyer、setShipping、setBilling、setItem方法都只设置了部分字段,需要把上面新增的必填字段补全到对应方法里,示例:

// setBuyer方法补全示例
public function setBuyer(array $params)
{
    $buyer = new \Iyzipay\Model\Buyer();
    $buyer->setId($params['id']);
    $buyer->setName($params['name']);
    $buyer->setSurname($params['surname']);
    $buyer->setEmail($params['email']);
    $buyer->setGsmNumber($params['gsmNumber']);
    $buyer->setIdentityNumber($params['identityNumber']);
    $buyer->setLastLoginDate($params['lastLoginDate']);
    $buyer->setRegistrationDate($params['registrationDate']);
    $buyer->setRegistrationAddress($params['registrationAddress']);
    $buyer->setIp($params['ip']);
    $buyer->setCity($params['city']);
    $buyer->setCountry($params['country']);
    $buyer->setZipCode($params['zipCode']);
    // 把创建的buyer对象赋值给request
    $this->request->setBuyer($buyer);
    return $this;
}

// setItem方法补全示例
public function setItem(array $items)
{
    foreach ($items as $key => $value) {
        $basketItem = new \Iyzipay\Model\BasketItem();
        $basketItem->setId($value['id']);
        $basketItem->setName($value['name']);
        $basketItem->setCategory1($value['category1']);
        $basketItem->setItemType($value['itemType']);
        $basketItem->setPrice($value['price']);
        array_push($this->basketItems, $basketItem);
    }
    $this->request->setBasketItems($this->basketItems);
    return $this;
}
// 同理补全setShipping、setBilling里的其余字段赋值

第三步:修复Blade模板渲染问题

你当前用{{ $paymentContent }}输出表单内容,Laravel Blade会自动转义HTML标签,导致表单无法正常渲染,需要改成非转义输出:

<article>
    <h1>odeme sayfa</h1>
    <div>
        {!! $paymentContent !!}
        {{ $paymentStatus }}
        <div id="iyzipay-checkout-form" class="responsive"></div>
    </div>
</article>

第四步:检查配置正确性

确认你Iyzico类里填写的沙箱apiKey、secretKey是从iyzico商户后台沙箱环境获取的正确值,没有填写错误。


内容的提问来源于stack exchange,提问作者ALAA ELDIN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:39:03