Aklımda Kalası Kelimeler

* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur

3 Nisan 2015 Cuma

SQL Server üstünden Web Servisine Çağrı Yapmak

USE [FEInvoice]
GO
/****** Object:  StoredProcedure [dbo].[WS_QueryOutboxInvoiceStatus]    Script Date: 04/03/2015 19:45:59 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[WS_QueryOutboxInvoiceStatus]
 @faturaUUID varchar(40),
 @username varchar(40)= NULL,
 @password varchar(40)= NULL,
 @invoiceStatus as Varchar(20) OUTPUT,
 @ResponseText as Varchar(8000) OUTPUT
AS
BEGIN
 SET NOCOUNT ON;

 IF(@username IS NULL OR @password IS NULL)
 BEGIN
  DECLARE @vkn VARCHAR(20),
    @gibPk VARCHAR(100);
    
  SELECT @username=UyumSoftKurumKullanicilari.kullaniciAdi, 
         @password=UyumSoftKurumKullanicilari.sifre,
         @vkn=Kurumlar.vergiNo,
         @gibPk=Kurumlar.gibPostaKutusu
    FROM UyumSoftKurumKullanicilari 
 INNER JOIN Kurumlar ON UyumSoftKurumKullanicilari.refKurum_id = Kurumlar.id 
 INNER JOIN FaturaNoOtomatik ON Kurumlar.vergiNo = FaturaNoOtomatik.vkn AND Kurumlar.gibPostaKutusu = FaturaNoOtomatik.gibPk
   WHERE (FaturaNoOtomatik.faturaUUID LIKE @faturaUUID)
  
  IF LEN(@username)=0 RAISERROR('Vergi numarası "%s", GİB Posta Kodu "%s" olan kuruma ait Uyumsoft Web Servislerini sorgulayabilecek kullanıcı bilgileri Fatura Numarası üreten veritabanında yok. Lütfen kullanıcı bilgilerinin veritabanına girilmesini sağlayınız ve tekrar deneyiniz!', 11, 1, @vkn, @gibPk)
 END

 
 BEGIN -- Sorgulamak için soap zarfını oluşturalım.
  DECLARE @Request INT
  Declare @Body as varchar(8000) = '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
 <s:Header>
  <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
   <o:UsernameToken>
    <o:Username>'+@username+'</o:Username>
    <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">'+@password+'</o:Password>
   </o:UsernameToken>
  </o:Security>
 </s:Header>
 <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <QueryOutboxInvoiceStatus xmlns="http://tempuri.org/">
   <invoiceIds>
    <string>'+@faturaUUID+'</string>
   </invoiceIds>
  </QueryOutboxInvoiceStatus>
 </s:Body>
</s:Envelope>'  

  EXEC sp_OACreate 'MSXML2.ServerXMLHTTP', @Request OUT;
  EXEC sp_OAMethod @Request, 'open', NULL, 'post','https://efatura.uyumsoft.com.tr/Services/Integration', 'false'
  EXEC sp_OAMethod @Request, 'setRequestHeader', null, 'SOAPAction', 'http://tempuri.org/IIntegration/QueryOutboxInvoiceStatus'
  EXEC sp_OAMethod @Request, 'setRequestHeader', null, 'Content-Type', 'text/xml; charset=utf-8'
  EXEC sp_OAMethod @Request, 'send', null, @body
  
  EXEC sp_OAMethod @Request, 'responseText', @ResponseText OUTPUT
  
  -- Uyumsoft kullanıcı adı ve şifresi geçersiz. Raiseerror !
  IF (CHARINDEX('You dont have enough permission to access this system',@ResponseText) > 0) RAISERROR('Uyumsoft servislerini sorgulamak için tanımlı "%s" kullanıcı adı ve "%s" şifresi geçerli değildir. Lütfen geçerli kullanıcı adı ve şifresinin Fatura Numarası Üreten veritabanına girilmesini sağlayınız. Alınan cevap: %s',19,1, @username, @password, @ResponseText);
  -- Uyumsoftun yanıtı boş ya da cevap içeren zarf yok. Raiserror!
  IF (@ResponseText IS NULL OR CHARINDEX('Envelope', @ResponseText) = 0) RAISERROR (N'Uyumsoft QueryOutboxInvoiceStatus metodundan hata alındı. Dönen sonuç: %s', 19, 1, @ResponseText);
  
  BEGIN -- Fatura durumunu çekip VT'yi güncelleyelim
   IF CHARINDEX('<Value Status="', @ResponseText) > 0
   BEGIN
    -- Faturanın son durumu 
    DECLARE @indexStart INT
    DECLARE @indexEnd INT
    
    SET @indexStart = CHARINDEX('<Value Status="', @ResponseText)+LEN('<Value Status="')
    SET @indexEnd = CHARINDEX('" StatusCode=', @ResponseText)  
    
    SET @invoiceStatus=SUBSTRING(@ResponseText, @indexStart, @indexEnd-@indexStart)
   END
  END

  -- Request objesini sonlandırım belleği özgürleştirelim
  Exec sp_OADestroy @Request
 END
END


IsEInvoiceUser

POST https://efatura.uyumsoft.com.tr/Services/Integration HTTP/1.1
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/IIntegration/IsEInvoiceUser"
Host: efatura.uyumsoft.com.tr

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
 <s:Header>
  <o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
   <o:UsernameToken>
    <o:Username>xxxxx</o:Username>
    <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">xxxxx</o:Password>
   </o:UsernameToken>
  </o:Security>
 </s:Header>
 <s:Body>
  <iseinvoiceuser xmlns:ns1='http://tempuri.org/'>
   <vkntckn>xxxxx</vknTckn>
  </IsEInvoiceUser>
 </s:Body>
</s:Envelope>