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>