# 会員認証 (GET)

***

## **➊** 会員認証 <a href="#member-link" id="member-link"></a>

### **1-1.** 概要 <a href="#overview" id="overview"></a>

{% hint style="info" %}
**会員認証とは？**

* 自社で利用中のサービスの会員認証をContipleのヘルプセンターに連携し、  お客様がログインした状態でお問い合わせを送信し、送信したお問い合わせ内容を確認できるようにする機能です。
  {% endhint %}

* 会員認証はGET方式とPOST方式の2つのタイプで提供します。

* 連動のため、Contipleが提供する開発明細書に従ってAPIを開発し、会員認証メニューに登録してください。

#### **(1) POST 方式** <a href="#post" id="post"></a>

* 連動させるサービスがPC、MOBILEプラットフォームでWEB基盤で提供される場合に適しています。
* サービスのログイン画面がWEB URL形式で提供されている場合に使用できます。
* 開発明細でCLIENT-SIDE、SERVICER-SIDEの細部2タイプを提供します。

#### **(2) GET 方式** <a href="#get" id="get"></a>

* WEBベースのログイン画面がないサービスに適しています。
* WEBベースではないNative APPサービスの場合に適した連動方式です。

***

### **1-2.** プロセス(GET方式) <a href="#process" id="process"></a>

{% stepper %}
{% step %}
**ヘルプセンターへのアクセスとURL呼び出し**

* 独自サービスを利用するお客様がApp内でヘルプセンターにアクセスします。
* Appでヘルプセンターを呼び出す際、下記URL形式で呼び出します。
  * https\://{org}.oc.nhncloud.com/ {service}/hc/?usercode={ユーザー\_ID}\&username={ユーザー\_名前}\&email={ユーザー\_メール}\&phone={ユーザー\_電話番号}\&token={認証トークン\_値}
    {% endstep %}

{% step %}
**Token認証 UR**L**の呼び出し**

* ヘルプセンターでToken認証 URLを呼び出します。
* Token認証 URLは、下記に記載の開発仕様書に従ってお客様側で実装のうえ、Contiple の会員認証メニューにご登録ください。
  {% endstep %}

{% step %}
**お問い合わせ／お問い合わせ履歴へのアクセス**

* トークン検証に成功した場合は、「お問い合わせ」または「お問い合わせ履歴」ページへアクセスできます。

  検証に失敗した場合は、お問い合わせは非会員として受け付けられます。
  {% endstep %}
  {% endstepper %}

***

### **1-3.** 会員認証の設定方法 <a href="#setting" id="setting"></a>

#### **①** 会員認証の有効 <a href="#setting-01" id="setting-01"></a>

* \[サービス管理] → \[ヘルプセンター] → \[会員認証] に移動します。
* 会員認証を使用するには、**有効**に設定します。

#### **② 非会員のお問い合わせ**

* <mark style="color:green;">有効</mark> :（お客様が）ログインしていない状態でも問い合わせの受付が可能になります。
* <mark style="color:orange;">無効</mark> : ログイン状態でのみお問い合わせの受付ができるように制御されます。

#### **③** ログインタイプ <a href="#setting-03" id="setting-03"></a>

* GET方式を選択します。

#### **④** Token認証 URL <a href="#setting-04" id="setting-04"></a>

* ヘルプセンター呼び出し時に、自社サービスから連携されたトークンを検証するためのURLです。
* 下記の開発仕様書に従って実装したToken認証 URLを入力し、**［保存］**&#x30DC;タンをクリックして完了してください。

***

## **➋** 開発明細書 <a href="#api-guide" id="api-guide"></a>

### **2-1.** 認証トークン作成 <a href="#authorization-token" id="authorization-token"></a>

{% hint style="info" %}
**Contiple組織Key**

\[全体管理]→\[契約サービス管理]→「組織情報」から確認できます。
{% endhint %}

> Token生成サンプルは以下の通りです。 パラメータ順序は必ず下記と一致している必要があります。
>
> (※ Sample project > application.properties > oc.apikey= 項目に組織キーを保存)

```java
private String getSHA256Token(String serviceId, String usercode, String username, String email, String phone,
        String returnUrl, Long time, String apiKey) throws Exception {
    StringBuilder sb = new StringBuilder();
    // Order by follow number:
    sb.append(serviceId); // 1
    sb.append("&");
    sb.append(usercode); // 2
    sb.append("&");
    if (StringUtils.isNotBlank(username)) {
        sb.append(username); // 3
        sb.append("&");
    }
    if (StringUtils.isNotBlank(email)) {
        sb.append(email); // 4
        sb.append("&");
    }
    if (StringUtils.isNotBlank(phone)) {
        sb.append(phone); // 5
        sb.append("&");
    }
    　if (StringUtils.isNotBlank(memberno)) {
        sb.append(memberno); // 6
        sb.append("&");
    　}
    if (StringUtils.isNotBlank(returnUrl)) {
        sb.append(returnUrl); // 7
        sb.append("&");
    }
    sb.append(time); // 8

    SecretKeySpec signingKey = new SecretKeySpec(apiKey.getBytes("UTF-8"), "HmacSHA256");
    Mac mac = Mac.getInstance(signingKey.getAlgorithm());
    mac.init(signingKey);
    byte[] rawHmac = mac.doFinal(sb.toString().getBytes("UTF-8"));
    return new String(Base64.encodeBase64(rawHmac));
}

// Sample
// Use this same input, the output is : Ah9M58CQ9RFTShjFuqziQr+0MjmJxN6+bzWxMD71moo=
public static void main(String[] args) throws Exception {
    String s = getSHA256Token("hangame", "testusercode", "testUsername", "test@email.com", "123456789",
    null, 1660095873001L, "7cf2828608274a49a3f06152b2188927");
    System.out.println(s); // Output: Ah9M58CQ9RFTShjFuqziQr+0MjmJxN6+bzWxMD71moo=
}
```

***

### **2-2.** GET会員認証 <a href="#get-api" id="get-api"></a>

#### **(1) インターフェース説**明 <a href="#get-api-interface" id="get-api-interface"></a>

URL

* https\://{org}.oc.nhncloud.com/{service}/hc/?usercode=aaaabbb\&username=yzg\&email=<yzgname@163.com>\&phone=12345678901\&time=12345678\&token=8NPaBegAfbSvh1Lna9M0I1wBqjnoRyKO2r2izhuEAng%3d
* https\://{org}.oc.nhncloud.com/{service}/hc/ticket/?usercode=aaaabbb\&username=yzg\&email=<yzgname@163.com>\&phone=12345678901\&time=12345678\&token=8NPaBegAfbSvh1Lna9M0I1wBqjnoRyKO2r2izhuEAng%3d
* https\://{org}.oc.nhncloud.com/{service}/hc/ticket/list/?usercode=aaaabbb\&username=yzg\&email=<yzgname@163.com>\&phone=12345678901\&time=12345678\&token=8NPaBegAfbSvh1Lna9M0I1wBqjnoRyKO2r2izhuEAng%3d

| インターフェース名 | プロトコル | 呼び出し方向 | エンコード | 結果形式 | インターフェース説明                                                         |
| --------- | ----- | ------ | ----- | ---- | ------------------------------------------------------------------ |
| GET会員認証   | HTTPS | GET    | UTF-8 |      | サービス側でヘルプセンターへアクセスする際、顧客情報および暗号化して生成したトークンをパラメータとしてURLに付与して呼び出します。 |

***

#### **(2)** リクエストパラメータ定義 <a href="#get-api-request" id="get-api-request"></a>

{% hint style="danger" %}
**認証Token作成時の注意事項**

1. Token作成時にハングルがある場合は、ハングルで直接作成。エンコード不要
2. 作成されたTokenをURLパラメータとして使用する場合、encodeURIComponent()を使ったエンコードが必要
   {% endhint %}

| 名称          | 変数       | データタイプ       | 必須 | 説明                                                                                                                                                                                                                                                              |
| ----------- | -------- | ------------ | -- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| サービスID      | service  | VARCHAR(50)  | O  | サービスID                                                                                                                                                                                                                                                          |
| ユーザーID      | usercode | VARCHAR(50)  | O  | ユーザーID，唯一のユーザーであることを表示                                                                                                                                                                                                                                          |
| ユーザー名       | username | VARCHAR(50)  | X  | ユーザー名                                                                                                                                                                                                                                                           |
| ユーザーメールアドレス | email    | VARCHAR(100) | O  | ユーザーメールアドレス                                                                                                                                                                                                                                                     |
| 電話番号        | phone    | VARCHAR(20)  | X  | 電話番号                                                                                                                                                                                                                                                            |
| 会員番号        | memberno | VARCHAR(50)  | X  | 会員番号                                                                                                                                                                                                                                                            |
| timestamp   | time     | Long         | O  | 時間単位: ミリ秒                                                                                                                                                                                                                                                       |
| 認証Token     | token    | VARCHAR      | O  | <p>以下のパラメータ値と組織Keyにより算出されたSHA256</p><ul><li>必須ではないパラメータ値が null または空文字の場合、暗号化対象の文字列に含める必要はありません。</li><li>注意: 文字列内の各値の順序は、以下の例で指定されている順序と必ず一致させてください。</li><li>SHA256Digest(service + usercode + username + email + phone + memberno + returnUrl + time)</li></ul> |

***

#### **(3) 結果データ** <a href="#get-api-response-data" id="get-api-response-data"></a>

* Token認証成功: 会員でアクセスするアドレスに移動
* Token認証失敗: 非会員でアクセスするアドレスに移動
* Token認証失敗状態でお問い合わせ履歴にアクセスすると、お問い合わせ画面に移動

***

### **2-3.** Token認証URL（サービス側） <a href="#token-verification" id="token-verification"></a>

#### **(1) インターフェース説明** <a href="#token-verification-interface" id="token-verification-interface"></a>

* URL: サービス側から提供

| インターフェース名  | プロトコル | 呼び出し方向 | エンコード | 結果形式 | インターフェース説明                                                   |
| ---------- | ----- | ------ | ----- | ---- | ------------------------------------------------------------ |
| Token認証URL | HTTPS | GET    | UTF-8 | JSON | サービス側で token および usercode を用いてログイン状態を確認し、JSON形式の結果データを返却します。 |

***

#### **(2) リクエストパラメータ** <a href="#token-verification-request" id="token-verification-request"></a>

| 名称              | 変数       | データタイプ      | 必須 | 説明                                                  |
| --------------- | -------- | ----------- | -- | --------------------------------------------------- |
| ユーザーID          | usercode | VARCHAR(50) | O  | ユーザーID(ユニークな値)                                      |
| サービス側が作成したToken | token    | VARCHAR     | O  | ユーザーが GET 方式で Contiple にログインする際に、Contiple へ送信するトークン |

***

#### **(3) Response Body** <a href="#token-verification-response-body" id="token-verification-response-body"></a>

```json
ログイン状況：
{
"login": "true",
"usercode":"usercodeXXX"
}


未ログイン状況：
{
"login": "false",
"usercode": null
}
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.contiple.com/jp/api/open-api/get.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
