概要
blastmailを使ってメールマガジン登録・解除を実装する機会がありました。
そのときの手順やAPIの使い方についてメモです。
blustmailの準備
blastmailに会員登録すると、
- 管理画面へのログイン情報
- API key
が発行されます。
blastmailのAPIを利用するために、これらの情報を使うことになります。
API Keyは登録時のメールに記載されています。
また、管理画面の**「契約情報>アカウント情報」**の最下部でも確認できます。
APIの連携
APIを使ってメルマガ登録や解除などを行う手順としては、
- API経由でログインをし、アクセストークンを発行
- 発行されたアクセストークンをパラメーターに含めてAPIを叩く
- メルマガへの新規登録やユーザーの登録情報を確認などができる
といった感じです。
※有料アカウントで独自ドメインなどを設定している場合、APIのURLもそのドメインに変わります。
ログイン(アクセストークン発行)
まずはblustmailにログインしてアクセストークンを発行します。
ログインはPOSTのみ有効となっており、今回はCurlを使いました。
$url = 'https://api.bme.jp/rest/1.0/authenticate/login';
$login_data = [
'username' => 'ログインID',
'password' => 'ログインパスワード',
'api_key' => 'API Key',
'f' => 'json' // responseをjson形式に指定
];
// curlの設定
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); // 取得するURLを指定
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); // POST送信
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 実行結果を文字列で返す
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($login_data)); // POSTする値
$response = curl_exec($ch); // APIを叩く
$token = json_decode($response, true); // レスポンスをjsonから配列に変換
// ログイン失敗
if (!isset($token['accessToken'])) {
echo 'ログインに失敗しました';
}
// レスポンス結果($token)
// {'accessToken':'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'}
ログインに成功すれば、accessTokenが返ってきます。
ログアウト(アクセストークンの破棄)
ログアウトしてアクセストークンを破棄します。
ログアウトはGETが使えるので、file_get_contents()を使いました。
$url = 'https://api.bme.jp/rest/1.0/authenticate/logout?';
$query = ['access_token' => $token['accessToken']];
$response = file_get_contents($url . http_build_query($query));
$responseには0(false)または1(true)が入ります。
ログアウトに成功すればtrueが返ってきます。
個別登録(新規登録)
メルマガの購読登録を新規で行う場合です。
項目設定
今回は、新規登録にあたって必要な情報は「メールアドレス」のみとしています。
「項目設定」から登録させる項目を決めることができます。
他にも氏名や電話番号などを登録することも可能です。
登録する項目のパラメーター名は以下で確認できます。
「テキストメール(メール新規作成)>差し込みコード」
メールアドレスの場合は「c15」になります。
実装
Curlを使ってPOSTで登録データを送信します。
// $token['accessToken']には、ログインで得た
// アクセストークンが代入されているものとします
$url = 'https://api.bme.jp/rest/1.0/contact/detail/create';
$regist_data = [
'access_token' => $token['accessToken'],
'c15' => '登録したいメールアドレス' // 登録したい項目のパラメータ
];
// curlの設定
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($regist_data));
$response= curl_exec($ch);
// 登録失敗
if (!(bool)$response) {
echo '登録に失敗しました';
}
$responseには0(false)または1(true)が入ります。
登録に成功すればtrueが返ってきます。
管理画面の「読者一覧」に登録したユーザーが表示されれば成功です。
※ただし、以前に登録していて解除した場合などの、
- 管理画面上にはないメールアドレス
- 登録済みで配信停止中のメールアドレス
はデータベースに情報が残っているからか、新規登録ができませんでした。
そのため、次に説明する配信ステータスの変更を行う必要があります。
実装としては登録履歴があるかを調べ、
- 未登録なら新規登録
- 登録履歴があれば「配信中」にステータスを変更
のような形で新規登録を実装することになります。
最後にこれらをまとめたソースコードを記載します。
配信ステータス変更
登録の削除、配信停止などを行う場合はステータスの変更を行います。
変更するには登録者のIDが必要なので、まずはユーザーを検索してIDを取得します。
個別検索(ユーザー検索)
メールアドレスまたはユーザーIDから、登録情報を検索します。
// $token['accessToken']には、ログインで得た
// アクセストークンが代入されているものとします
$url = 'https://api.bme.jp/rest/1.0/contact/detail/search?';
$query = [
'access_token' => $token['accessToken'],
'email' => 'メールアドレス',
'f' => 'json'
];
$response = file_get_contents($url . http_build_query($query));
$user = json_decode($response, true);
// ユーザーID
echo $user['contactID'];
個別編集(ステータス変更)
検索で取得したユーザーID(contactID)をもとに、ステータスを変更します。
// $token['accessToken']には、ログインで得た
// アクセストークンが代入されているものとします
// $user['contactID']には、検索で得た
// ユーザーIDが代入されているものとします
$url = 'https://api.bme.jp/rest/1.0/contact/detail/update';
$change_data = [
'access_token' => $token['accessToken'],
'contactID' => $user['contactID'],
'status' => '配信停止' // 変更後のステータス
];
// curlの設定
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($change_data));
$response= curl_exec($ch);
// 変更失敗
if (!(bool)$response) {
echo 'ステータスの変更に失敗しました';
}
$responseには0(false)または1(true)が入ります。
ログアウトに成功すればtrueが返ってきます。
登録までの流れをまとめ
メルマガ購読を登録するまでの流れをまとめます。
解除の場合もほぼ同じようなソースで実装ができます。
流れとしては
- blastmailにログインし、アクセストークンを取得
- 登録ユーザーのメールアドレスを検索
- 未登録であれば新規登録
- 登録済みであればステータスを「配信中」に変更する
- blastmailからログアウトし、アクセストークンを破棄
のようになっています。
// blastmailログイン
$url = 'https://api.bme.jp/rest/1.0/authenticate/login';
$login_data = [
'username' => 'ログインID',
'password' => 'ログインパスワード',
'api_key' => 'API Key',
'f' => 'json' // responseをjson形式に指定
];
// curlの設定
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); // 取得するURLを指定
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST'); // POST送信
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 実行結果を文字列で返す
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($login_data)); // POSTする値
$response = curl_exec($ch);
$token = json_decode($response, true); // レスポンスをjsonから配列に変換
if (!isset($token['accessToken'])) {
// ログイン失敗エラー
}
// ユーザー検索
$url = 'https://api.bme.jp/rest/1.0/contact/detail/search?';
$query = [
'access_token' => $token['accessToken'],
'email' => '登録したいメールアドレス',
'f' => 'json'
];
$response = file_get_contents($url . http_build_query($query));
$user = json_decode($response, true);
if (empty($user)) {
// 未登録の場合は新規登録
$url = 'https://api.bme.jp/rest/1.0/contact/detail/create';
$regist_data = [
'access_token' => $token['accessToken'],
'c15' => '登録したいメールアドレス'
];
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($regist_data));
$response= curl_exec($ch);
} else {
// 過去に登録していた場合はステータス変更
$url = 'https://api.bme.jp/rest/1.0/contact/detail/update';
$regist_data = [
'access_token' => $token['accessToken'],
'contactID' => $user['contactID'],
'status' => '配信中'
];
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($regist_data));
$response= curl_exec($ch);
}
if (!(bool)$response) {
// 登録失敗エラー
}
// ログアウト(アクセストークンの破棄)
$url = 'https://api.bme.jp/rest/1.0/authenticate/logout?';
$query = ['access_token' => $token['accessToken'],];
$response = file_get_contents($url . http_build_query($query));
メモ
ステータスを「削除」にすると管理画面からユーザーは削除されるが、論理削除のためおそらくデータベースには残っている。(そのため削除ユーザーも新規登録できないので、ステータス変更を行う必要がある)
以上です!