LoginSignup
1
1

More than 5 years have passed since last update.

EC-Cube2からCampaignMonitorにユーザ情報をセットする、かなりアナログな方法

Last updated at Posted at 2017-02-17

CampaignMonitorの認証フェーズは
2段階 一般的なOAuthがどういうものかはわからないので!!割愛します。

1. codeを取得してみましょう。

登録した認証アプリケーションが持つシークレットコードと
アプリケーションIDを使い、認証用のコードを取得します。

次のコードを実行してみましょう。
URLアドレスが出て来るので、それをブラウザに入れると認証画面が出てきます。

auth.php

<?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が送られて来る
ログインしてコードを取得.png

*注:画像のコードは加工していますので、使えません。

2. refleshtokenを取得します。

ここまでで取得しているcodeを使ってreflesh_tokenを取得します。
以下のコードを実行すると、下図のようになrます。

refreshtoken.php
<?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;
  }
?>

スクリーンショット_2017-02-17_12_36_06.png
*実行画面

ここまででaccess_tokenとrefresh_tokenを取得することができましたので、
この情報を使ってユーザを追加していくことができるようになりました。
ू• ̀ω•́ )✧やった。

3. ユーザを追加してみましょう。

ここまでに取得してきたrefresh_token, access_tokenを使い、
ユーザを一人追加する処理を実験してみましょう。
うまくいくと、下記画像のように1ユーザを追加することができます。

adduser.php

<?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
));
?>

Manage_ssssssssss___メール.png
ここまで来ると、リストに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時の権限を申請していなかったことによるので、
改めて改良したコードを使った認証フローを行うことで解決する。

トークン

refreshtoken.php

<?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();
  }
?>

1
1
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
1
1