4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【PHP】blastmail APIでメルマガ登録・解除をする

Last updated at Posted at 2020-09-07

概要

blastmailを使ってメールマガジン登録・解除を実装する機会がありました。
そのときの手順やAPIの使い方についてメモです。

blustmailの準備

blastmailに会員登録すると、

  • 管理画面へのログイン情報
  • API key

が発行されます。

blastmailのAPIを利用するために、これらの情報を使うことになります。
API Keyは登録時のメールに記載されています。

また、管理画面の**「契約情報>アカウント情報」**の最下部でも確認できます。

APIの連携

APIを使ってメルマガ登録や解除などを行う手順としては、

  1. API経由でログインをし、アクセストークンを発行
  2. 発行されたアクセストークンをパラメーターに含めてAPIを叩く
  3. メルマガへの新規登録やユーザーの登録情報を確認などができる

といった感じです。

※有料アカウントで独自ドメインなどを設定している場合、APIのURLもそのドメインに変わります。

blastmailのAPIリファレンス

ログイン(アクセストークン発行)

詳しいパラメータはこちら

まずはblustmailにログインしてアクセストークンを発行します。
ログインはPOSTのみ有効となっており、今回はCurlを使いました。

login.php
$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()を使いました。

logout.php
$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が返ってきます。

個別登録(新規登録)

メルマガの購読登録を新規で行う場合です。

項目設定

今回は、新規登録にあたって必要な情報は「メールアドレス」のみとしています。

「項目設定」から登録させる項目を決めることができます。
他にも氏名や電話番号などを登録することも可能です。

qiita_blast002.png

登録する項目のパラメーター名は以下で確認できます。
「テキストメール(メール新規作成)>差し込みコード」

メールアドレスの場合は「c15」になります。

qiita_blast003.png

実装

詳しいパラメータはこちら

Curlを使ってPOSTで登録データを送信します。

regist.php
// $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が返ってきます。

管理画面の「読者一覧」に登録したユーザーが表示されれば成功です。
qiita_blast001.png

※ただし、以前に登録していて解除した場合などの、

  • 管理画面上にはないメールアドレス
  • 登録済みで配信停止中のメールアドレス

はデータベースに情報が残っているからか、新規登録ができませんでした。
そのため、次に説明する配信ステータスの変更を行う必要があります。

 
実装としては登録履歴があるかを調べ、

  1. 未登録なら新規登録
  2. 登録履歴があれば「配信中」にステータスを変更

のような形で新規登録を実装することになります。
最後にこれらをまとめたソースコードを記載します。

配信ステータス変更

登録の削除、配信停止などを行う場合はステータスの変更を行います。
変更するには登録者のIDが必要なので、まずはユーザーを検索してIDを取得します。

個別検索(ユーザー検索)

詳しいパラメータはこちら

メールアドレスまたはユーザーIDから、登録情報を検索します。

search.php
// $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)をもとに、ステータスを変更します。

change.php
// $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が返ってきます。

登録までの流れをまとめ

メルマガ購読を登録するまでの流れをまとめます。
解除の場合もほぼ同じようなソースで実装ができます。

流れとしては

  1. blastmailにログインし、アクセストークンを取得
  2. 登録ユーザーのメールアドレスを検索
  3. 未登録であれば新規登録
  4. 登録済みであればステータスを「配信中」に変更する
  5. blastmailからログアウトし、アクセストークンを破棄

のようになっています。

mailmagazine.php
// 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));

メモ

ステータスを「削除」にすると管理画面からユーザーは削除されるが、論理削除のためおそらくデータベースには残っている。(そのため削除ユーザーも新規登録できないので、ステータス変更を行う必要がある)

 

以上です!

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?