dogrulama..
Closed this issue · 14 comments
ö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..
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();
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
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..
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.
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 ?
İ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>
<?
}
}
}
?>
@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;
}
@brkygncn Paylaştığınız için çok teşekkür ederim, pull request gönderme imkanınız olur mu acaba?
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
@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();
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...
@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;
}
@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 🙂
@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...