0

OneAPI SMS インターフェイスを使用して、cURL を使用してアプリケーションから SMS メッセージを送信しようとしています。

500エラーが返され、使用しているコードは次のとおりです。

<?php
$url = "https://oneapi-gw.gsma.com/smssend/2_0/smsmessaging/outbound/tel%3A%2B1234/requests";
$username = "secret";
$password = "secret";

$request = array(
    'address' => 'tel%3A%2B1222333444',
    'message' => 'hello world',
    'senderAddress' => 'tel%3A%2B1234',
    'senderName' => 'joe doe'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($request));
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
print_r($info);
?>

どんな助けでも大歓迎です。ありがとうございました!

PS

Array ( [url] => https://oneapi-gw.gsma.com/smssend/2_0/smsmessaging/outbound/tel%3A%2B1416XXXYYYY/requests
[content_type] => application/json [http_code] => 500 [header_size] => 494 [request_size] => 349
[filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.333515 [namelookup_time] => 0.000335
[connect_time] => 0.054989 [pretransfer_time] => 0.229044 [size_upload] => 97 [size_download] => 172 [speed_download] => 515
[speed_upload] => 290 [download_content_length] => -1 [upload_content_length] => 97 [starttransfer_time] => 0.333474 [redirect_time] => 0 [certinfo] => Array ( ) )

解決済み

祖先の場合: 何らかの理由で cURL が機能しないため、file_get_contents() を使用する方法があります。

4

2 に答える 2

0

どうやら、私はこのパズルをcURLで解決しました。問題はその構文にありました。API用の実用的なPHPソリューションは次のとおりです。

   Class SendSMS {

        public $phone_number;

        public function __construct($phone_number) {
            $this->phone_number = $phone_number;
        }

        public function oneAPI() {      
            $url = "https://oneapi-gw.gsma.com/smssend/2_0/smsmessaging/outbound/tel%3A7511/requests"; // END POINT
            $username = 'secret'; // APP's login
            $password = 'secret'; // and psswd

            $request = array(
                'address' => $this->phone_number,
                'message' => 'hello world',
                'senderAddress' => 'tel:7511'
            );

            $request = http_build_query($request);

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
            curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // hide output
            $output = curl_exec($ch);
            $info = curl_getinfo($ch);
            curl_close($ch);

        }

    }

    $hello = new SendSMS('+1XXXXXXXXX'); // WHITE LISTED PHONE

    $hello->oneAPI();
于 2012-08-23T23:22:36.403 に答える
0

パラメータ値を JSON で送信する場合は、値を URL エンコードしないでください。これは、「フォーム投稿」を使用する場合に必要ですが、JSON には必要ありません。

コマンド ライン curl を使用して同じリクエストを作成してみてください。500 リターン コードに付随するサーバー エラーの詳細を取得できるはずです。

于 2012-08-20T07:43:24.383 に答える