Opracowujemy aplikację WP8, która wymaga powiadomień push. Aby to przetestować, uruchomiliśmy żądanie POST powiadomienia Push za pomocą wiersza poleceń CURL, upewniając się, że faktycznie łączy się, uwierzytelnia się z certyfikatem SSL klienta i wysyła poprawne dane. Wiemy na pewno, że ta praca, którą otrzymujemy, wypycha urządzenia.Połącz się z usługą powiadomień Microsoft Push dla Windows Phone 8 z Ruby
To polecenie CURL używamy do celów testowych:
curl --cert client_cert.pem -v -H "Content-Type:text/xml" -H "X-WindowsPhone-Target:Toast" -H "X-NotificationClass:2" -X POST -d "<?xml version='1.0' encoding='utf-8'?><wp:Notification xmlns:wp='WPNotification'><wp:Toast><wp:Text1>My title</wp:Text1><wp:Text2>My subtitle</wp:Text2></wp:Toast></wp:Notification>" https://db3.notify.live.net/unthrottledthirdparty/01.00/AAF9MBULkDV0Tpyj24I3bzE3AgAAAAADCQAAAAQUZm52OkE1OUZCRDkzM0MyREY1RkE
Oczywiście potrzebna jest nasza cert SSL faktycznie użyć adresu URL, ale miałem nadzieję, że ktoś inny to zrobił i może zobaczyć, co robimy źle.
Teraz naszym problemem jest to, że musimy pracować z Ruby, czymś, do czego dotychczas nie mogliśmy dotrzeć.
Próbowaliśmy używać HTTParty bez powodzenia, a także net/http bezpośrednio bez żadnego szczęścia.
Tutaj jest bardzo prosty skrypt testowy HTTParty Użyłem do testowania z:
require "httparty"
payload = "<?xml version='1.0' encoding='utf-8'?><wp:Notification xmlns:wp='WPNotification'><wp:Toast><wp:Text1>My title</wp:Text1><wp:Text2>My subtitle</wp:Text2></wp:Toast></wp:Notification>"
uri = "https://db3.notify.live.net/unthrottledthirdparty/01.00/AAF9MBULkDV0Tpyj24I3bzE3AgAAAAADCQAAAAQUZm52OkE1OUZCRDkzM0MyREY1RkE"
opts = {
body: payload,
headers: {
"Content-Type" => "text/xml",
"X-WindowsPhone-Target" => "Toast",
"X-NotificationClass" => "2"
},
debug_output: $stderr,
pem: File.read("/Users/kenny/Desktop/client_cert.pem"),
ca_file: File.read('/usr/local/opt/curl-ca-bundle/share/ca-bundle.crt')
}
resp = HTTParty.post uri, opts
puts resp.code
Wydaje się to połączyć z SSL prawidłowo, ale to serwer MS IIS powraca 403 do nas z jakiegoś powodu don” t dostać.
Tutaj jest zasadniczo to samo Próbowałem przy użyciu netto/http:
require "net/http"
url = URI.parse "https://db3.notify.live.net/unthrottledthirdparty/01.00/AAF9MBULkDV0Tpyj24I3bzE3AgAAAAADCQAAAAQUZm52OkE1OUZCRDkzM0MyREY1RkE"
payload = "<?xml version='1.0' encoding='utf-8'?><wp:Notification xmlns:wp='WPNotification'><wp:Toast><wp:Text1>My title</wp:Text1><wp:Text2>My subtitle</wp:Text2></wp:Toast></wp:Notification>"
pem_path = "./client_cert.pem"
cert = File.read pem_path
http = Net::HTTP.new url.host, url.port
http.use_ssl = true
http.cert = OpenSSL::X509::Certificate.new cert
http.key = OpenSSL::PKey::RSA.new cert
http.ca_path = '/etc/ssl/certs' if File.exists?('/etc/ssl/certs') # Ubuntu
http.ca_file = '/usr/local/opt/curl-ca-bundle/share/ca-bundle.crt' if File.exists?('/usr/local/opt/curl-ca-bundle/share/ca-bundle.crt') # Mac OS X
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
r = Net::HTTP::Post.new url.path
r.body = payload
r.content_type = "text/xml"
r["X-WindowsPhone-Target"] = "toast"
r["X-NotificationClass"] = "2"
http.start do
resp = http.request r
puts resp.code, resp.body
end
Podobnie jak w wersji HTTParty, to zwraca również 403 ..
Zaczynam mieć wrażenie, że to nie będzie działać z net/http, ale widziałem też kilka przykładów kodu, które roszczą sobie prawo do pracy, ale nie widzę żadnej różnicy w porównaniu do tego, co testowaliśmy tutaj.
Czy ktoś wie, jak to naprawić? Czy to możliwe? Czy powinienem zamiast tego używać libcurl? A może wywołać systemowe zawinięcie? (Być może będę musiał zrobić to ostatnie jako tymczasowe rozwiązanie, jeśli nie będziemy w stanie szybko tego uruchomić).
Każde wejście jest bardzo doceniane!
Dzięki Kenny
Jakieś postępy na końcu? Próbowałem od Node.js z podobnym kodem i utknąłem. Chciałbym zobaczyć dziennik błędów w obszarze Dev Center dla certyfikatów lub coś, co pomoże zdiagnozować problem. –
Przepraszam za spóźnioną odpowiedź, ale nie, nie mogłem jej uruchomić. Musieliśmy uciekać się do wołania do CURL na razie ... –