Community

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

  • 投稿

    アバターakkey2357

    取引における決済状況の更新について

    未決済(決済状況(status)が「unsettled」)の状態になっている取引を決済完了(決済状況(status)が「settled」)の状態に更新しようと思い、取引の更新API(/api/1/deals/{id})で対応可能と思っていたのですが、リファレンスを確認したところ、リクエストボディには決済状況(status)は指定できないようです。

    決済状況(status)を更新する手段を教えていただけますでしょうか?

    回答

    アバターoassith

    たしかにDealsのAPIでは指定できないようですね。
    PaymentsのPOSTでなら決済の登録ができるかと思いますので、お試しください。

    FYI
    取引(収入/支出)の支払行作成

    リファレンス

    注意点として、リファレンスのRequest bodyでは

    “from_walletable_type”: “2018-01-01″になっていますが
    Modelを見るとそこは[ bank_account, credit_card, wallet, private_account_item ]となっていました。
    なので、以下のように指定すると良さそうです。

    {
    “company_id”: 1,
    “date”: “2018-01-01”,
    “from_walletable_type”: “bank_account”,
    “from_walletable_id”: 1,
    “amount”: 10000
    }

    アバターakkey2357

    oassith様

    ありがとうございます。
    なるほど、PaymentsのPOSTで対応できるんですね。
    試してみます!
    注意点も教えていただきありがとうございます。

    アバターakkey2357

    oassith様

    先日はご教示いただきありがとうございました。
    無事、PaymentsのPOSTで決済済みにすることができました。
    ただ、誤って決済済みにしてしまった場合に未決済の状態に戻したいのですが、うまくいきません。
    PaymentsのDELETEで行けるかなと思っているのですが、400エラーになってしまいます。
    エラーメッセージとしては「存在しないか既に削除された支払行です。」です。
    DealsのGETで取得した取引IDと決済IDを使用しているため、存在しないということはないと思うのですが。
    具体的には、取引IDはdeals配下のid、決済IDはdeals配下のpayments配下のidを使用しています。
    使用するIDが違うのでしょうか?
    恐れ入りますが、ご教示お願いいたします。

    アバターoassith

    決済済みにできたとのこと良かったです。

    次に出たエラーについては、実際にRequestしたURLをログに出してpayments idを確認してみてください。

    >「存在しないか既に削除された支払行です。」

    というエラーで考えられるのは

    1. 指定したidが正しくなくて、存在しないと言われる
    2. 既にunsettledにした削除済みのpayments idをどこかで保持していてそれが渡されている

    のどちらかだと思われます。

    指定するidの認識は間違っていないと思います。

    > 取引IDはdeals配下のid、決済IDはdeals配下のpayments配下のidを使用

    こちらの手元でもそれらのidでsettledからunsettledに戻せました。

    手元で試した手順を以下に記載しておきますので、ご参考になれば幸いです。

    A. 特定の決済登録済み取引をGETで取得する Request URL
    https://api.freee.co.jp/api/1/deals/1111?company_id=2222

    Response bodyは要点だけ抜き出すとこのように返って来ます。
    “deal”: {
      “payments”: [
        {
          “id”: 3333
        }
      ],
      “id”: 1111,
      “status”: “settled”
      }
    }

    B. deals idとpayments idを指定してDELETEで削除する Request URL
    https://api.freee.co.jp/api/1/deals/1111/payments/3333?company_id=2222

    Response bodyは何も返って来ません。
    再度Aで同じ取引を取得すると、paymentsは消えてstatusがunsettledに戻りました。

    確認する点として考えられるのは、BのRequest URLで指定しているpayments idが、指定したdeals内に存在しているかどうかで、そちらをログ出力してご確認してみてください。

    アバターakkey2357

    oassith 様

    ありがとうございます。
    指定するidについては問題ないとのことですね。

    Request URLで指定しているpayment_idが、指定したdeals内に存在するかですが、現状構築している仕組みでは事前に特定の事業所の全取引を取得しており(明細行、決済行も含む)、未決済の取引を選択して実行すると支払残高分の金額で決済登録、決済行を選択して実行すると該当決済の削除、ということをしております。
    また、仕組みはExcel VBAで構築しており、取得した情報を特定のシート内のテーブルに出力して、削除時にはそこからid、payment_idを取得して指定しております。
    動作確認時には全取引情報を取得後、すぐに決済情報を指定して削除処理を実行しておりますので、該当決済が既に削除されている、ということは考えにくいかなと思っています。

    そのため、

    2.既にunsettledにした削除済みのpayments idをどこかで保持していてそれが渡されている

    は考えにくいかなと思っており、

    1.指定したidが正しくなくて、存在しないと言われる

    かなと思っています。
    例えば、idとpayment_idを逆に指定してしまっている等、単純な問題のような気がしていますので、その観点でもう少し調査してみます。

    アバターakkey2357

    すみません、試行錯誤していたらいつの間にかできました。
    結局何が原因だったのかよくわからないのですが、、、
    色々とご教示いただきありがとうございました。