Community

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

  • 投稿

    アバターtrexedge-saito

    取引のPOSTで500エラー

    お世話になります。
    弊社のサービスで会計freeeのAPI連携を行っており、ユーザーからも大変好評でありがたく利用させて頂いております。

    運用していく中で、以下のエラーが発生致しましたので調査をお願いいたします。

    弊社サービスで作成した請求データをfreeeのDealとしてPOSTしております。
    弊社で作成した請求データの明細をdetailsとして連携していますが、明細が40行以上ある場合は分割して別のDealとしてPOSTする仕様です。

    1つの請求書を分割して取引のPOSTを行う際、1回目のPOSTは成功しますが、2回目以降のPOSTで500エラーで返ってきています。
    エラー内容は「エラーが発生しました。」です。
    弊社サービス側のリクエストに不備がありましたらすみませんが、対応方針についてご連絡いただけますと幸いです。

    尚、直近で上記のエラーが発生したのは8/1 14:06です。

    どうぞよろしくお願いいたします。

    回答

    freee dev-supportfreee dev-support

    お問い合わせありがとうございます。

    1つの請求書を分割して取引のPOSTを行っており、40行ずつ登録されており
    その際に1回目のPOSTは成功するが、2回目のPOSTがエラーとなってしまうのですね。

    状況を把握するのにいくつかご質問がございます。

    ①1回目のPOSTして、2回目のPOSTを行うタイミングについてお伺いしたいです。
    1回目のPOSTが成功してから、2回目のPOSTを行われておりますか。
    それとも成功したことを確認されずにすぐに2回目のPOSTをされておりますでしょうか。

    ②リクエストしたJSONを教えてください。
    ③500エラーのレスポンスにございますheaderに含まれる【X-Freee-Request-Id】の数値を教えてください。

    お手数おかけいたしますが、ご確認のほどよろしくお願いいたします。

    アバターtrexedge-saito

    お世話になっております。

    ご質問された項目に回答させていただきます。

    ①1回目のPOSTして、2回目のPOSTを行うタイミングについて
      こちらは1回目のPOSTのレスポンスを待たず、2回目のPOSTを送信していますが、3秒間隔を置いております。

    ②リクエストしたJSON
    {
        “company_id”: 1425077,
        “issue_date”: “2019-06-03”,
        “type”: “income”,
        “partner_id”: 15831648,
        “ref_number”: “”,
        “details”: [
            {
                “account_item_id”: 227139625,
                “tax_code”: 21,
                “item_id”: 166934488,
                “tag_ids”: [],
                “amount”: 1032,
                “description”: “”
            },
            {
                “account_item_id”: 227139625,
                “tax_code”: 21,
                “item_id”: 166934488,
                “tag_ids”: [],
                “amount”: 1032,
                “description”: “”
            }
        ],
        “payments”: []
    }

    ③レスポンスはBodyのみをログ出力しており、Header情報は取得できませんでした

    {
        “status_code”: 500,
        “errors”: [
            {
                “type”: “status”,
                “messages”: [
                    “エラーが発生しました。”
                ]
            }
        ]
    }

    freee dev-supportfreee dev-support

    ご回答ありがとうございます。

    1回目のレスポンスを待たずに、3秒の間隔を空けて2回目のリクエストを行われているということですね。

    お客様のお伺いしたご状況から、データに不整合が発生しないようにロックするために500エラーが発生したことが考えられます。
    もしレスポンス待たずにリクエストしてエラーが発生した場合は、恐れ入りますが間隔を空けて再度リクエストしていただけますと幸いです。

     

    また、一度1回目のレスポンスが返ってきてから2回目のリクエストをするとエラーが発生するかどうかお試しいただけますでしょうか。
    レスポンスを待ってから、リクエストしてもエラーが発生してしまう場合は、違う原因が考えられますのでご返信いただけますと幸いです。

    どうぞよろしくお願い致します。

    アバターtrexedge-saito

    ご連絡ありがとうございました。

    また、一度1回目のレスポンスが返ってきてから2回目のリクエストをするとエラーが発生するかどうかお試しいただけますでしょうか。

    こちら承知致しました。早速確認したいと思います。

    1点確認なのですが、1回目の取引と2回目の取引は別の取引として登録しておりますが、
    それでもロックがかかってしまうのでしょうか。
    その場合、全ての取引のPOSTは同期的に連携する必要があるのでしょうか。
    的はずれな質問でしたらすみませんがご確認よろしくお願いします。

     

    freee dev-supportfreee dev-support

    ご確認ありがとうございます。
    如何でしたか?

    私も確認したところ以下の様な結果になりました。

    『確認結果』

    共通項目)

    details の件数: 40 件
    POST /api/1/deals の連続実行回数: 65 回

    Case 1) レスポンスを待ってから次のリクエストを送信する

    65 回全て status code: 201 を確認しました。

    Case 2) レスポンスを待たず次のリクエストを送信する

    65 回中 10 〜 20 回程度 status code: 500 を確認しました。

    『今後の対応』

    ロックの原因ですが正確な情報は現在確認しております。
    お時間かかってしまい申し訳ありません。

    ここからは推測ですが、
    単一エンドポイントもしくはAccess Token 単位で、
    単位時間当たりの実行回数、もしくは同時実行に制限がかかってしまうと思われます。

    安定して API をご利用頂くため、
    実行頻度をキュー処理等で制御頂ければと存じます。

    どうぞ宜しくお願い致します。

    freee dev-supportfreee dev-support

    お時間頂きありがとうございます。
    ロックの仕様に関するご報告です。

    エラーが起きてしまう原因ですが、
    取引に応じて更新されるレポート等の整合性を担保するために発生しておりました。
    そのため引き続き以下の様な対応をお願い致します。

    * 同一事業所内で取引を登録するさい、実行中のAPIの完了をもって次の登録に移る
    * エラーが起きてしまったさい、5秒程度時間をおきリトライして頂く

    以上です。
    どうぞ宜しくお願い致します。