mewebstudio/pos

Akbank Hash Mismatch! Hatası

Closed this issue · 2 comments

Information Description
Kütüphane versiyonu 0.16.1
PHP versiyonu 8.1
Gateway ismi EstPos
Banka ismi Akbank

Hatanın özeti

Hash Mismatch! hatası almaya başladım. 01.03.2024 tarihine kadar test ortamında yaptığım işlemlerde herhangi bir hata almamaktaydım. Fakat bugün ki işlemlerimde hata almaktayım. Kodumda herhangi bir değişiklik vs yapmadım.

Yazdığım Kod

`<?php

namespace App\Http\Controllers;

use Mews\Pos\Entity\Card\AbstractCreditCard;
use Mews\Pos\Gateways\AbstractGateway;

class TestController extends Controller
{
public function index()
{

    $account = \Mews\Pos\Factory\AccountFactory::createEstPosAccount(
        'akbank', //pos config'deki ayarın index name'i
        '100200000',
        '103243237admin',
        'TEST1010',
        AbstractGateway::MODEL_3D_PAY,
        '123456',
        AbstractGateway::LANG_TR
    );

    try {
        $pos = \Mews\Pos\Factory\PosFactory::createPosGateway($account);
        $pos->setTestMode(true);
    } catch (\Mews\Pos\Exceptions\BankNotFoundException | \Mews\Pos\Exceptions\BankClassNullException $e) {
    }

    $kartNo = '4256691944867646';

    $card = \Mews\Pos\Factory\CreditCardFactory::create(
        $pos,
        $kartNo,
        '30',
        '12',
        '000',
        'Onur Evren',
        $this->kartTipi($kartNo) == 'visa' ? AbstractCreditCard::CARD_TYPE_VISA : AbstractCreditCard::CARD_TYPE_MASTERCARD,

    );

    $id = rand(1, 1000).time();

    session()->put('id', $id);
    $order = [
        'id'          => $id,
        'amount'      => 100.00,
        'currency'    => 'TRY', //TRY|USD|EUR, optional. default: TRY
        'installment' => 0, //0 ya da 1'den büyük değer, optional. default: 0
        'success_url' => 'https://site.com/success',
        'fail_url'    => 'https://site.com/fail',
        //gateway'e gore zorunlu olan degerler ip adress
        'ip'          =>  'ip adresi', // EstPos, Garanti, KuveytPos, VakifBank
        'email'       => 'test@gmail.com', // EstPos, Garanti, KuveytPos, VakifBank
        'name'        => 'Onur Evren', // EstPos, Garanti
        'user_id'     => '11111141', // EstPos
        'rand'        => $id, // EstPos, Garanti, PayFor, InterPos, VakifBank. Rastegele değer.
        'lang' => AbstractGateway::LANG_TR, //LANG_TR|LANG_EN. Kullanıcının yönlendirileceği banka gateway sayfasının ve gateway'den dönen mesajların dili.
    ];




    $pos->prepare($order, \Mews\Pos\Gateways\AbstractGateway::TX_PAY, $card);

    try {
        $formData = $pos->get3DFormData();


    } catch (\Throwable $e) {
        print_r($e);
    }

    $client = new \GuzzleHttp\Client();
    $response = $client->request('POST', $formData['gateway'], [
        'form_params' => $formData['inputs']
    ]);
  echo $response->getBody()->getContents();
}

public function success()
{

    $id = session()->get('id');
    $order = [
        'id'          => $id,
        'amount'      => 100.00,
        'currency'    => 'TRY', //TRY|USD|EUR, optional. default: TRY
        'installment' => 0, //0 ya da 1'den büyük değer, optional. default: 0
        'success_url' => 'https://site.com/success',
        'fail_url'    => 'https://site.com/fail',
        //gateway'e gore zorunlu olan degerler ip adress
        'ip'          =>  'ip adresi', // EstPos, Garanti, KuveytPos, VakifBank
        'email'       => 'test@gmail.com', // EstPos, Garanti, KuveytPos, VakifBank
        'name'        => 'Onur Evren', // EstPos, Garanti
        'user_id'     => '11111141', // EstPos
        'rand'        => $id, // EstPos, Garanti, PayFor, InterPos, VakifBank. Rastegele değer.
        'lang' => AbstractGateway::LANG_TR, //LANG_TR|LANG_EN. Kullanıcının yönlendirileceği banka gateway sayfasının ve gateway'den dönen mesajların dili.
    ];

    $account = \Mews\Pos\Factory\AccountFactory::createEstPosAccount(
        'akbank', //pos config'deki ayarın index name'i
        '100200000',
        '103243237admin',
        'TEST1010',
        AbstractGateway::MODEL_3D_PAY,
        '123456',
        AbstractGateway::LANG_TR
    );


    try {
        $pos = \Mews\Pos\Factory\PosFactory::createPosGateway($account);
        $pos->setTestMode(true);
    } catch (\Mews\Pos\Exceptions\BankNotFoundException | \Mews\Pos\Exceptions\BankClassNullException $e) {
    }

// $card = \Mews\Pos\Factory\CreditCardFactory::create(
// $pos,
// '5571135571135575',
// '26',
// '12',
// '001',
// 'Onur Evren',
// AbstractCreditCard::CARD_TYPE_MASTERCARD,
//
// );

    $pos->prepare($order, \Mews\Pos\Gateways\AbstractGateway::TX_PAY);
    try  {
        $pos->payment(null);

        if ($pos->isSuccess()) {
            // Ödeme başarılı
            echo "Ödeme başarılı";
        } else {
            // Ödeme başarısız
            echo "Ödeme başarısız";
        }

        // Sonuç çıktısı
        dump($pos->getResponse());
        // response içeriği için /examples/template/_payment_response.php dosyaya bakınız.
    } catch (\Throwable $e) {
        // todo
    }



}

public function kartTipi($number){
$number=str_replace(" ", "", $number);

    $cardType = array(
        "visa"       => "/^4[0-9]{12}(?:[0-9]{3})?$/",
        "mastercard" => "/^5[1-5][0-9]{14}$/",
    );

    foreach ($cardType as $key => $value) {
        if (preg_match($value,$number))
        {
            $type= $key;
            break;
        }else{
            $type= false;
        }
    }
    return $type;
}

}
`

Merhabalar,

  1. Yönetimi kullanarak da çözülebiliyor. Haricinde bankayı aradığımda 100200000 mağaza numarasında şuanlık bir sıkıntı olduğunu söylediler. 100100000 kullanıp aynı zamanda 'akbank' alanını da 'akbankv3' yaptığımda sorun çözüldü.