Forum
Discuss the development using our network APIs with other users. This is your opportunity to exchange tips and advice and to share ideas.

SendSMS / rest

Author Message
Norbert Schneider
Topic creator
registered since: 19.01.2012
Posts: 5
Hallo,

ich versuche, eine SMS mit mit dem Objective C SDK zu versenden. Mit dem PHP-SDK hab ich es schon geschafft, aber ich muss ein executable bauen, was ausser shared libs nichts weiter benötigt. Nach einigen Schwierigkeiten bin ich jetzt soweit, dass ich das Authentisierungs-token kriege. Wenn dann aber der eigentliche Sendsms-request kommt, läuft der ins Leere- er kriegt nie eine Antwort. Ich habe das ganze in Perl nachgebaut. Auch da kriege ich den auth token, aber auf den sendsms nie eine Antwort. Liegt das daran, dass das rest-interface nicht mehr funktioniert? PHP benutzt das soap-interface und funktioniert.

Danke für alle Hilfe!
ReplyProfile
Author Message
Daniel Buchheim
registered since: 13.01.2011
Posts: 31
Hallo Norbert,

ich habe gerade versucht, mir eine SMS über REST zu senden, und es hat funktioniert. Also muss der Fehler woanders liegen.

Vielleicht könnten wir dir weiterhelfen, wenn du ein wenig Code posten könntest :)

Grüße,

Daniel
ReplyProfile
Author Message
Norbert Schneider
Topic creator
registered since: 19.01.2012
Posts: 5
Aber gerne:

Das Objective-c projekt hänge ich an, es bassiert auf dem objective-c SDK. Es baut erfolgreich unter gnustep. Die perl-Skripte sind dabei, die kopiere ich aber auch hier rein:

sendsms.pl:
---Schnipp
#!/usr/bin/perl -w

use strict;
use SMS;

my $user='USER';
my $pw='PASSWORT';
my $env='mock';
my $flash='false';



my $auth = getauth($user, $pw, $env);
print "Got Auth\n";

my $recipient = "015227667706";
my $content = "Hallo Norbert";
my $originator = "Ecos.de";

my $response = sendsms($auth, $recipient, $content, $originator, $flash);

print "Response: $response\n";
---Schnapp

SMS.pm
---schnipp
use strict;
use MIME::Base64;
use LWP::UserAgent;
use Data::Dumper;
use JSON;

our $authurl = 'https://sts.idm.telekom.com/rest-v1/tokens/odg';
our $smsurltemplate = 'https://gateway.developer.telekom.com/p3gw-mod-odg-sms/rest/%s/sms';
our $smsurl;

sub getauth{
my ($user, $pw, $env) = @_;
my $authdata = "Basic ".encode_base64("$user:$pw");
$smsurl = sprintf($smsurltemplate, $env);

my $ua = LWP::UserAgent->new();
$ua->default_header('Accept' => 'application/json; charset=utf-8');
$ua->default_header('Authorization' => $authdata);
$ua->default_header('Cache-Control' => 'no-cache');
$ua->default_header('Pragma' => 'no-cache');
$ua->default_header('Connection' => 'close');

my $res = $ua->get($authurl);
if($res->is_success){
my $json = decode_json $res->content;
return $json->{'token'};;
} else {
die "Failed.";
}
}

sub sendsms{
my ($auth, $recipient, $content, $originator, $flash) = @_;
my $authdata = 'TAuth realm="https://odg.t-online.de",tauth_token='.$auth.'"';
my $ua = LWP::UserAgent->new();
my $body = "number=".$recipient."&message=".$content."&originator=".$originator."&flash=".$flash;
$ua->default_header('Transfer-Encoding' => 'chunked');
$ua->default_header('Content-Type' => 'application/x-www-form-urlencoded');
$ua->default_header('Authorization' => $authdata);
$ua->default_header('User-Agent' => 'Ecos.de perl client');
$ua->default_header('Accept' => 'application/json');

print "Sending to $smsurl\n";

my $res = $ua->post($smsurl,
{
number => $recipient,
message => $content,
originator => $originator,
flash => $flash
});
if($res->is_success){
my $json = decode_json $res->content;
print Dumper($json)."\n";
} else {
die "Send failed";
}

return 0;
}

return 1;

---schnapp


Vielen Dank schon mal.

Wenn das ganze funktioniert, soll es per SMS One-time passwörter versenden.
Attachment

work.zip (File type: application/zip, Size: 38.37 kilobytes) — 141 downloads
ReplyProfile
Author Message
Daniel Buchheim
registered since: 13.01.2011
Posts: 31
Hallo Norbert,

ich habe mir dein Perl-Script mal angesehen und habe mehrere Anmerkungen.

1.) zum Holen des Tokens reicht ein

PHPKopieren
  1. my $ua = LWP::UserAgent->new();
  2. $ua->default_header('Authorization' => $authdata);
  3.  
  4. my $res = $ua->get($authurl);


völlig aus.

2.) in

PHPKopieren
  1. sub sendsms{
  2. my ($auth, $recipient, $content, $originator, $flash) = @_;
  3. my $authdata = 'TAuth realm="https://odg.t-online.de",tauth_token='.$auth.'"';
  4. my $ua = LWP::UserAgent->new();
  5. my $body = "number=".$recipient."&message=".$content."& originator=".$originator."&flash=".$flash;
  6. # $ua->default_header('Transfer-Encoding' => 'chunked');
  7. $ua->default_header('Content-Type' => 'application/x-www-form-urlencoded');
  8. $ua->default_header('Authorization' => $authdata);
  9. $ua->default_header('User-Agent' => 'Ecos.de perl client');
  10. $ua->default_header('Accept' => 'application/json');


macht das Transfer-Encoding "chunked" Probleme, am besten diese Zeile auskommentieren.

3.) Es scheint wohl Probleme mit LWP und https zu geben.

PHPKopieren
  1. my $res = $ua->get($authurl);
  2. print $res->status_line;


--> 501 Protocol scheme 'https' is not supported (LWP::Protocol::https not installed)

Ich bin selber zwar kein "Perler", aber ich habe eine Anleitung gefunden, wie du dieses Problem beheben kannst. Zusammen mit den Schritten 1) und 2) konnte ich mir mit deinem Script eine SMS zustellen.

Quelle: https://forums.aws.amazon.com/thread.jspa?threadID=63812


First of all we will need to make sure the Ubuntu installation is up-to-date.

sudo apt-get update
sudo apt-get upgrade


Then we need to install some packages necessary:

sudo apt-get install build-essential libssl-dev


We also need to download and install libxml2 (Reference: http://xmlsoft.org/FAQ.html#Installati)

wget ftp://xmlsoft.org/libxml2/libxml2-2.7.2.tar.gz
tar xvf libxml2-2.7.2.tar.gz
cd libxml2-2.7.2
./configure
make
make install


We then need to upgrade to the latest CPAN:

sudo perl -MCPAN -e shell
install Bundle::CPAN
reload cpan

And install all of the CPAN modules necessary for SES script to run:

sudo perl -MCPAN -e shell
install XML::LibXML
install Digest::SHA
install URI::Escape
install Bundle::LWP
install MIME::Base64
install Crypt::SSLeay


sudo apt-get install -y libdigest-sha-perl liburi-perl libwww-perl libmime-tools-perl libcrypt-ssleay-perl libxml-libxml-perl



Hinweis: Wenn du auch mit CURL arbeiten könntest, dann gibt es hier: http://pastebin.com/Z3h1TdwR ein funktionierendes Script.

Ich hoffe, dass du damit weiterkommst, Objective-c habe ich mir nicht angeschaut, ich vermute dass die Absenderkennung falsch ist (zumindest bei Perl war sie falsch). Nicht validierte Rufnummern sollten so aussehen:


Der Absender kann aus maximal 11 Zeichen bestehen. Erlaubte Zeichen sind Buchstaben und Ziffern.


Grüße,

Daniel
ReplyProfile
Author Message
Norbert Schneider
Topic creator
registered since: 19.01.2012
Posts: 5
Hallo Daniel,

vielen Dank! 1) und 2) haben mein probs in perl behoben, 3) hatte ich schon gemacht, nur deswegen bin ich überhaupt so weit gekommen.

2) habe ich aus dem objective-c sdk übernommen. Das sollte dann auch dort entfernt werden, im file SendSmsService.m . Nachdem ich das bei mir gemacht habe kriege ich folgendes zurück:

{"status":{"statusCode":"0007","statusMessage":"No valid recipients given."}}


Aber das kriege ich auch noch raus.

Vielen Dank nochmal, mein Problem ist damit behoben.

PS: Wenn ich das objective-c programm zum laufen kriege, besteht Interesse daran, dass ich meine Erfahrungen aufschreibe und poste, zum Nutzen anderer? Wenn ja, auf deutsch oder englisch? Nützlich ist das für all die armen Menschen, die unbedingt ein executable haben müssen und kein Java/php zur Verfügung haben
ReplyProfile
Author Message
Norbert Schneider
Topic creator
registered since: 19.01.2012
Posts: 5
Ich habe das letzte verbleibende Problem gefunden und behoben. Im Objective-c SDK wird beim POST das feld content-length nicht befüllt. Auch das ist nach meiner Einschätzung ein fehler im SDK der behoben werden sollte.
ReplyProfile
Author Message
Florian Schneider
registered since: 18.05.2011
Posts: 2
Hallo Norbert,

ich habe gerade mal das Objective C SDK ausgecheckt und ohne etwas zu ändern eine SMS versendet - ohne Probleme.

Mir ist aufgefallen, dass deine SendSMSService.m Datei nicht der aus dem original SDK entspricht:

Deine Version:
NSMutableURLRequest *mySmsRequest = [NSMutableURLRequest alloc];
//*mySmsRequest = [mySmsRequest init];
---wobei das init auskommentiert ist.

Original Download:
NSMutableURLRequest *mySmsRequest = [[NSMutableURLRequest alloc]init];

Dabei vergisst du den Request zu initialiseren. Nimmt man die Zeile wieder rein funktioniert der Aufruf ohne Probleme, auch mit dem Headerparameter "chunked".

Grüße
Florian
ReplyProfile
Author Message
Norbert Schneider
Topic creator
registered since: 19.01.2012
Posts: 5
Hallo Florian,

vielen Dank- sehr interessant. Das init musste ich auskommentieren wegen eines Bugs in Gnustep: https://savannah.gnu.org/bugs/?35359

Ohne chunked und ohne init funktioniert es dann auch unter Gnustep.
ReplyProfile