PHPでcURLを使ってOAuthでPOST接続する方法
slack APIを使ってPHPでメッセージの自動投稿を行う上でOAuth認証を使う必要があったのでcURLを使って簡単に実行してみました。
slack_api.php の内容
<?php
//---PHP設定用のファイル
require_once("./config.inc.php");
//---データ配列
$data_ary = array(
"token" => TOKEN ,
"channel" => "チャンネル名" ,
"text" => "コメントの内容" ,
);
$url = "https://slack.com/api/chat.postMessage";
//---CURLでOAuthでPOST接続
$result = curlOAuthPost($url , TOKEN , $data_ary);
var_dump($result);
///=======================================================================
// +CURLでOAuthでPOST接続
///=======================================================================
function curlOAuthPost($url , $token , $data_ary) {
//---POSTデータ形式に変換
$data = http_build_query($data_ary , "" , "&");
//---CURL初期化
$curl = curl_init();
//---------------------
// +オプション指定
//---------------------
$header_ary = array(
"Authorization: OAuth {$token}" ,
"Content-Type: application/x-www-form-urlencoded"
);
curl_setopt($curl , CURLOPT_HTTPHEADER , $header_ary);
curl_setopt($curl , CURLOPT_URL , $url);
curl_setopt($curl , CURLOPT_RETURNTRANSFER , 1);
curl_setopt($curl , CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1);
curl_setopt($curl , CURLOPT_CUSTOMREQUEST , 'PATCH');
curl_setopt($curl , CURLOPT_POSTFIELDS , $data);
//---接続実行
$result = curl_exec($curl);
//---接続エラー時
if(curl_errno($curl)){
$error = curl_error($curl);
var_dump($error);
}
//---接続を閉じる
curl_close($curl);
//---------------------
// +返り値
//---------------------
return $result;
}
?>
config.inc.php の内容
<?php
//---文字コード
ini_set('default_charset', 'UTF-8');
//---MB内部文字エンコーディング
mb_language('Japanese');
mb_internal_encoding("UTF-8");
mb_regex_encoding('UTF-8');
//---タイムゾーン
date_default_timezone_set('Asia/Tokyo');
//----Slack APIのTOKEN
define('TOKEN' , "xxxxxxxxx");
?>
SSL証明書のエラー
Windows環境でcURLの接続時にSSL証明書エラーで接続出来なかったのでphp.iniにGitの証明書を指定して解決しました。
curl.cainfo=”C:Program FilesGitetcpkica-trustextractedopensslca-bundle.trust.crt”
実行結果
slack_api.phpを実行すると問題なくslackに投稿出来ました。
PHPの設定よりもSlack APIの設定の方が難しかったです。。
今回は「 Slack Bot 」を利用していますが、Slack Botとして複数チャンネルに投稿するAPIを利用するよりも、それぞれのチャンネルのWebhook URLを取得する方が設定が簡単です。