Kategorie szkoleń | Egzaminy | Kontakt
  • 2
  • 2
  • 443

Witam,

PLUS GSM udostępnia API HTTP, które to pozwala wysyłać wiadomości SMS. Plus GSM wymaga, aby uwierzytelnić zapytanie certyfikatem.

Certyfikat udostępniony przez PLUS GSM został zainstalowany na komputerze. Gdy wywołuję żądanie przez przeglądarkę internetową, to wszystko działa prawidłowo. Poniżej przykładowe żądanie:

 

https://api1.multiinfo.plus.pl/sendsms.aspx?login=jasio&password=jasio&serviceId=2&dest=48601357368&text=ala+ma+kotka

 

Chciałbym wywoływać takie żądanie z poziomu MS SQL-a.  Stosuję do tego celu procedurę podaną poniżej.

Gdy wywołuję żądanie przez tę procedurę, to system zwraca mi informację 

0x80072F0C WinHttp.WinHttpRequest Do dokończenia uwierzytelniania klienta jest niezbędny certyfikat. NULL0

 

Prosiłbym o pomoc: czy do MS SQL-a należy wgrać w jakiś sposób certyfikat udostępniony przez PLUS GSM albo, czy w jakiś sposób należy przydzielić uprawnienia do tego certyfikatu?

Certyfikat został zainstalowany na komputerze lokalnym:

 

 

Create function GetHttp
(
    @url varchar(8000)      
)
returns varchar(8000)
as
BEGIN
    DECLARE @win int 
    DECLARE @hr  int 
    DECLARE @text varchar(8000)

    EXEC @hr=sp_OACreate 'WinHttp.WinHttpRequest.5.1',@win OUT 
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

    EXEC @hr=sp_OAMethod @win, 'Open',NULL,'GET',@url,'false'
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

    EXEC @hr=sp_OAMethod @win,'Send'
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

    EXEC @hr=sp_OAGetProperty @win,'ResponseText',@text OUTPUT
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

    EXEC @hr=sp_OADestroy @win 
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @win 
    
    RETURN @text
	
END<span style="white-space: normal;">
</span>
Paweł_Sarnowski
  • Zapytał
  • @ Paweł_Sarnowski | 12.11.2014
    • 7
    • 1
    • 2

Odpowiedzi (2)

  • 11

Pomiędzy wywołaniem metody Open a Send brakuje wywołania metody SetClientCertificate ze wskazaniem lokalizacji certyfikatu.

Przykład zgodnie z konwencją:

 

    EXEC @hr=sp_OAMethod @win,'SetClientCertificate("LOCAL_MACHINE\My\Certyfikat klienta")'
    IF @hr <> 0 EXEC sp_OAGetErrorInfo @win

 

(Przykład pisałem z głowy, bez możliwości sprawdzenia, proszę o weryfikację w docelowym środowsku.)

Dokumentacja metody:

http://msdn.microsoft.com/en-us/library/windows/desktop/aa384055%28v=vs.85%29.aspx

Na marginesie warto zaznaczyć, że do powyższej funkcjonalności znacznie lepsze od wywoływania obiektów COM jest użycie SQ LCLR i kodu zarządzalnego.

  • Odpowiedział
  • @ | 13.11.2014
  • TRENER ALTKOM AKADEMII
  • 0

Dzięki wielkie za pomoc. Działa prawidłowo. Wcześniej próbowałem takiego schematu, jaki mi podałeś, ale niestety wskazywałem złą scieżkę dla certyfikatu.

Paweł_Sarnowski
  • Odpowiedział
  • @ Paweł_Sarnowski | 14.11.2014
    • 7
    • 1
    • 2