HTTPRIO1 epttavm api

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
askorbik
Üye
Mesajlar: 13
Kayıt: 26 Oca 2019 04:48

HTTPRIO1 epttavm api

Mesaj gönderen askorbik » 26 Oca 2019 04:51

Merhaba;
epttavm ye api ile kategori listesini almak istiyorum ancak aşağıda yazdığım kod ile bir türlü alamadım, bu konuda yardımcı olacak arkadaş var mı veya yardım eder mi bilmiyorum ama yinede buraya yazmak istedim. yardımcı olan olursa çok sevinirim.

procedure TForm1.Button1Click(Sender: TObject);
var
kategori : epttservice.ArrayOfKategoriDetay;
port :epttservice.IService;
begin

try

HTTPRIO1 := THTTPRIO.Create(self);
HTTPRIO1.HTTPWebNode.UserName := trim(edit1.Text);
HTTPRIO1.HTTPWebNode.Password := trim(edit2.Text);

port := epttservice.GetIService(True,'',HTTPRIO1);

memo1.Lines.Add(port.GetVersion);

// setlength(kategori,length(port.KategoriListesi)) ;
// kategori := port.KategoriListesi;
// memo1.Lines.Add(kategori[0].KategoriAdi);

Except
on Ex: Exception do
ShowMessage(Ex.ClassName + ' : ' + Ex.Message);
end;
end;
aldığım hata : an error occurred when verifying security for the message web service

epttavm api dökümanında yazan;
1. Sisteme Bağlantı Kurma
Web servisleri Microsoft ASP.Net 4.0 Windows Communication Foundation (WCF) teknolojisi
ile form authentication kullanılarak yapılmıştır.
Web servisinin kullanıldığı açık kaynak örnek c# projesi istendiği zaman temin edilebilir.
Web servisleri çağrılmadan önce tedarikçiye verilen kullanıcı adı ve şifre ile sistem bağlantısı
yapılır.
ServiceClient web = new ServiceClient();
web.ClientCredentials.UserName.UserName = "kullanıcı adı" ;
web.ClientCredentials.UserName.Password = "kullanıcı şifre" ;
web.Open();
Bu bağlantı sonucu Tedarikçi bilgilerinin kontrolü yapılır. Tedarikçinin kullanıcı bilgileri doğru
olması halinde işlem yapabilir.

mkysoft
Kıdemli Üye
Mesajlar: 2988
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: HTTPRIO1 epttavm api

Mesaj gönderen mkysoft » 27 Oca 2019 04:29

Anladığım kadarıyla kullanıcı adı şifreyi SoapHeader'da göndermeniz gerekiyor. Paylaştığınız kod bloğu, http başlığında kullanıcı adı şifresi basic authentication yöntemiyle gönderiyor. Aşağıdaki iki paylaşım size yol gösterecektir.
Delphi'de soap header gönderimi: https://stackoverflow.com/questions/137 ... -in-delphi
Php'de yazılmış epttavm entegrasyonunun soapheader kısmı: https://github.com/ePttAVM/api-client/b ... Header.php

askorbik
Üye
Mesajlar: 13
Kayıt: 26 Oca 2019 04:48

Re: HTTPRIO1 epttavm api

Mesaj gönderen askorbik » 28 Oca 2019 07:59

Merhaba; öncelikle ilğilendiğiniz için teşekkür ederim. ilk paylaşım linkinde username ve passwordu soap header olarak gönderiyorum ama sonuç yine aynı hata veriyor. php de yazılan soapheader incelediğimde UsernameToken şeklinde username ve passwordu dakapsayan sınıfı soapheader e gönderiyor ancak ben bir türlü bu şeklinde bir sınıf oluşturup gönderemedim. php de yazılan epttavm nın soap header kısmını delphiye uyarlayamadım yardımcı olursanız sevinirim.

mkysoft
Kıdemli Üye
Mesajlar: 2988
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: HTTPRIO1 epttavm api

Mesaj gönderen mkysoft » 28 Oca 2019 08:19

Php kodunda görebileceğiniz wss-wssecurity-secext anahtar kelimeniz. Php kodunda geçen UsernameToken sadece boş bir class'a atanmış SoapVar tipinde bir özellik.
Şu bağlantıda Delphi örneği mevcut: http://adhainestech.ca/delphi-soap-and-wsse/

askorbik
Üye
Mesajlar: 13
Kayıt: 26 Oca 2019 04:48

Re: HTTPRIO1 epttavm api

Mesaj gönderen askorbik » 28 Oca 2019 08:52

delphi örnegini projeye ekledim ama yine aynı hata alıyorum. hata : an error occurred when verifying security for the message web service

uses soap.wsse.security.userpass;

procedure TForm1.Button1Click(Sender: TObject);
var
i:Integer;
kategori : pttservice.ArrayOfKategoriDetay;
kat:pttservice.KategoriDetay2;
port :pttservice.IService;
//Cred : TSOAPCredentials;
kimlik:TSOAPHeader;
begin

try

kimlik := Security.Create(edit1.Text,edit2.Text);


HTTPRIO1 := THTTPRIO.Create(nil);

// HTTPRIO1.SOAPHeaders.Send(kimlik);

port:=pttservice.GetIService(True,'',HTTPRIO1);

HTTPRIO1.SOAPHeaders.Send(kimlik);

// Cred := TSOAPCredentials.Create;
// Cred.UserName := edit1.Text;
// Cred.Password := edit2.Text;
// HTTPRIO1.SOAPHeaders.Send(Cred);

// kategori := port.TedarikciAltKategoriListesi;

memo1.Lines.Add(port.GetVersion);

// setlength(kategori,length(port.KategoriListesi)) ;
// kategori := port.KategoriListesi;

// kategori := port.KategoriListesi;
//
// memo1.Lines.Add(kategori[0].KategoriAdi);

Except
on Ex: Exception do
ShowMessage(Ex.ClassName + ' : ' + Ex.Message);
end;

end;

mkysoft
Kıdemli Üye
Mesajlar: 2988
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: HTTPRIO1 epttavm api

Mesaj gönderen mkysoft » 28 Oca 2019 09:13

SoapUI (yada türevleri) ile Delphi'den çıkan xml'i kontrol ettiniz mi? Soap header kısmında girdiğiniz bilgileri görebildiniz mi?

askorbik
Üye
Mesajlar: 13
Kayıt: 26 Oca 2019 04:48

Re: HTTPRIO1 epttavm api

Mesaj gönderen askorbik » 28 Oca 2019 09:24

epttavm api dökümanında xml ile ilgili hiç bir kod yok o yüzden neyi gönderip cevabını alacağımı bilmiyorum. ayrıca web servis hakkında daha önceden hiç çalışmadım ilk defa uğraşıyorum. n11 api de hem xml hem java kodları var onda hiç bir sıkıntım olmadı n11in tüm fonk. kullanıyorum.

eptt api döküman içeriği
1. Sisteme Bağlantı Kurma
Kullanılacak olan web servisi adresi aşağıdadır;
https: //ws.epttavm.com:83/service.svc/service?wsdl
Web servisleri Microsoft ASP.Net 4.0 Windows Communication Foundation (WCF) teknolojisi
ile form authentication kullanılarak yapılmıştır.
Web servisinin kullanıldığı açık kaynak örnek c# projesi istendiği zaman temin edilebilir.
Web servisleri çağrılmadan önce tedarikçiye verilen kullanıcı adı ve şifre ile sistem bağlantısı
yapılır.
ServiceClient web = new ServiceClient();
web.ClientCredentials.UserName.UserName = "kullanıcı adı" ;
web.ClientCredentials.UserName.Password = "kullanıcı şifre" ;
web.Open();
Bu bağlantı sonucu Tedarikçi bilgilerinin kontrolü yapılır. Tedarikçinin kullanıcı bilgileri doğru
olması halinde işlem yapabilir.
2. Toplu Stok Bilgisi Sorgulama
Bu fonksiyon ile tedarikçi kendisine ait stokları listeleyebilir.
Bu fonksiyonun aldığı parametreler;
ShopId : (int) Tedarikçinin ID bilgisi
SearchKategoriId : (int) Listelenecek Ana Kategori ID
bilgisi
SearchAltKategoriId : (int) Listelenecek Alt Kategori ID bilgisi
SearchUrunAdi : (string) Urun Adları arasında arama
SearchBarkod : (string) Urun Barkodları arasında arama
SearchAktifPasif : (int) (0 – Hepsi, 1-Aktif, 2-Pasif)
SearchMevcut : (int) (0 – Hepsi, 1-Aktif, 2-Pasif)
StokKontrolDetay[] stokKontrolListesi = web.StokKontrolListesi(
ShopId,
SearchKategoriId,
SearchAltKategoriId,
SearchUrunAdi,
SearchBarkod,
SearchAktifPasif,
SearchMevcut
)
Fonksiyonun döndürdüğü sonuç StokKontrolDetay listesidir
3. BarkodKontrol
Bu fonksiyon ile tedarikçi kendisine ait olan stokları barkod kodu kullanarak sorgulayabilir. Bu
fonksiyonun amacı sistemde , konu olan barkodlu ürün olup olmadığının sorgulanmasıdır.
Bu fonksiyonun aldığı parametreler;
Barkod : (string) Urun Barkodları arasında arama
ShopId : (int) Tedarikçinin ID bilgisi
StokKontrolDetay detay = web.BarkodKontrol(Barkod,TedarikciId);
Fonksiyonun döndürdüğü sonuç StokKontrolDetay’ dır.
// StokKontrolDetay Class ’ı aşağıda gösterilmiştir.
Eğer detay.Durum alanı “Yeni” sonucunu döndürüyor ise bu ürün daha önce kaydedilmemiştir.
Eğer detay.Durum alanı “Mevcut” değeri döndürüyor ise bu ürün daha önce kaydedilmiştir.
Örnek;
if (detay.Durum == KayitDurum.Yeni)
MessageBox.Show( "yeni ürün" );
Else
MessageBox.Show( "mevcut ürün" );
4. KategoriListesi
ePttAvm tarafından kullanılan kategori bilgileri listelenir.
Çağrılacak olan fonksiyon;
KategoriDetay[] kategoriList = web.KategoriListesi();
Fonksiyonun döndürdüğü sonuç KategoriDetay ’dır;
5. AltKategoriListesi
ePttAVm tarafından kullanılan alt kategori bilgileri listelenir.
Çağrılacak olan fonksiyon;
AltKategoriDetay [] altKategoriList = web.AltKategoriListesi();
Fonksiyonun döndürdüğü

askorbik
Üye
Mesajlar: 13
Kayıt: 26 Oca 2019 04:48

Re: HTTPRIO1 epttavm api

Mesaj gönderen askorbik » 28 Oca 2019 09:51

SoapUI kurdum kategori listesinde headera username password ekledim ondada xml cevabı aynı hata :an error occurred when verifying security for the message web service

askorbik
Üye
Mesajlar: 13
Kayıt: 26 Oca 2019 04:48

Re: HTTPRIO1 epttavm api

Mesaj gönderen askorbik » 28 Oca 2019 09:52

xml cevap
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode xmlns:a="http://docs.oasis-open.org/wss/2004/01/ ... /faultcode>
<faultstring xml:lang="tr-TR">An error occurred when verifying security for the message.</faultstring>
</s:Fault>
</s:Body>
</s:Envelope>

askorbik
Üye
Mesajlar: 13
Kayıt: 26 Oca 2019 04:48

Re: HTTPRIO1 epttavm api

Mesaj gönderen askorbik » 28 Oca 2019 09:55

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode xmlns:a="xxhttp://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">a:InvalidSecurity</faultcode>
<faultstring xml:lang="tr-TR">An error occurred when verifying security for the message.</faultstring>
</s:Fault>
</s:Body>
</s:Envelope>

mkysoft
Kıdemli Üye
Mesajlar: 2988
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: HTTPRIO1 epttavm api

Mesaj gönderen mkysoft » 28 Oca 2019 10:57

Çalışan bir SoapUI projesi ekledim. Header kısmında Username bilgisinin eklenmesi gerekiyor. Örnek request:

Kod: Tümünü seç

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/">
   <soapenv:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"><wsse:UsernameToken wsu:Id="UsernameToken-976AED0AF65A74A7FE15487089501963"><wsse:Username>test</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">test</wsse:Password><wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">O1Opk1Bn5RLHQVMHwWgDVQ==</wsse:Nonce><wsu:Created>2019-01-28T20:55:50.196Z</wsu:Created></wsse:UsernameToken></wsse:Security></soapenv:Header>
   <soapenv:Body>
      <tem:GetVersion/>
   </soapenv:Body>
</soapenv:Envelope>
Cevap:

Kod: Tümünü seç

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body>
      <s:Fault>
         <faultcode>s:Client</faultcode>
         <faultstring xml:lang="tr-TR">Check User okuma hatası = Gecersiz kullanici adi veya sifre</faultstring>
      </s:Fault>
   </s:Body>
</s:Envelope>
Dosya ekleri
epttavm-soapui-project.xml.zip
(10.13 KiB) 24 kere indirildi

askorbik
Üye
Mesajlar: 13
Kayıt: 26 Oca 2019 04:48

Re: HTTPRIO1 epttavm api

Mesaj gönderen askorbik » 28 Oca 2019 11:06

soapUI de request özelliklerine username password ekledim wss-password type i passwordtext ayarlayınca hepsi çalışıyor herhangi bir header değeri ekleyince çalışmıyor yani request te hiçbir şey ayarlamadan username password ve wss pasword type yapınca sorunsuz sonuçlar geliyor. delphide httprio bileşenine wss pasword type ı password text olarak nasıl ayarlayacam onu bulamadım.

mkysoft
Kıdemli Üye
Mesajlar: 2988
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: HTTPRIO1 epttavm api

Mesaj gönderen mkysoft » 29 Oca 2019 04:57

Paylaştığım Delphi makalesi de benzer verileri içeriyor görünüyor. Kodunuzun gönderdiği soap xmL'ini kontrol ettiniz mi? Neresi eksik üretiliyor? php'ci arkadaşın yaptığı gibi kodunuzu paylaşabilirseniz daha kolay yardımcı olabiliriz.

askorbik
Üye
Mesajlar: 13
Kayıt: 26 Oca 2019 04:48

Re: HTTPRIO1 epttavm api

Mesaj gönderen askorbik » 29 Oca 2019 09:33

delphi makalesinde soap headerdan veri gönderiyor soapui de headerdan username password gönderince aynı hatayı alıyorum sopaui de header e hiç bir şey eklemiyorum request Properties kısmında usermane password authentication type: No authentication, wss-password Type: PasswordText ayarlayınca sıkıntısız çalışıyor yani anladığım kadarıyla httprio ya header eklemeden password ve username ekleyim soapui deki wss-password type i de password text yapmam lazım httprio da HTTPRIO1.HTTPWebNode.UserName ve HTTPRIO1.HTTPWebNode.Password kısımlarını ayarlıyorum ama wss-password type kısımını nasıl yapacağımı bulamadım

mkysoft
Kıdemli Üye
Mesajlar: 2988
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: HTTPRIO1 epttavm api

Mesaj gönderen mkysoft » 29 Oca 2019 10:15

@askobirlik sadece header derseniz konu karışıyor. http header var, soap header var, bunlar ayrı şeyler. Bağlantıda paylaşılan Delphi kodu görebildiğim kadarıyla soap header'a ekleme yapıyor. Dediğim gibi sizin için çalışan bir örnek geliştirmeye ayıracak maalesef vaktim yok, siz yaptığınız kadarını paylaşırsanız inceleyebiliriz.

Cevapla