Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dogrulama.. #20

Closed
metin71 opened this issue Jan 29, 2021 · 14 comments
Closed

dogrulama.. #20

metin71 opened this issue Jan 29, 2021 · 14 comments

Comments

@metin71
Copy link

metin71 commented Jan 29, 2021

öncelikle kodlamanız için tşkler.. eksiklerimi de yapabilirsem çok işime yarayacaktır..

sms dogrulama kısmını yapamadım.. telefon numarasına sms gönderimi sağlatıyorum ama verdiği kod ile gelen kodu gönderiyorum sunucu hatası diyor sürekli..

birde hangi faturayı onaylıyacağımızı nasıl ayarlıyoruz. çözemedim..

yardımcı olursanız sevinirim.. tşkler..

@furkankadioglu
Copy link
Owner

Test sunucusunda deniyorsanız eğer orada SMS doğrulama modülü yok dolayısıyla gerçek hesapta denemeniz gerekiyor. Sorun burda olabilir mi?

Faturanın idsini belirtiyorsunuz. Şu örnek işinize yarayacaktır:
$oldInvoice = new Invoice(); $oldInvoice->setUuid("e8277cfa-4ac9-11ea-a5b5-acde48001122"); $client->setInvoice($oldInvoice)->getInvoiceFromAPI();

@metin71
Copy link
Author

metin71 commented Feb 6, 2021

dediğiniz gibi yapıyorum.. gerçek serverda deniyorum... bu hatayı alıyorum bu seferde..

Array
(
[error] => 1
[messages] => Array
(
[0] => Genel Sistem Hatası:java.lang.NullPointerException
)

[metadata] => Array
    (
        [optime] => 20210206164929+0300
    )

)

Fatal error: Uncaught exception 'furkankadioglu\eFatura\Exceptions\ApiException' with message 'Sunucu taraflı bir hata oluştu!' in
/public_html/admin/vendor/efatura/furkankadioglu/efatura/src/InvoiceManager.php:324 Stack trace: #0 public_html/admin/vendor/efatura/furkankadioglu/efatura/src/InvoiceManager.php(783): furkankadioglu\eFatura\InvoiceManager->checkError(Array) #1
/public_html/admin/faturaimzala.php(48): furkankadioglu\eFatura\InvoiceManager->verifySMSCode('IR17U9', '3dkksgpzma1u5y', '4c27efb2-6803-1...') #2 {main} thrown in /public_html/admin/vendor/efatura/furkankadioglu/efatura/src/InvoiceManager.php on line 324

@metin71
Copy link
Author

metin71 commented Feb 6, 2021

sms dogrulama sorunu güncellemeniz ile giderilmiş. uzun süredir bekleyince dosyalar eski kalmış...

yanlız sms dogrulama onaylıyor şifreyi doğruluyor fakat. gib kendi üzerinden fatura imzasız görünüyor.? sistem hatada vermiyor..

@furkankadioglu
Copy link
Owner

Acaba projeyi güncelleyip son halini atar mısınız sorun yaşadığınız yeri anlayalım ona göre bir çözüm üretelim.

@furkankadioglu furkankadioglu reopened this Feb 7, 2021
@metin71
Copy link
Author

metin71 commented Feb 7, 2021

furkan bey.. güncel halini attım.. imza için uuid leri gönderiyorum sms geliyor onaylıyorum.. onaylandı diye 1 sonucu alıyorum.. ama gibin sitesinde imzasız görünüyor halen herhangi bir hata almıyorum..
imza token ve onaylama tokenları değişiyor onlar ile alakalı olabilir mi ?

@metin71
Copy link
Author

metin71 commented Feb 9, 2021

İmzalama için kullandığım kodlar bu şekilde.. yanlış bir durum varmı anlamayamadım.. sistemde kayıtlı telefon numara ve kayıtlı olmayan telefon numarasında imzalama deniyorum.. sonuç hep başarılı diyor ama gib in sitesinden baktığımda onaylı görünmüyor anlayamadım sorunu..

<?
$client = new InvoiceManager();
$client->setUsername($gibk)->setPassword($gibs);
$client->connect();

$rsbul = mysql_query("select * from fatura where id='$id' order by id desc");
$rssay = mysql_num_rows($rsbul);
if($rssay > 0){
	while($rs = mysql_fetch_array($rsbul)){
		
$oldInvoice = new Invoice(); 
$oldInvoice->setUuid($rs["c16"]); 
$client->setInvoice($oldInvoice)->getInvoiceFromAPI();

if(@$sonuc=="ok"){
	$sonuc = $client->verifySMSCode($_POST["sifre"],$_POST["id"]);
	if($sonuc=="1"){
		echo "SMS şifreniz doğrulandı, işlem başarılı.";
		$client->logOutFromAPI();
	}else{
		echo "SMS şifrenizi yanlış girdiniz";
	}
}else{
	
$ids = $client->sendSMSVerification("5057099335");
?>
<form action="" method="post">
<input type="hidden" name="sonuc" value="ok"/>
<input type="hidden" name="id" value="<?=$ids?>"/>
<input type="text" name="sifre" placeholder="Sms Şifresi"/>
<input type="submit" value="Gönder"/>
</form>
<?
}

	}
}
?>

@brkygncn
Copy link

@furkankadioglu Bey, Invoice Manager üzerinde aşağıda bahsettiğiniz kodu tanımlamak maalesef bir işe yaramıyor. Çünkü verifySMSCode ile gönderilen veri 'DATA' => $this->**invoices**, ancak getInvoiceFromAPI ile çağırdığınız veriler $this->**invoice**'e set ediliyor.

$oldInvoice = new Invoice(); $oldInvoice->setUuid("e8277cfa-4ac9-11ea-a5b5-acde48001122"); $client->setInvoice($oldInvoice)->getInvoiceFromAPI();

Ben sorunu getInvoicesFromAPI'yi kopyalayıp, bir ETTN filtresi koyarak aştım sorunu. getInvoicesFromAPI'yi kullanmanın güzel yanı ise tüm faturaları tek seferde onaya göndermenize de izin veriyor :)

  public function verifySMSCode($code, $operationId)
  {
      $data = [
          "SIFRE" => $code,
          "OID" => $operationId,
          'OPR' => 1,
          'DATA' => $this-> **invoices**,
      ];
     ...
}
    public function getInvoiceFromAPI(Invoice $invoice = null)
    {
        if ($invoice != null) {
            $this-> **invoice** = $invoice;
        }
        ...
    }
    public function getInvoicesFromAPI($startDate, $endDate)
        ...
        $this-> **invoices** = $body['data'];

        return $body;
    }

@furkankadioglu
Copy link
Owner

@brkygncn Paylaştığınız için çok teşekkür ederim, pull request gönderme imkanınız olur mu acaba?

@metin71
Copy link
Author

metin71 commented Feb 15, 2021

paylaşımınız içn tşkler.. bu şekilde hata veriyor bende.. gönderdiğiniz gibi kodlamaları düzenledim ama.. bu hatayı alıyorum.. normalde php 5.6 ya göre çalışıyorum düzenlemeleri o şekilde yapyıroum.. ama bu düzeltme 5.6 ve 7.3 hata veriyor.. anlayamadım malesef.. sizin kullandıgınız invoicemanager.php dosyasını tüm paylaşırsanız.. hatamızı görelim..

Parse error: syntax error, unexpected '**' (T_POW), expecting identifier (T_STRING) or variable (T_VARIABLE) or '{' or '$' in www\admin\vendor\efatura\furkankadioglu\efatura\src\InvoiceManager.php on line 581

@brkygncn
Copy link

@metin71 Metin Bey kusura bakmayın, normalde yazıyı ** içerisinde koyarsanız GitHub'ın style markdowna göre yazıyı kalın yapar, vurgu amaçlı kullanmıştım, ama kod içerisinde kalınca çalışmıyormuş. Furkan Bey güncelleme yapıncaya kadar geçici olarak aşağıdaki kodları kullanabilirsiniz.

@furkankadioglu Furkan Bey, pull requesti en yakın zamanda göndereceğim. Ancak sonradan filtreleme yerine jp üzerindeki table'da ETTN verisini göndererek de filtreye ihtiyaç duymadan halledebilir miyiz? Bende maalesef dokümantasyon yok, eğer linkini paylaşabilirseniz ben de inceleyebilirim.

Bu fonksiyon Onaylanmamış ve Silinmemiş tüm faturaları tek seferde onaylar

public function getUndeletedInvoicesFromAPI($startDate, $endDate)
    {
        $parameters = [
            "cmd" => "EARSIV_PORTAL_TASLAKLARI_GETIR",
            "callid" => Uuid::uuid1()->toString(),
            "pageName" => "RG_BASITTASLAKLAR",
            "token" => $this->token,
            "jp" => '{"baslangic":"' . $startDate . '","bitis":"' . $endDate . '","hangiTip":"5000/30000", "table":[]}'
        ];

        $body = $this->sendRequestAndGetBody(self::DISPATCH_PATH, $parameters);
        $this->checkError($body);

        // Array tipinden verilen tarih aralığında yer alan faturalar dönüyor
		$data = $body['data'];
		$dataFiltered = array();
		foreach($data as $item){
			if($item["onayDurumu"] == "Onaylanmadı"){
				array_push($dataFiltered, $item);
			}
		}
        $this->invoices = $dataFiltered;

        return $dataFiltered;
		//return $this->invoices;
    }

Bu fonksiyon Onaylanmamış ve ETTN'i belirtilen faturayı onaylar, ek olarak $ettn verisini paslamanız gerekir. Bu kodu henüz denemedim syntax hatası verebilir, ben tek seferde hepsini gönderdiğim yukarıdaki fonksiyonu kullanıyorum.

public function getEttnInvoiceFromAPI($startDate, $endDate, $ettn)
    {
        $parameters = [
            "cmd" => "EARSIV_PORTAL_TASLAKLARI_GETIR",
            "callid" => Uuid::uuid1()->toString(),
            "pageName" => "RG_BASITTASLAKLAR",
            "token" => $this->token,
            "jp" => '{"baslangic":"' . $startDate . '","bitis":"' . $endDate . '","hangiTip":"5000/30000", "table":[]}'
        ];

        $body = $this->sendRequestAndGetBody(self::DISPATCH_PATH, $parameters);
        $this->checkError($body);

        // Array tipinden verilen tarih aralığında yer alan faturalar dönüyor
        $data = $body['data'];
        $dataFiltered = array();
        foreach($data as $item){
	        if($item["onayDurumu"] == "Onaylanmadı" AND $item["ettn"] == $ettn ){
		        array_push($dataFiltered, $item);
	        }
        }

        $this->invoices = $dataFiltered;

        return $dataFiltered;
		//return $this->invoices;
    }

Verileri fonksiyona iletme tarafında da ben aşağıdaki şekilde bir yapı kullanıyorum,

$client = new InvoiceManager();

$client->setUsername($gibk)->setPassword($gibs);

$client->setDebugMode(false);
$client->connect();

$dateStart = "23/01/2021";
$dateEnd = date("d/m/Y");
$client->getUndeletedInvoicesFromAPI($dateStart, $dateEnd);

$result = $client->verifySMSCode($_POST["sifre"] , $_POST["id"]);
$client->logOutFromAPI();		

@metin71
Copy link
Author

metin71 commented Feb 17, 2021

tşkler.. burak bey.. gönderdiğiniz fonksiyonlar ile ettn ve tarih aralığına göre imzalama işlemi yapıyor.. şuan için önemli bir sorunum kalmadı sayenizde...

@ibrcan
Copy link
Contributor

ibrcan commented Mar 5, 2021

@furkankadioglu Başta sizlere çok teşekkür etmek istedim. Projeniz çok işime yaradı.
@brkygncn vermiş olduğunuz fonksiyon çok işime yaradı. projeye dahil edilmesi gerektiğini düşünüyorum. Ancak filtreleme yaptığımızda sadece 1 fatura onaylayabiliyoruz. Ben filtrelemeyi dizi şeklinde kullandım. Dizi şeklinde gönderdiğimizde istediğimiz faturayı onaylayabiliyoruz.
Bu fonksiyonun projeye dahil edilebileceğini düşünüyorum.

public function getEttnInvoiceFromAPIArray($startDate, $endDate, $ettn)
    {
        $parameters = [
            "cmd" => "EARSIV_PORTAL_TASLAKLARI_GETIR",
            "callid" => Uuid::uuid1()->toString(),
            "pageName" => "RG_BASITTASLAKLAR",
            "token" => $this->token,
            "jp" => '{"baslangic":"' . $startDate . '","bitis":"' . $endDate . '","hangiTip":"5000/30000", "table":[]}'
        ];
        $body = $this->sendRequestAndGetBody(self::DISPATCH_PATH, $parameters);
        $this->checkError($body);
        $data = $body['data'];
        $dataFiltered = array();
        foreach($data as $item){
	        if($item["onayDurumu"] == "Onaylanmadı" AND in_array($item["ettn"], $ettn)){
		        array_push($dataFiltered, $item);
	        }
        }
        $this->invoices = $dataFiltered;
        return $dataFiltered;
    }

@furkankadioglu
Copy link
Owner

@ibrcan ben teşekkür ederim, hem kullandığınız hem katkıda bulunduğunuz için. @brkygncn gibi katkıda bulunan, ilgilenenler olduğu için çok memnunum ve kendisine de ayrıca teşekkür ederim.

getEttnInvoiceFromAPIArray fonksiyonunu ekledim, lütfen birdaha ki sefere PR gönderin ki katkıda bulunanlara sizi de ekleyebiliyim.

Kolay gelsin 🙂

@SahinOzden
Copy link

SahinOzden commented Oct 6, 2022

@furkankadioglu Öncelikle elinize emeğinize sağlık. Katkı veren arkadaşlara da ayrıca teşekkürler... getEttnInvoiceFromAPIArray ekledim demişsiniz ben de nerde bu metod diye arıyorum. Composer ile indirdiğim için dosyalar eskide kalmış. şimdi zip ile indirdim composer ile indirilenlerin üzerine kaydettim teşekkürler... composerdan indirilen dosyalarla arasında çok fark var. 3 gündür çalışmayan kısımları çalıştırmaya çabalıyorum. Bir çok yerini düzeltmiştim ki bu issuelere bakmak sonradan aklıma geldi. Composer güncellemesi de yaparsanız süper olur naçizane tavsiyem...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants