mewebstudio / pos

Türk bankaları için sanal pos paketi (PHP)
Other
266 stars 102 forks source link

Akbank Hash Mismatch! Hatası #188

Closed evrenonur closed 7 months ago

evrenonur commented 7 months ago
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;
}

} `

nuryagdym commented 7 months ago

Merhabalar,

evrenonur commented 7 months ago
  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ü.