CampaignMonitorの認証フェーズは
2段階 一般的なOAuthがどういうものかはわからないので!!割愛します。
1. codeを取得してみましょう。
登録した認証アプリケーションが持つシークレットコードと
アプリケーションIDを使い、認証用のコードを取得します。
次のコードを実行してみましょう。
URLアドレスが出て来るので、それをブラウザに入れると認証画面が出てきます。
<?php
require_once 'vendor/autoload.php';
require_once 'csrest_general.php';
$apikey = 'd151b9fc27sjw9sdjaf2ws4b6d72bfdwsd90137b43374';
$client_id = "1ws5d5de46w9sioaf4d47a4w98";
### oauthアプリケーションを作成した時のclient_id (クライアントがもつIDとは違う)
$client_id = 104768;
### oauthアプリケーションを作成した時に決めたリダイレクト先を完全一致で記載
$redirect_uri = 'https://DOMAIN/campainmonitorAuth';
$scope = 'ViewReports,SendCampaigns,ImportSubscribers';
$state = 'some state data';
$authorize_url = CS_REST_General::authorize_url($client_id, $redirect_uri, $scope, $state);
echo $authorize_url;
?>
URLを踏んで認証ページに進み、認証をクリアすると、
リダイレクト先指定のアドレスにURLパラメータとしてcodeが送られて来る
*注:画像のコードは加工していますので、使えません。
2. refleshtokenを取得します。
ここまでで取得しているcodeを使ってreflesh_tokenを取得します。
以下のコードを実行すると、下図のようになrます。
<?php
require_once 'vendor/autoload.php';
require_once 'csrest_general.php';
$apikey = 'd151b9fc278ab5fb00479eb64b6d72bfdaf44da137b43374';
$client_id = 104768;
$client_secret = 'bf70x0WySxE80iQ0r0Uv0fCdR3ZPy0000LQZ00MJh0LV00cvB000ArDIQ00C04O0N0EK8O000E0rCRn0';
$redirect_uri = 'https://konin-todoke.com/campainmonitorAuth';
$code = 'ATcGtKxVnwxGtdsFIteiC+4yNA=='; #一回で切れてしまう有効期間を持っているようだ
$result = CS_REST_General::exchange_token($client_id, $client_secret, $redirect_uri, $code);
var_dump($result->was_successful());
if($result->was_successful()) {
echo $access_token = $result->response->access_token;
echo $expires_in = $result->response->expires_in;
echo $refresh_token = $result->response->refresh_token;
}
?>
ここまででaccess_tokenとrefresh_tokenを取得することができましたので、
この情報を使ってユーザを追加していくことができるようになりました。
ू• ̀ω•́ )✧やった。
3. ユーザを追加してみましょう。
ここまでに取得してきたrefresh_token, access_tokenを使い、
ユーザを一人追加する処理を実験してみましょう。
うまくいくと、下記画像のように1ユーザを追加することができます。
<?php
require_once 'vendor/autoload.php';
require_once 'csrest_subscribers.php';
$auth = array( 'access_token' => 'Ad9UwYjAIDpEosM1jS5RxhEyNA==', 'refresh_token' => 'Ac1PBKVYA/1Dpxwd2908WZEyNA==');
$wrap = new CS_REST_Subscribers('d2784de364208fc9c135136e8512625e', $auth);
$result = $wrap->add(array(
'EmailAddress' => 'saitousan@email.com',
'Name' => '斉藤さん',
'CustomFields' => array(
array( 'Key' => 'marridge', 'Value' => '2017.01.01' ),
array( 'Key' => 'gendar', 'Value' => 'male'),
array( 'Key' => 'age', 'Value' => '10'),
array( 'Key' => 'buy', 'Value' => '0')
),
'Resubscribe' => true
));
?>
ここまで来ると、リストに1アドレスが追加されていることを確認できます。
自分はこの情報とカスタムフィールドを用いたAutomation機能を活用しています。
4. ユーザを削除してみましょう。
ここまでに取得してきたrefresh_token, access_tokenを使い、
ユーザを一人削除する処理を実験してみます。
おまけ
パーミッションがない場合のレスポンス。
object(stdClass)#6 (2) {
["Code"]=>
int(60)
["Message"]=>
string(63) "You do not have the required permission to access this resource"
}
これは、OAuth時の権限を申請していなかったことによるので、
改めて改良したコードを使った認証フローを行うことで解決する。
トークン
<?php
require_once 'vendor/autoload.php';
require_once 'csrest_general.php';
$auth = array( 'access_token' => 'Ad9UwYjAIDpEosM1jS5RxhEyNA==', 'refresh_token' => 'Ac1PBKVYA/1Dpxwd2908WZEyNA==');
$wrap = new CS_REST_General($auth);
$result = $wrap->get_clients();
if (!$result->was_successful()) {
if ($result->response->Code == 121) {
list($new_access_token, $new_expires_in, $new_refresh_token) =
$wrap->refresh_token();
# Save $new_access_token, $new_expires_in, and $new_refresh_token
}
$result = $wrap->get_clients();
}
?>