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を取得する方が設定が簡単です。