联通のSMS送受信APIをRubyで作る
SMS配信サービス開始に向けてRubyでSOAP Clientを作っています。
中国では3キャリアあり、それぞれ異なるAPIを使う必要があります。
移動、電信ともにJava APIなのですが、联通はSOAPです。
いきなりコード。
1 LoginMes = {"login" => {"username" => '1111111111', "userType" => '0', "password" => '111111',"corpID" => '111111'}} 2 3 4 require 'rubygems' 5 gem 'soap4r' 6 require 'soap/rpc/driver' 7 require 'soap/wsdlDriver' 8 p SOAP::Version 9 10 wsdl = '联通APIのURL/SmWSImpl?wsdl' 11 12 a = SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver 13 a.generate_explicit_type = true 14 result = a.memberLogin(LoginMes) 15 16 17 p result.exitCode 18
実行結果
"1.5.8" 0
いや、はまりました。
ruby 1.8.7標準添付のsoap4r (1.5.5)でテストしても動作しない。
エラーは下記。
/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/1.8/soap/mapping/wsdlencodedregistry.rb:167:in `struct2soap': undefined method `elements' for nil:NilClass (NoMethodError)
途方に暮れていたのですが、soap4rを1.5.8にバージョンアップしたところあっさり動作。
サーバの環境構築もそうですが、バージョン関係は難しいですね。
オープンソース開発者の皆様に感謝!