[ネクストエンジン] API Part 1 認証、商品マスターの更新

今日はネクストエンジン（NE）APIを利用してみます。

下記を試してみます。
- NE API 認証
- 商品マスターデータをアップロード
- 受注データの取得
- 在庫（商品）データの更新
- モール連携

NE APIのドキュメントはこちらです
https://developer.next-engine.com/

# 1. NE API 認証
## 1-1. `uid` `state` の取得

APIを利用するに際にアクセストークンは必要となります。

そして、
アクセストークンを取得するために `uid` `state` という二つの値を先に取得する必要があります。

`uid` `state` を取得するには下記のエンドポイントをコールします

```
https://base.next-engine.org/users/sign_in/?client_id={client_id}
```

その後、NEのログインが求められ、
ログイン完了後下記のURLがNEからコールされるので、`uid` と `state` を保存します。

```
https://{redirect_url}?client_id={client_id}&uid={uid}&state={state}
```

こちにフローをまとめた図をコピペします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/b389eb47-d938-25e9-073d-245322965b2a.png)

## 1-2. `access_token` の取得

`uid` `state`を取得したあとは、実際に `access_token` を取得します、  

下記のエンドポイントに対し

```
https://api.next-engine.org/api_neauth
```

`uid` `state` `client_id` `client_secret` を指定します。 一旦Postmanなどのツールを利用して試してみます。

```
curl --location --request POST 'https://api.next-engine.org/api_neauth' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'uid={uid}' \
--data-urlencode 'state={state}' \
--data-urlencode 'client_id={client_id}' \
--data-urlencode 'client_secret={client_secret}'
```

上記のリクエストに対して下記が出力されます（実際の値は除外しました）。

```json

{
    "access_token": "",
    "company_app_header": "",
    "company_ne_id": "",
    "company_name": "",
    "company_kana": "",
    "uid": "",
    "pic_ne_id": "",
    "pic_name": "",
    "pic_kana": "",
    "pic_mail_address": "",
    "refresh_token": "",
    "result": ""
}
```

# 2. 商品マスターデータをアップロード

## 2.1. 商品マスターデータを準備

CSVはこちらにフォーマットがあるので予めダウンロードしておきます。
https://manual.next-engine.net/main/product/prd_shohin-touroku/8588/


## 2.2. 商品マスターデータをアップロード

商品マスターデータアップロードのドキュメントはこちら
https://developer.next-engine.com/api/api_v1_master_goods/upload

> 動作は商品マスタ予約一括登録と同じで、非同期でメイン機能に登録可能になった時に登録されます。
登録結果は、アップロードキューを検索して確認します。

とのことですので、アップロードを依頼したあとにキューを確認することにします。

商品マスターデータをアップロードする際には下記のエンドポイントを利用します。

```
https://api.next-engine.org/api_v1_master_goods/upload
```

マスターデータはCSVファイルであげます。その他に`access_token` `data_type`を指定します。

```
curl --location --request POST 'https://api.next-engine.org/api_v1_master_goods/upload' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'access_token={access_token}' \
--data-urlencode 'refresh_token={refresh_token}' \
--data-urlencode 'wait_flag=1' \
--data-urlencode 'data_type=csv' \
--data-urlencode 'data=syohin_code,sire_code,jan_code,maker_name,maker_kana,maker_jyusyo,maker_yubin_bangou,kataban,iro,syohin_name,gaikoku_syohin_name,syohin_kbn,toriatukai_kbn,genka_tnk,hyoji_tnk,baika_tnk,gaikoku_baika_tnk,kake_ritu,omosa,haba,okuyuki,takasa,yusou_kbn,syohin_status_kbn,hatubai_bi,zaiko_teisu,hachu_ten,lot,keisai_tantou,keisai_bi,bikou,daihyo_syohin_code,visible_flg,mail_tag,tag,location,mail_send_flg,mail_send_num,gift_ok_flg,size,org_select1,org_select2,org_select3,org_select4,org_select5,org_select6,org_select7,org_select8,org_select9,org_select10,org1,org2,org3,org4,org5,org6,org7,org8,org9,org10,org11,org12,org13,org14,org15,org16,org17,org18,org19,org20,maker_kataban,zaiko_threshold,orosi_threshold,hasou_houhou_kbn,hasoumoto_code,zaiko_su,yoyaku_zaiko_su,nyusyukko_riyu,hit_syohin_alert_quantity,nouki_kbn,nouki_sitei_bi,syohin_setumei_html,syohin_setumei_text,spec_html,spec_text,chui_jiko_html,chui_jiko_text,syohin_jyotai_kbn,syohin_jyotai_setumei,category_code_yauc,category_text,image_url_http,image_alt
TestP001,9999,,,,,,,,登録時必須,,0,0,120000,,150000,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,'

```

下記がアウトプットです。

```json

{
    "result": "success",
    "que_id": "1",
    "access_token": "{access_token}",
    "access_token_end_date": "2020-10-07 22:24:32",
    "refresh_token": "{refresh_token}",
    "refresh_token_end_date": "2020-10-09 22:24:32"
}
```

実際にNEの管理画面で確認してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/1f4d6f34-e133-15b8-5730-838189fee12b.png)

# 3. 受注データの取得

では次は受注データの取得をしてみます。
受注データに関するドキュメントはこちらです。
https://developer.next-engine.com/api/api_v1_receiveorder_base/search


エンドポイントはこちら

```
https://api.next-engine.org/api_v1_receiveorder_base/search
```

こちらがリクエスト。


```
curl --location --request POST 'https://api.next-engine.org/api_v1_receiveorder_base/search' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'access_token={access_token}' \
--data-urlencode 'refresh_token=
{refresh_token}' \
--data-urlencode 'wait_flag=1' \
--data-urlencode 'fields=receive_order_shop_id, receive_order_id, receive_order_cancel_date'
```

下記がレスポンスです。

```json
{
    "result": "success",
    "count": "0",
    "data": [],
    "access_token": "{access_token}",
    "access_token_end_date": "2020-10-07 22:24:32",
    "refresh_token": "{refresh_token}",
    "refresh_token_end_date": "2020-10-09 22:24:32"
}
```

受注データがないのでなにも返ってきていません。そもそもテスト商品に対して在庫を更新していないので、受注データも作成できないですね・・　次は在庫を追加します。

# 4. 在庫（商品）データの更新

先ほど商品マスターデータを作成した際に使ったAPIを使います。商品コードTestP001に対して在庫10個追加します。

下記リクエスト

```
curl --location --request POST 'https://api.next-engine.org/api_v1_master_goods/upload' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'access_token=2f03eb6996a247dfd562bde85c98b62b605e42838c9356359c1b05b237fabdab35e700cd82f5502b56e074e367ca86bb20c96e909cd24c1c1c21da6c1cacfc4e' \
--data-urlencode 'refresh_token=6ab30dc7e973c872c1fb1dda39994d1a85fa57fcf3791b7c5ee61f0e36cbdbf1368933dd06f7263f8d2dc49013a6deac332c83a1bab0b53c0b04c56a28cb333b' \
--data-urlencode 'wait_flag=1' \
--data-urlencode 'data_type=csv' \
--data-urlencode 'data=syohin_code,sire_code,jan_code,syohin_name,syohin_kbn,toriatukai_kbn,genka_tnk,baika_tnk,tax_rate,hachu_ten,lot,daihyo_syohin_code,zaiko_su,yoyaku_zaiko_su,nyusyukko_riyu
TestP001,,,,,,,,,,,,10,,'
```

下記がレスポンスです。

```json
{
    "result": "success",
    "que_id": "2",
    "access_token": "{access_token}",
    "access_token_end_date": "2020-10-07 22:24:32",
    "refresh_token": "{refresh_token}",
    "refresh_token_end_date": "2020-10-09 22:24:32"
}
```

在庫数が変更されたかどうか確認します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241909/0298efe9-47d8-e2a6-216a-4ad6029c5b34.png)


# 次

次は実際にASP.NET C#でプログラムを書いていきます。