PR

apiのレスポンスのjson_decodeにエラー処理を追加 #1560

kouho opened this at 2022-02-16T14:46:52; closed

Description

opened by kouho at 2022-02-16T14:46:52; updated 2022-02-21T14:52:46

概要

curl_execでヤマダAPIから返ってきたデータをjson_decodeする際にエラーになったけどログに残せないケースがありました。(本番ではSyntax errorとしてerror2.txtに残る。)
exec_postのjson_decodeに例外処理を追加してjson_decodeでエラーをキャッチした際はログに残してエラーページを表示させてます。

テスト方法、確認した内容

exec_postでjsonDecodeの直前に$bodyにエラーとなるデータ(例:"test")を入れてexec_postが使われている処理を通す
log/yamada_api_log.txtにエラーが残ってエラー画面が表示されればOK。

課金実行のAPIを確認するときはexec_post関数の以下の箇所を修正したら確認できます。
balance APIでエラーが起きると課金実行までいけないので以下のようにifで省いてください。

curl_close($req);

curl_close($req);
if($end_point != $this->api_host . "/api/balance"){
 $body = "test";
}
  • ガチャ実行前残額表示
  • ガチャ実行
  • デイリークエスト達成のポイント付与

TODO

懸念点
apiへの送信に成功したけど受信したデータのjsonDecodeに失敗した場合2重で処理が行われる可能性

kouho change_title at 2022-02-16T14:49:50: 【2/17】apiのレスポンスのjson_decodeにエラー処理を追加 [WIP]apiのレスポンスのjson_decodeにエラー処理を追加
kouho change_title at 2022-02-17T15:12:59: [WIP]apiのレスポンスのjson_decodeにエラー処理を追加 apiのレスポンスのjson_decodeにエラー処理を追加

Comment

#17416 by kouho at 2022-02-17T15:26:53; updated 2022-02-17T15:34:00

@wada @iwamoto
確認お願いいたします。

TODOに書いていますが、apiへの送信に成功してヤマダ側では処理が通ったけど受信したデータのjson_decodeに失敗したというケースに対応できず何かいい方法はないでしょうか?

いざ問題が発生した際にbodyの中身をyamada_api_error.txtに吐き出して確認しようと思いますが、
例えばaddPoint APIで上記の問題が起きた場合、ポイント付与が2回以上行われてしまう可能性があります。

Comment

#17466 by wada at 2022-02-21T14:05:00; updated 2022-02-21T14:05:00

@kouho
確認okです

wada add_label at 2022-02-21T14:05:12: 和田 LGTM

Comment

#17474 by iwamoto at 2022-02-21T14:33:19; updated 2022-02-21T14:33:19

@kouho 確認しました。

iwamoto add_label at 2022-02-21T14:33:22: 岩本 LGTM
kouho merge at 2022-02-21T14:41:47: apiのレスポンスのjson_decodeにエラー処理を追加
kouho close at 2022-02-21T14:41:47: Close
kouho refer at 2022-02-21T14:52:46: 1569:【2/21】リリース・apiのレスポンスのjson_decodeにエラー処理を追加

Commit range

based4a7874c5678a4c19c06afb0e0ea557ad3100742
head7ba0c7bec19bd071c9ccfb68bc06b324efe9dbb6
base branchjolly/jr-web:develop
head branchjolly/jr-web:error_decode_log

View commits

Commit details are loaded from Git when a dynamic archive server is running, or can be embedded with --include-commits.
Files changed1 filesView patch
statusfile
modifiedlib/class/platform/yamada/YamadaAPI.class.php
Patch body is stored as a separate file to keep this page lightweight.