Vonage(旧Nexmo) が動作しない:deprecated error 対処法
SMS送信のAPIでいつも利用しているVonage(旧Nexmo)が急にエラーを吐き出したので、その対処法
何が起きたか
いつも利用しているVonageのAPIを使ってSMS送信のシステムを構築していたわけです。
まずは必要なパッケージのインストールします。
php composer require laravel/vonage-notification-channel
SMSメッセージの送信処理部分の実装はこちら。
use Nexmo\Client;
use Nexmo\Client\Credentials\Basic;
class Sms
{
public function send($tel,$body)
{
//SMS送信前処理
$basic = new Basic(config('app.sms_basic_key'), config('app.sms_basic_secret'));
$client = new Client($basic);
//SMS送信処理
$message = $client->message()->send(
[
'to' => '81' . mb_substr($tel, 1, 10),
'from' => 'syun03',
'type' => 'unicode',
'text' => $body
]);
}
}
いつもならこのコードで問題なくSMS送信されるのですが、なぜかエラー発生
エラー:Passing an array to Vonage\Messages\Client::send() is deprecated, please pass a MessageInterface object instead
こちらエラーメッセージが表示されていました。
Vonage\Messages\Client::send() に配列を渡すという機能は廃止されたから、MessageInterface を代わりに使ってね!
という事のようです。
エラーメッセージに従い、コードを変更します。
use Nexmo\Client;
use Nexmo\Client\Credentials\Basic;
use Nexmo\Message\Message;
class Sms
{
public function send($tel,$body)
{
//SMS送信前処理
$basic = new Basic(config('app.sms_basic_key'), config('app.sms_basic_secret'));
$client = new Client($basic);
//SMS送信処理
$message = $client->message()->send(
new Message('81'.mb_substr($tel,1,10),'syun03',
[
'type' => 'unicode',
'text' => $body
]));
}
}
Sendメソッドに渡す変数をNexmo\Messageオブジェクト型にしています。
これで処理を再実行したところ、問題なくSMS送信されました!
ご参考まで。