Community

コミュニティをご利用の際は 【ガイドライン】を確認・同意いただいた上でご利用ください。

  • 投稿

    アバターaid

    取引作成時のdetailsについて

    はじめまして。リファレンス、およびこちらコミュニティを拝見しましたが解決しないため質問させてください。
    /api/1/deals への POSTにて取引を登録したいのですが、
    “details は Array で指定してください。”
    というエラーが返ってきてしまい、試行錯誤しましたが解決しません。
    下記にコード掲載いたしますので問題解決に向けてアイデアご教授いただけますと幸いです。

    /* Post deals */
    function postDeals() {
      var requestBody =
        {
          “issue_date”: “2020-05-09”,
          “type”: “income”,
          “company_id”: “XXXXXX”,
          “partner_code”: “取引先A”,
          “details”: [
            {
              “tax_code”: “1”,
              “account_item_id”: “86551031”,
              “amount”: “100”,
              “description”: “備考”
            }
          ]
        };

        var freeeApp = getService();
        var accessToken = freeeApp.getAccessToken();
        var requestUrl = “https://api.freee.co.jp/api/1/deals”;
        var headers = {“Authorization” : “Bearer ” + accessToken };
        var options = {
          “method”:”POST”,
          “headers”:headers,
          “payload”:requestBody,
          muteHttpExceptions: true
        };
        var res = UrlFetchApp.fetch( requestUrl , options );
        Logger.log(res);
    }

    ・レスポンス
    {“status_code”:400,”errors”:[{“type”:”validation”,”messages”:[“details は Array で指定してください。”]}]}

    回答

    アバターyakumo

    request parameter が json として認識されていないのでは?
    と思います。

    UrlFetchApp REST とかで検索してもらえると多々参考になる情報ひっかかるかもしれません。

    試してませんが、 requestBody を json 文字列にすることで解決するのではと思います。

    アバターaid

    ご助言ありがとうございます。助かります。

    payload を JSON.stringify してみたところ下記のエラーとなり、

    {“status_code”:400,”errors”:[{“type”:”validation”,”messages”:[“company_id, details, issue_date, type が指定されていません。”]}]}

    detailsのみ JSON.stringify した場合には下記エラーとなりました。

    {“status_code”:400,”errors”:[{“type”:”validation”,”messages”:[“details は Array で指定してください。”]}]}

     

    array用意してpushしたものをdetailsに指定してみたり、文字列を連結してjson作ってみたりもしてみたのですが、状況は変わらず 「Arrayで指定してください。」と言われてしまいます。。涙

    アバターyakumo

    どのように JSON.stringy されましたか?
    curl 等で同一のリクエストを送ってみ問題がない場合。

    Javascript の問題かと思うので、行ごとの挙動をログ出力等して見ていくしかなさそうですね。

    アバターaid

    ありがとうございます!解決しました。

    curl打ってて、ヘッダーに Content-Typeを追加してなかったことに、ふと気づきました。

    下記でいけました。ありがとうございました!

     

    var freeeApp = getService();
    var accessToken = freeeApp.getAccessToken();
    var requestUrl = “https://api.freee.co.jp/api/1/deals”;
    var headers = {“accept”: “application/json”, “Content-Type”: “application/json”, “Authorization” : “Bearer ” + accessToken };
    var options = {
    “method”:”POST”,
    “headers”:headers,
    “payload”:JSON.stringify(requestBody),
    muteHttpExceptions: true
    };
    var res = UrlFetchApp.fetch( requestUrl , options );