コメントありがとうございます。 残念ながら、もうSlingboxを使っていないた…
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
を確認すると原因切り分けしやすいです。
検索

コメントを残す