Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
SGK Evrak Doküman İşlemleri, Belge Gönderme
#1
Bir çok arkadaşın SGK nın yeni "Evrak Doküman İşlemleri" web servisine belge göndeermekte zorlandığını görüyorum. Bunun üzerinde biraz çalıştım. Belgeyi başarıyla gönderen örnek Delphi projesi ektedir. Örnek Delphi XE 8 kullanılarak yazılmıştır. Kolaylık olması açısından EvrakDokumanIslemleriServiceWS.pas dosyası içerisindeki TByteDynArray veri tipi String’e dönüştürülmüştür. E-Reçete gönderiminde de aynı şeyi yapmıştım. Gönül rahatlığıyla bul/değiştir ile TByteDynArray kelimelerini string olarak değiştirebilirsiniz.

 Security Header için orijinal WSSE.PAS’ın biraz değiştirilmiş bir sürümü (WSSE_SGK.pas) kullanılıyor.

DokumanTest.pas
unit DokumanTest;

interface

uses
 Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
 Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Soap.InvokeRegistry,
 Soap.Rio, Soap.SOAPHTTPClient;

type
 TFormDokumanTest = class(TForm)
   Edit1: TEdit;
   Label1: TLabel;
   Button1: TButton;
   OpenDialog1: TOpenDialog;
   ButtonGonder: TButton;
   MemoLog: TMemo;
   HTTPRIO1: THTTPRIO;
   procedure Button1Click(Sender: TObject);
   procedure ButtonGonderClick(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   procedure HTTPRIO1BeforeExecute(const MethodName: string;
     SOAPRequest: TStream);
   procedure HTTPRIO1AfterExecute(const MethodName: string;
     SOAPResponse: TStream);
 private
   { Private declarations }
   procedure LogEkle(Str1: String);
   function ConvertFileToBase64(const FileName: string): AnsiString;
 public
   { Public declarations }
 end;

var
 FormDokumanTest: TFormDokumanTest;

implementation

uses
 EvrakDokumanIslemleriServiceWS, WSSE_SGK, EncdDecd;

{$R *.dfm}

procedure TFormDokumanTest.Button1Click(Sender: TObject);
begin
 if OpenDialog1.Execute then
 begin
   Edit1.Text := OpenDialog1.FileName;
 end;
end;

function TFormDokumanTest.ConvertFileToBase64(const FileName: string): AnsiString;
var
 Stream1: TMemoryStream;
begin
 Stream1 := TMemoryStream.Create;
 try
   Stream1.LoadFromFile(Filename);
   Result := EncodeBase64(Stream1.Memory, Stream1.Size);
 finally
   Stream1.Free;
 end;
end;

procedure TFormDokumanTest.ButtonGonderClick(Sender: TObject);
var
 Servis  : EvrakDokumanIslemleri;
 Giris   : evrakDokumanKayitDVO;
 Sonuc   : evrakDokumanKayitCevapDVO;
const
 //M3_EvrakDokumanIslemleriServiceWS = 'https://medula.sgk.gov.tr/medula/hastane/EvrakDokumanIslemleriServiceWS';
 M3_EvrakDokumanIslemleriServiceWS = 'https://sgkt.sgk.gov.tr/medula/hastane/EvrakDokumanIslemleriServiceWS';

begin
 try
   HTTPRIO1.HTTPWebNode.GetHTTPReqResp.UserName := '11068891'; // IntToStr(M3_Tesis_Kodu);
   HTTPRIO1.HTTPWebNode.GetHTTPReqResp.Password:= '11068891'; // M3_Password;
   HTTPRIO1.HTTPWebNode.UseUTF8InHeader := True;

   Servis := GetEvrakDokumanIslemleri(False, M3_EvrakDokumanIslemleriServiceWS, HTTPRIO1);
   Sonuc := nil;
   Giris := evrakDokumanKayitDVO.Create;

   Giris.saglikTesisKodu := 11068891; // M3_Tesis_Kodu;
   Giris.evrakId := 254;
   Giris.takipNo := '4JFK';
   Giris.dokuman := evrakDokumanDVO.Create;
   Giris.dokuman.islemSiraNo := 0;
   Giris.dokuman.kayitReferansNo := 0;
   Giris.dokuman.dokumanIcerik := ConvertFileToBase64(Edit1.Text);
   Giris.dokuman.turu := 999; // Diğer
   Giris.dokuman.dosyaAdi := ExtractFileName(Edit1.Text); //  Extracts the name and extension parts of a file name.

   //SetSecurityHeader(Servis); // Kullanıcı adı ve şifreyi parametrelerden alır.
   SetSecurityHeader2(Servis, '11068891', '11068891');
   Sonuc := Servis.dokumanKaydet(Giris);
   if sonuc.sonucKodu <> '0000' then
   begin
     LogEkle('HATA: Evrak gönderilemedi.');
     LogEkle('Sonuç kodu: ' + Sonuc.sonucKodu);
     LogEkle('Sonuç mesajı: ' + Sonuc.sonucMesaji);
   end else
   begin
     LogEkle('Evrak gönderildi.');
     LogEkle('Sonuç kodu: ' + Sonuc.sonucKodu);
     LogEkle('Sonuç mesajı: ' + Sonuc.sonucMesaji);
   end;
 finally
   Giris.Free;
   if Sonuc <> nil then Sonuc.Free;
 end;
end;

procedure TFormDokumanTest.FormCreate(Sender: TObject);
begin
 MemoLog.Clear;
 Edit1.Text := ExtractFilePath(ParamStr(0)) +  'Test.txt';

end;

procedure TFormDokumanTest.HTTPRIO1AfterExecute(const MethodName: string;
 SOAPResponse: TStream);
var
 Str: string;
 Sl : TStringList;
begin
 Sl := TStringList.Create;
 try
   SOAPResponse.Seek(0, soFromBeginning);
   Sl.LoadFromStream(SOAPResponse);
   Str := sl.Text;
 finally
   FreeAndNil(sl);
 end;
 LogEkle('CEVAP OLARAK GELEN XML KODLARI' + #13#10#13#10 + Str + #13#10);
end;

procedure TFormDokumanTest.HTTPRIO1BeforeExecute(const MethodName: string;
 SOAPRequest: TStream);
var
 StrList1: TStringList;
begin
 inherited;
 StrList1 := TStringList.Create;
 try
   SOAPRequest.Position := 0;
   StrList1.LoadFromStream(SOAPRequest);
   LogEkle('GÖNDERİLEN XML KODLARI' + #13#10#13#10 + StringReplace(StrList1.Text, '><', '>' + #13#10 + '<', [rfReplaceAll]) + #13#10);
 finally
   StrList1.Free;
 end;
end;

procedure TFormDokumanTest.LogEkle(Str1: String);
begin
 MemoLog.Lines.Add(FormatDateTime('hh:nnConfused', Now) + ' ' + Str1);
end;

end.

DokumanTest.dfm
object FormDokumanTest: TFormDokumanTest
 Left = 0
 Top = 0
 Caption = 'Dok'#252'man Test'
 ClientHeight = 387
 ClientWidth = 434
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'Tahoma'
 Font.Style = []
 OldCreateOrder = False
 OnCreate = FormCreate
 DesignSize = (
   434
   387)
 PixelsPerInch = 96
 TextHeight = 13
 object Label1: TLabel
   Left = 16
   Top = 24
   Width = 44
   Height = 13
   Caption = 'Dok'#252'man'
 end
 object Edit1: TEdit
   Left = 16
   Top = 40
   Width = 313
   Height = 21
   TabOrder = 0
   Text = 'Edit1'
 end
 object Button1: TButton
   Left = 336
   Top = 40
   Width = 75
   Height = 25
   Caption = 'Se'#231
   TabOrder = 1
   OnClick = Button1Click
 end
 object ButtonGonder: TButton
   Left = 80
   Top = 96
   Width = 217
   Height = 25
   Caption = 'G'#246'nder'
   TabOrder = 2
   OnClick = ButtonGonderClick
 end
 object MemoLog: TMemo
   Left = 16
   Top = 144
   Width = 401
   Height = 217
   Anchors = [akLeft, akTop, akRight, akBottom]
   Lines.Strings = (
     'MemoLog')
   TabOrder = 3
 end
 object OpenDialog1: TOpenDialog
   Left = 112
   Top = 184
 end
 object HTTPRIO1: THTTPRIO
   OnAfterExecute = HTTPRIO1AfterExecute
   OnBeforeExecute = HTTPRIO1BeforeExecute
   HTTPWebNode.UseUTF8InHeader = True
   HTTPWebNode.InvokeOptions = [soIgnoreInvalidCerts, soAutoCheckAccessPointViaUDDI]
   HTTPWebNode.WebNodeOptions = []
   Converter.Options = [soSendMultiRefObj, soTryAllSchema, soRootRefNodesToBody, soCacheMimeResponse, soUTF8EncodeXML]
   Left = 152
   Top = 184
 end
end


.zip   SGKBelgeGonderTest.zip (Dosya Boyutu: 12,23 KB / İndirme Sayısı: 29)
WWW
Cevapla
#2
Elinize saglik
Cevapla
#3
Teşekkürler elinize sağlık.
Gözünüzden kaçmış olabilir diye hatırlayayım, kodlar içerisinde username ve password paylaşılmış.
Cevapla
#4
(21-02-2018, Saat: 13:09)frmman Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlTeşekkürler elinize sağlık.
Gözünüzden kaçmış olabilir diye hatırlayayım, kodlar içerisinde username ve password paylaşılmış.

Eğer gördüğünüz 11068891 ise bu kod SGK tarafından test servisi için verilmiş kod...
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Object Model İle SQL İşlemleri Yaptırma witalihakko 4 196 31-05-2018, Saat: 10:38
Son Yorum: witalihakko
  FireMonkey Resimlerde Pan ve Zoom İşlemleri Fesih ARSLAN 11 1.525 16-04-2018, Saat: 12:04
Son Yorum: pro_imaj
  Delphi'de Indy SMTP ile e-mail gönderme. (GMail, Yandex, Yahoo vb.) csunguray 6 734 09-04-2018, Saat: 02:34
Son Yorum: dkadir
  Döküman Önizleme Bileşeni / PreviewHandler uparlayan 3 593 05-07-2017, Saat: 13:19
Son Yorum: uparlayan



Konuyu Okuyanlar: 1 Ziyaretçi