ワイズリマインダー

SwitchBot APIの署名をPHPで作成する方法|HMAC-SHA256認証対応

SwitchBot APIは署名生成が必要

SwitchBot APIを利用する際、

単純にアクセストークンだけではなく、

・timestamp
・nonce
・signature

などを付与する必要があります。

特にハマりやすいのが、

sign

の生成処理です。

 

SwitchBot API v1.1では署名認証が必要

最近のSwitchBot APIでは、

HMAC-SHA256

を利用した署名認証方式になっています。

そのため、

・token
・secret

を利用して署名生成します。

 

必要な情報

事前に取得しておくもの。

・Token
・Secret

これらはSwitchBotアプリの開発者設定から取得可能です。

 

timestampを作成する

まずはUNIX時刻ミリ秒生成。

$time = round(microtime(true) * 1000);

 

nonceを生成する

nonceはランダム文字列。

例えば。

$nonce = bin2hex(random_bytes(16));

 

署名元文字列を作る

SwitchBotでは、

token + timestamp + nonce

を結合します。

$data = $token . $time . $nonce;

 

HMAC-SHA256で署名生成

PHPでは、

$sign = base64_encode(
hash_hmac(
'sha256',
$data,
$secret,
true
)
);

で生成可能です。

 

HTTPヘッダへ設定

APIリクエスト時は、

Authorization: token
sign: generated-sign
t: timestamp
nonce: nonce

をヘッダへ付与します。

 

curl利用例

例えば。

$headers = [
"Authorization: {$token}",
"sign: {$sign}",
"t: {$time}",
"nonce: {$nonce}",
];

 

署名エラー時の確認ポイント

よくあるミス。

・ミリ秒ではなく秒を使っている
・base64忘れ
・secret間違い
・nonce未設定
・改行混入

特に、

microtime(true) * 1000

は重要です。

 

タイムズレにも注意

SwitchBot APIでは時刻差が大きいと失敗する場合があります。

サーバー時刻同期(NTP)は重要です。

 

IoT自動化で便利

SwitchBot APIを使うことで、

・エアコン操作
・温湿度取得
・ボット押下
・カーテン制御

などをPHPから自動化できます。

 

まとめ

SwitchBot APIの署名は、

・timestamp
・nonce
・token

を結合し、

HMAC-SHA256 + base64

で生成します。

PHPでは、

hash_hmac()

を使うと簡単に実装できます。

署名エラー時は、

・時刻
・base64
・secret
・nonce

を確認すると原因切り分けしやすいです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

検索

最近のコメント

最近の投稿

タグ

フィード配信

アーカイブ

外部リンク