カラーミーショップAPIのはじめ方（ローカルのPHPでテスト）

# カラーミーショップAPI

概要についての説明は[公式ページ](https://shop-pro.jp/?mode=api_started) をご確認ください。
今回は[公式ページ](https://shop-pro.jp/?mode=api_started) から下記の手順をやってみます。

+ カラーミーデベロッパーアカウント登録
+ アプリケーション登録登録
+ ローカルでのテスト（PHP）  
（利用手順の中から「6. その他のAPIの呼び出し」の[アプリケーションのWebサーバのサンプル]部分について）

## 使い方

### カラーミーデベロッパーアカウント登録

下記から登録します。
https://api.shop-pro.jp/developers/sign_up

![1.png](https://qiita-image-store.s3.amazonaws.com/0/69821/eb7c6277-98e0-7941-55ef-8b1fcbeb343a.png)

### アプリケーション登録

下記から登録します。
https://api.shop-pro.jp/oauth/applications/new

アプリケーション名とリダイレクトURLを入力してください。

![2.png](https://qiita-image-store.s3.amazonaws.com/0/69821/1b45d1eb-f6be-25e4-19f0-b1c19249bd22.png)

リダイレクトURL、クライアントID、クライアントシークレット は後ほど使用するので控えておいてください。

![3.png](https://qiita-image-store.s3.amazonaws.com/0/69821/9a8e5815-3b20-213c-2f3b-060a7befdd61.png)

### ローカルでテスト

#### サンプルコードを設置

PHPが実行できる場所に下記ファイルを設置します。
(curlではなく file_get_contents()なのでphp.iniの設定など不要)

##### get_access_token.php

アクセストークン取得時に使用する。

```php
<?php
define("OAUTH2_SITE", 'https://api.shop-pro.jp');
define("OAUTH2_CLIENT_ID",'クライアントID');
define("OAUTH2_CLIENT_SECRET", 'クライアントシークレット');
define("OAUTH2_REDIRECT_URI", 'http://localhost:8000/get_access_token.php');

$code = $_GET['code'];
// 認可ページへリダイレクトする
if (empty($code)) {
    $params = [
        'client_id'     => OAUTH2_CLIENT_ID,
        'redirect_uri'  => OAUTH2_REDIRECT_URI,
        'response_type' => 'code',
        'scope'         => 'read_products write_products read_sales write_sales',
    ];
    $auth_url = OAUTH2_SITE . '/oauth/authorize?' . http_build_query($params);
    header('Location: ' . $auth_url);
    exit;
}

// 認可後
$params = [
    'client_id'     => OAUTH2_CLIENT_ID,
    'client_secret' => OAUTH2_CLIENT_SECRET,
    'code'          => $code,
    'grant_type'    => 'authorization_code',
    'redirect_uri'  => OAUTH2_REDIRECT_URI,
];
$request_options = [
    'http' => [
        'method'  => 'POST',
        'header'  => implode("\r\n", [
            "Content-Type: application/x-www-form-urlencoded",
        ]),
        'content' => http_build_query($params),
    ]
];
$context = stream_context_create($request_options);

$token_url = OAUTH2_SITE . '/oauth/token';

$response_body = file_get_contents($token_url, false, $context);
$response_json = json_decode($response_body);

echo '<pre>';
// var_dump($response_body);
var_dump($response_json);
echo '</pre>';

exit();
```

##### request.php

リクエストを実行するときに使用する。

```php
<?php
$request_options = [
    'http' => [
        'method'  => 'GET',
        'header'=> "Authorization: Bearer アクセストークン\r\n"
    ]
];
$context = stream_context_create($request_options);

// $url = 'https://api.shop-pro.jp/v1/shop.json';
$url = 'https://api.shop-pro.jp/v1/customers.json';
$response_body = file_get_contents($url, false, $context);

$response_json = json_decode($response_body, true);

echo '<pre>';
var_dump($response_json);
echo '</pre>';
```

#### ビルトインサーバ起動

サンプルコードを置いているディレクトリに移動して

```sh
cd /YOUR_WORK_DIR/
```
ビルトインサーバを起動する。

```sh
php -S localhost:8000
```

#### アクセストークンの取得

下記にアクセスする。
http://localhost:8000/get_access_token.php

ショップの管理者アカウントでログインする。
![4.png](https://qiita-image-store.s3.amazonaws.com/0/69821/25718b44-dc87-8585-6a3b-3f72c486912f.png)

「承認する」ボタンを押す。
![5.png](https://qiita-image-store.s3.amazonaws.com/0/69821/ac893498-7f91-e8bc-6668-bd03378a9efa.png)

ブラウザに表示された["access_token"]の値をコピーする。

```php
object(stdClass)#1 (3) {
  ["access_token"]=>
  string(64) "アクセストーク"
  ["token_type"]=>
  string(6) "bearer"
  ["scope"]=>
  string(51) "read_products write_products read_sales write_sales"
}
```

#### リクエスト実行ファイルにアクセストークンを設定する

先ほど取得したアクセストークンを request.php に設定する。

```php
$request_options = [
    'http' => [
        'method'  => 'GET',
        'header'=> "Authorization: Bearer アクセストークン\r\n"
    ]
];
```

#### リクエストを実行

http://localhost:8000/request.php

サンプルコードでは下記のように顧客情報一覧が取得できる。

```php
array(2) {
  ["customers"]=>
  array(2) {
    [0]=>
    array(18) {
      ["id"]=>
      int(00000000)
      ["account_id"]=>
      string(10) "XX00000000"
      ["name"]=>
      string(15) "山田　太郎"
      ["furigana"]=>
      string(0) ""
      ["hojin"]=>
      string(0) ""
      ["busho"]=>
      string(0) ""
      ["sex"]=>
      NULL
      ["postal"]=>
      string(0) ""
      ["pref_id"]=>
      int(1)
      ["pref_name"]=>
      string(9) "北海道"
      ["address1"]=>
      string(24) "市区町村、番地等"
      ["address2"]=>
      string(0) ""
      ["mail"]=>
      string(24) "customer2@example.com"
      ["tel"]=>
      string(10) "0312345678"
      ["fax"]=>
      string(0) ""
      ["tel_mobile"]=>
      string(0) ""
      ["points"]=>
      int(0)
      ["member"]=>
      bool(true)
    }
    [1]=>
    array(18) {
      ["id"]=>
      int(00000000)
      ["account_id"]=>
      string(10) "XX00000000"
      ["name"]=>
      string(9) "顧客１"
      ["furigana"]=>
      string(0) ""
      ["hojin"]=>
      NULL
      ["busho"]=>
      NULL
      ["sex"]=>
      NULL
      ["postal"]=>
      string(7) "1234567"
      ["pref_id"]=>
      int(1)
      ["pref_name"]=>
      string(9) "北海道"
      ["address1"]=>
      string(21) "市区町村・番地"
      ["address2"]=>
      NULL
      ["mail"]=>
      string(28) "customer@example.com"
      ["tel"]=>
      string(10) "0312456789"
      ["fax"]=>
      NULL
      ["tel_mobile"]=>
      NULL
      ["points"]=>
      int(0)
      ["member"]=>
      bool(true)
    }
  }
  ["meta"]=>
  array(3) {
    ["total"]=>
    int(2)
    ["limit"]=>
    int(10)
    ["offset"]=>
    int(0)
  }
}
```
ショップに何もデータが無い場合は、ショップ管理者アカウントで管理画面にログイン後、
テストで商品登録、購入、会員登録をしておくと良いです。

## 参考・出典

### API

+ [カラーミーショップAPI ドキュメント はじめに](https://shop-pro.jp/?mode=api_started)
+ [カラーミーショップAPI インターフェイス v1](https://shop-pro.jp/?mode=api_interface)

### テスト購入

+ [Q18．管理者購入とはなんですか？](https://shop-pro.jp/?mode=faq&genre_id=20#316)
+ [テスト注文をする際に「このまま注文を完了した場合は、管理者購入として処理されます。」という表記がでてしまいます。どうやったら消せますか？ – サポートコミュニティ](https://discussion.shop-pro.jp/hc/ja/articles/201886200-%E3%83%86%E3%82%B9%E3%83%88%E6%B3%A8%E6%96%87%E3%82%92%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AB-%E3%81%93%E3%81%AE%E3%81%BE%E3%81%BE%E6%B3%A8%E6%96%87%E3%82%92%E5%AE%8C%E4%BA%86%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AF-%E7%AE%A1%E7%90%86%E8%80%85%E8%B3%BC%E5%85%A5%E3%81%A8%E3%81%97%E3%81%A6%E5%87%A6%E7%90%86%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99-%E3%81%A8%E3%81%84%E3%81%86%E8%A1%A8%E8%A8%98%E3%81%8C%E3%81%A7%E3%81%A6%E3%81%97%E3%81%BE%E3%81%84%E3%81%BE%E3%81%99-%E3%81%A9%E3%81%86%E3%82%84%E3%81%A3%E3%81%9F%E3%82%89%E6%B6%88%E3%81%9B%E3%81%BE%E3%81%99%E3%81%8B-")
+ [テスト購入のやり方を教えてください。 – サポートコミュニティ](https://discussion.shop-pro.jp/hc/ja/articles/201743414-%E3%83%86%E3%82%B9%E3%83%88%E8%B3%BC%E5%85%A5%E3%81%AE%E3%82%84%E3%82%8A%E6%96%B9%E3%82%92%E6%95%99%E3%81%88%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84-)