@makoto1003

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

GASで外部APIリクエスト時にエラー発生("No token provided.")

解決したいこと

GASでShip&Co APIを叩き、送り状ラベルを発行出来るようにしたいのですが、APIリクエストをする際に認可エラーが発生してしまうため、当該エラーを解消し、APIレスポンスを取得したい。

【Ship&Co API ドキュメンテーション】
https://developer.shipandco.com/#t-overview_10

【Postman サンプルコード】
https://documenter.getpostman.com/view/3269571/SW14TvyF#d4c2acd3-6025-4bc1-8608-2d4931e4c0ab

発生している問題・エラー

{"auth":false,"message":"No token provided."}

該当するソースコード

function shipandcoAPI(){

  var data = {
  "to_address": {
    "full_name": "John Doe",
    "company": "",
    "email": "",
    "phone": "0901231234",
    "country": "FR",
    "zip": "75002",
    "province": "",
    "city": "Paris",
    "address1": "12 Rue du 4 Septembre",
    "address2": ""
  },
  "from_address": {
    "full_name": "Yamada Taro",
    "company": "World Company",
    "email": "ytaro@worldcompany.com",
    "phone": "08012341234",
    "country": "JP",
    "zip": "6050012",
    "province": "KYOTO",
    "city": "KYOTO SHI",
    "address1": "HIGASHIYAMA KU",
    "address2": "SAIKAISHICHO"
  },
  "products": [
    {
      "name": "T-Shirt",
      "quantity": 2,
      "price": 2980,
      "hs_code": "1234.12",
      "origin_country": "JP"
    }
  ],
  "parcels": [
    {
      "weight": 2000,
      "amount": 1,
      "width": 10,
      "height": 10,
      "depth": 10
    }
  ],
  "customs": {
    "duty_paid": false,
    "content_type": "MERCHANDISE"
  },
  "setup": {
    "carrier": "japanpost",
    "service": "japanpost_ems",
    "currency": "JPY",
    "insurance": 0,
    "ref_number": "123-REF-3456",
    "delivery_note": "Leave the box at the door",
    "discount": 0,
    "signature": false,
    "return_label": false
  }
};
  var credential = 'ここにAPI Tokenを入れております';
  var myheaders  = {
    'Authorization': 'Bearer '+ credential
    };
  var options = {
     'headers': myheaders,
    'method': 'post',
    'contentType': 'application/json',
    'payload': JSON.stringify(data),
    muteHttpExceptions: true,
  };

  var response = UrlFetchApp.fetch("https://app.shipandco.com/api/v1/shipments", options);
  Logger.log(response) 
}

自分で試したこと

PostmanにJavascript-Fetchのサンプルコードがあったのですが、GASで同様の処理をする記述方法が分からず、GASで外部APIを叩く際に使用されるサンプルコードを読み漁り、記載のソースコードに辿り着いております。

↓PostmanのJavascript-fetchサンプルコード↓

var myHeaders = new Headers();
myHeaders.append("x-access-token", "YOUR_API_TOKEN_FROM_DASHBOARD");
myHeaders.append("content-type", "application/json");
0 likes

2Answer

「Ship&Co API ドキュメンテーション」に

コピーしたAPIトークンを以下のようにHTTPヘッダーに追加することでAPIを利用することができます。
x-access-token: YOUR_API_TOKEN_FROM_DASHBOARD

と書いてありますので

var options = {
  headers: {
    'x-access-token': YOUR_API_TOKEN_FROM_DASHBOARD,
  },
  // ほか略
};

じゃないでしょうか?

0Like

@_y_s様、回答有難うございました。

ご指摘の箇所を再度ドキュメンテーションを読み込んでみたところ、'headers'の部分に"x-access-token"と"content-type"を含める必要があるため、下記の通り修正したところ無事レスポンス取得出来ました。

  var myheaders  = {"x-access-token": credential,
                    "content-type" : "application/json" };
  var options = {
    'headers': myheaders,
    'method': 'post',
    'payload': JSON.stringify(data),
  };
0Like

Your answer might help someone💌