Import WSDL ile efatura entegratöründen aldığım function

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Import WSDL ile efatura entegratöründen aldığım function

Mesaj gönderen denizfatihi »

Merhaba,

İmpord WSDL ile aldığım functionları nasıl kullanıyorum, DBGrid veya Memo içine nasıl alabilirim ?
Aşağıdaki şekilde denedim ama olmadı nerede hata yapıyorum ?
Yardımınız için şimdiden teşekkürler.

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
var
vknTckn : string;
begin

HTTPRIO1.Service:='Integration';
HTTPRio1.HTTPWebNode.UserName:=edit1.Text;
HTTPRio1.HTTPWebNode.Password:=edit2.Text;

GetIIntegration(False,'', HTTPRio1).GetUserAliasses(Edit3.text);
end;



Kod: Tümünü seç

// ************************************************************************ //
  // Namespace : http://tempuri.org/
  // transport : http://schemas.xmlsoap.org/soap/http
  // style     : document
  // use       : literal
  // binding   : BasicHttpBinding_IIntegration
  // service   : Integration
  // port      : BasicHttpBinding_IIntegration
  // URL       : https://efatura.uyumsoft.com.tr/Services/Integration
  // ************************************************************************ //
  IIntegration = interface(IInvokable)
  ['{46FC7005-0A31-5705-9E6A-EE413C913D60}']
    function  GetSystemDate: DateResponse; stdcall;
    function  IsEInvoiceUser(const vknTckn: string; const alias: string): FlagResponse; stdcall;
    function  GetEInvoiceUsers(const pagination: PagedQueryContext): SystemUsersResponse; stdcall;
    function  GetUserAliasses(const vknTckn: string): UserAliassesResponse; stdcall;
    function  SetXsltView(const type_: XsltViewType; const fileContent: string): FlagResponse; stdcall;
    function  ValidateInvoice(const invoice: InvoiceType): FlagResponse; stdcall;
    function  GetInboxInvoices(const query: InboxInvoiceQueryModel): InvoicesResponse; stdcall;
    function  GetInboxInvoiceList(const query: InboxInvoiceListQueryModel): InboxInvoiceListResponse; stdcall;
    function  GetInboxInvoice(const invoiceId: string): InvoiceResponse; stdcall;
    function  GetInboxInvoicesData(const query: InboxInvoiceQueryModel): InvoicesDataResponse; stdcall;
    function  GetInboxInvoiceData(const invoiceId: string): InvoiceDataResponse; stdcall;
    function  QueryInboxInvoiceStatus(const invoiceIds: ArrayOfString): InvoiceStatusResponse; stdcall;
    function  SetInvoicesTaken(const invoices: ArrayOfString): FlagResponse; stdcall;
    function  SendDocumentResponse(const responses: ArrayOfDocumentResponseInfo): FlagResponse; stdcall;
    function  QueryDocumentResponseStatus(const invoiceIds: ArrayOfString): DocumentResponseStatusResponse; stdcall;
    function  GetOutboxInvoices(const query: InvoiceQueryModel): InvoicesResponse; stdcall;
    function  GetOutboxInvoiceList(const query: OutboxInvoiceListQueryModel): OutboxInvoiceListResponse; stdcall;
    function  GetOutboxInvoice(const invoiceId: string): InvoiceResponse; stdcall;
    function  GetOutboxInvoicesData(const query: InvoiceQueryModel): InvoicesDataResponse; stdcall;
    function  GetOutboxInvoiceData(const invoiceId: string): InvoiceDataResponse; stdcall;
    function  QueryOutboxInvoiceStatus(const invoiceIds: ArrayOfString): InvoiceStatusResponse; stdcall;
    function  SaveAsDraft(const invoices: ArrayOfInvoiceInfo): InvoiceIdentitiesResponse; stdcall;
    function  SendInvoice(const invoices: ArrayOfInvoiceInfo): InvoiceIdentitiesResponse; stdcall;
    function  CompressedSaveAsDraft(const data: BinaryRequestData): InvoiceIdentitiesResponse; stdcall;
    function  CompressedSendInvoice(const data: BinaryRequestData): InvoiceIdentitiesResponse; stdcall;
    function  SendDraft(const invoiceIds: ArrayOfString): FlagResponse; stdcall;
    function  CancelDraft(const invoiceIds: ArrayOfString): FlagResponse; stdcall;
    function  GetInboxInvoiceView(const invoiceId: string): InvoiceViewResponse; stdcall;
    function  GetOutboxInvoiceView(const invoiceId: string): InvoiceViewResponse; stdcall;
    function  GetOutboxInvoiceResponseView(const invoiceId: string): InvoiceViewResponse; stdcall;
    function  GetInboxInvoiceStatusWithLogs(const invoiceIds: ArrayOfString): InvoiceStatusWithLogResponse; stdcall;
    function  GetOutboxInvoiceStatusWithLogs(const invoiceIds: ArrayOfString): InvoiceStatusWithLogResponse; stdcall;
    function  RetrySendInvoices(const invoiceIds: ArrayOfString): Response; stdcall;
    function  CloneInvoices(const invoiceIds: ArrayOfString): CloneInvoiceServiceResponse; stdcall;
    function  CancelEArchiveInvoice(const request: EArchiveCancelInvoiceContext): FlagResponse; stdcall;
    function  GetInboxInvoicePdf(const invoiceId: string): InvoiceDataResponse; stdcall;
    function  GetOutboxInvoicePdf(const invoiceId: string): InvoiceDataResponse; stdcall;
    function  ChangeInvoiceArchiveStatus(const invoiceIds: ArrayOfString; const isInbox: Boolean; const isArchived: Boolean): FlagResponse; stdcall;
  end;

function GetIIntegration(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): IIntegration;


implementation
  uses System.SysUtils;

function GetIIntegration(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IIntegration;
const
  defWSDL = 'https://efatura.uyumsoft.com.tr/Services/Integration?wsdl';
  defURL  = 'https://efatura.uyumsoft.com.tr/Services/Integration';
  defSvc  = 'Integration';
  defPrt  = 'BasicHttpBinding_IIntegration';
var
  RIO: THTTPRIO;
begin
  Result := nil;
  if (Addr = '') then
  begin
    if UseWSDL then
      Addr := defWSDL
    else
      Addr := defURL;
  end;
  if HTTPRIO = nil then
    RIO := THTTPRIO.Create(nil)
  else
    RIO := HTTPRIO;
  try
    Result := (RIO as IIntegration);
    if UseWSDL then
    begin
      RIO.WSDLLocation := Addr;
      RIO.Service := defSvc;
      RIO.Port := defPrt;
    end else
      RIO.URL := Addr;
  finally
    if (Result = nil) and (HTTPRIO = nil) then
      RIO.Free;
  end;
end;


destructor ShipmentInformation.Destroy;
begin
  System.SysUtils.FreeAndNil(FSendDate);
  System.SysUtils.FreeAndNil(FCarier);
  inherited Destroy;
end;

procedure ShipmentInformation.SetCarier(Index: Integer; const AShipmentCarier: ShipmentCarier);
begin
  FCarier := AShipmentCarier;
  FCarier_Specified := True;
end;

function ShipmentInformation.Carier_Specified(Index: Integer): boolean;
begin
  Result := FCarier_Specified;
end;

destructor PagedResponseOfInvoiceInfo.Destroy;
var
  I: Integer;
begin
  for I := 0 to System.Length(FItems)-1 do
    System.SysUtils.FreeAndNil(FItems[I]);
  System.SetLength(FItems, 0);
  inherited Destroy;
end;

procedure PagedResponseOfInvoiceInfo.SetItems(Index: Integer; const AArrayOfInvoiceInfo: ArrayOfInvoiceInfo);
begin
  FItems := AArrayOfInvoiceInfo;
  FItems_Specified := True;
end;

function PagedResponseOfInvoiceInfo.Items_Specified(Index: Integer): boolean;
begin
  Result := FItems_Specified;
end;
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: Import WSDL ile efatura entegratöründen aldığım function

Mesaj gönderen adelphiforumz »

Selamlar

ilk öncelikle önerim wsdl importunu imkanın var ise Delphinin XE sürümlerinden önceki bir sürüm ile import etmen
bende XE7 ile import ettiğimde birçok wsdl yapısı çalışmıyorken Delphi 2010 ile yaptıklarım sorunsuz çalışıyor

bu import işleminden sonra önce doğrulama
sonra belirli tarih aralığındaki faturaları listeleme
ve gelen liste içerisinden detayları çekme şeklinde bir kurgu ile ve gelen dataların içerisinde dönerek
istediğin verileri alabilirsin.
Geri dönüş değerleri Arrayof yapısında gördüğüm kadarı ile çok zorlanmıyacağını düşünüyorum

iyi çalışmalar
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
denizfatihi
Üye
Mesajlar: 254
Kayıt: 16 Şub 2004 06:12
Konum: istanbul

Re: Import WSDL ile efatura entegratöründen aldığım function

Mesaj gönderen denizfatihi »

Selam,

Berlin 10.1 kullanıyorum sorun olur mu, ve küçükte olsa functionlarla ilgili bir örnek kod verebilir misiniz ?
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: Import WSDL ile efatura entegratöründen aldığım function

Mesaj gönderen adelphiforumz »

Test kullanıcı hesabı bilgisi verirseniz basit bir uygulama yapıp paylaşabilirim.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: Import WSDL ile efatura entegratöründen aldığım function

Mesaj gönderen adelphiforumz »

Selamlar
delphi de Uyumsoft e-fatura ile entegrasyon yapan varmı
eğer var ise nasıl bir yol izlenmesine fikir vermesi açısından
autantication ve fatura list gibi örneklerin basit bir kodunu paylaşabilirmi

teşekkürler
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Import WSDL ile efatura entegratöründen aldığım function

Mesaj gönderen mkysoft »

Şurada https://github.com/isisedonusum/ şirketimiz için örnekler var, belki fikir verebilir. Her bir sürümde farklı sıkıntılar mevcut, çoğu zaman oluşan kodlarda değişiklik yapmak gerekiyor çalışması için. Tavsiyem SOAPUI gibi test araçları kullanmanız. Delphiden çıkan istekleri SOAPUI'ın mock servileri ile alabilirsiniz. SOAPUI'ın gönderdiği ile Delphi'nin gönderdiğini karşılaştırarak eksikleri tamamlamaya çalışın.
Kullanıcı avatarı
enes6635
Üye
Mesajlar: 21
Kayıt: 09 Eki 2018 11:09
İletişim:

Re: Import WSDL ile efatura entegratöründen aldığım function

Mesaj gönderen enes6635 »

Hocam ben e-fatura entegrasyonu yapmaya çalışıyorum. Ancak sizin örnek kodlarınıza bakarken user auth işlemini anlayamadım.Detay verebilir misiniz

Kod: Tümünü seç

 HTTPRIO1 := THTTPRIO.Create(Form1);
  HTTPRIO1.HTTPWebNode.UserName := txtUser.Text;
  HTTPRIO1.HTTPWebNode.Password := txtPass.Text;
  
Haksız bir davada zirve olmaktansa, haklı bir davada zerre olmayı tercih ederim.
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Import WSDL ile efatura entegratöründen aldığım function

Mesaj gönderen mkysoft »

Basic authentication ile bağlanmak için kullanılıyor paylaştığınız kod. Hizmet aldığınız yer farklı bir yöntem kullanıyor olabilir.
Kullanıcı avatarı
enes6635
Üye
Mesajlar: 21
Kayıt: 09 Eki 2018 11:09
İletişim:

Re: Import WSDL ile efatura entegratöründen aldığım function

Mesaj gönderen enes6635 »

bizdeki de aynı şekilde, örnek kod vermişler ancak C#

Resim
Haksız bir davada zirve olmaktansa, haklı bir davada zerre olmayı tercih ederim.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3077
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: Import WSDL ile efatura entegratöründen aldığım function

Mesaj gönderen sabanakman »

HTTPRIO bileşeninde servis metotlarını kullanırken Headers bilgilerini iliştirmek için HTTPRIO.HTTPWebNode.OnBeforePost olayında aşağıdaki gibi bir kod yazmanız gerekebilir.

Kod: Tümünü seç

//uses Winapi.WinInet; gerekecektir.
procedure TForm1.HTTPRIO1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer);
var Baslik:String;
begin
  Baslik:='Username: '+username;
  HttpAddRequestHeaders(Data, PChar(Baslik), Length(Baslik), HTTP_ADDREQ_FLAG_ADD);
  Baslik:='Password: '+password;
  HttpAddRequestHeaders(Data, PChar(Baslik), Length(Baslik), HTTP_ADDREQ_FLAG_ADD);
end;
gibi bir kodla kullandığınız servislere başlık bilgisi ekleyebilirsiniz.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
enes6635
Üye
Mesajlar: 21
Kayıt: 09 Eki 2018 11:09
İletişim:

Re: Import WSDL ile efatura entegratöründen aldığım function

Mesaj gönderen enes6635 »

Thttpreqeresp de hata veriyor tanımlı değil diye
Yukarıda procedure olarak belirtiyoruz zaten ayrı bir yerde demi tanımlamamız lazım
Haksız bir davada zirve olmaktansa, haklı bir davada zerre olmayı tercih ederim.
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Import WSDL ile efatura entegratöründen aldığım function

Mesaj gönderen mkysoft »

Uses kısmına gerekli unitleri eklemeniz gerekir, hangi unitler olduğunu hatırlamıyorum. Formunuza HTTPRIO nesnesi ekleyip ilgili event'a çift tıklayıp yaratırsanız gerekli unitleri ekleyecektir.
Kullanıcı avatarı
enes6635
Üye
Mesajlar: 21
Kayıt: 09 Eki 2018 11:09
İletişim:

Re: Import WSDL ile efatura entegratöründen aldığım function

Mesaj gönderen enes6635 »

teşekkürler sorun çözüldü.

------------------------------------------------------------------------------------------------------------------------------------------
Şöyle bir kod yazıyorum yukarıda uses da WS tanımlı parametrelerde doğru
SOAPUI'de denedim cevap geldi.

Kod: Tümünü seç

procedure TForm1.Button3Click(Sender: TObject);
var
servis:QueryDocumentWS;
cevap:DocumentQueryResponse;
begin
 servis:=GetQueryDocumentWS(False,hizliservis2,HTTPRIO1);
cevap:= servis.QueryOutboxDocument('Envelope_UUID','f661c25c-61ac-4a16-aa8e-5366b8117288','XML');
ShowMessage(cevap.stateExplanation);

end;
Ancak Delphi'de şöyle bir hata mesajı veriyor
[dcc32 Error]
AnaForm.pas(140): E2010 Incompatible types: 'InvoiceWS1.DocumentQueryResponse' and 'QueryDocumentWS1.DocumentQueryResponse'

Metot bilgileri:
Resim
Cevap yapı Bilgileri
Resim
Haksız bir davada zirve olmaktansa, haklı bir davada zerre olmayı tercih ederim.
mkysoft
Kıdemli Üye
Mesajlar: 3103
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Re: Import WSDL ile efatura entegratöründen aldığım function

Mesaj gönderen mkysoft »

cevap değişkeninizi InvoiceWS1.DocumentQueryResponse tipinde tanımlamalısınız. Dokümanda yazan tipler tüm programlama dillerinde aynı şekilde oluşturulmayabiliyor. Çağırmak istediğiniz fonksiyonun kodlarına giderek oluşan dönüş tipini kullanmalısınız.
Kullanıcı avatarı
proteknikblg
Üye
Mesajlar: 35
Kayıt: 27 Nis 2006 08:39
Konum: Sivas
İletişim:

Re: Import WSDL ile efatura entegratöründen aldığım function

Mesaj gönderen proteknikblg »

Hayırlı akşamlar,
Uyum soft ile entegrasyon yapmak için uğraşıyorum ancak konuya çok yabancı olduğum için ilerleyemedim. Forumda yaptığım tüm aramalara rağmen bir yol alamadım konuyla ilgili destek verebilecek arkadaşlara şimdiden teşekkürler,

Kullandığım delphi sürümü : Embarcadero Delphi 2010
Uyumsoft Test Sistemi: https://efatura-test.uyumsoft.com.tr/se ... ntegration
Kullanıcı adı uyumsoft
parola uyumsoft

Kod: Tümünü seç

procedure TForm1.BitBtn2Click(Sender: TObject);
var
   bilgi:iintegration;
   anabilgi:invoiceinfo;
   Soap_rio:THTTPRIO;
   anabilgi_resp:Response;
begin
    soap_rio:=thttprio.Create(form1);
    bilgi:=getiintegration(true,'https://efatura-test.uyumsoft.com.tr/Services/Integration?singleWsdl',soap_rio);
    anabilgi:=invoiceinfo.Create;
    anabilgi_resp:=response.Create;
1. problemim : Yukarıdaki kodla anabilgi create ediyorum anabilgi alt elemanları değer alabilirken 2. seviye alt elemanları acces vialation hatası verdiriyor
2. problemim bilgi ile anabilgi değişkenlerimi nasıl birleştirip uyumsoft a göndereceğim anlayamadım.
Programı çalıştırdığımda create edilen anabilgi değişkeninin yapısı aşağıdaki reismdeki gibidir.

Resim
Dosya ekleri
Resim.png
Resim.png (7.04 KiB) 3791 kere görüntülendi
Cevapla