パスキーを知る
パスキーの基礎
パスキーの登録方法
パスキーの削除方法
開発者向け解説
Push! Passkeyを知る
Push! Passkeyとは
システム構成・責任分界
利用を開始する
管理ツールの使い方
実装する
実装ガイド
フロントエンド実装
PHPでの実装
Rubyでの実装
Node.jsでの実装
Pythonでの実装
Javaでの実装
C#での実装
結果を連携する
認証結果の受け取り
調べる
APIリファレンス
エラーコード
対応環境
セキュリティ上の注意
トラブルシューティング
よくある質問

エラーコード

Push! Passkey APIと顧客サイト側で発生するエラーを確認する

このページでは、現在稼働しているPush! Passkeyの実装を正式仕様として、URL発行API、結果照会API、顧客サイトのバックエンド、利用者画面で扱うエラーコードを説明します。

エラー発生時は、プログラム側ではerror_codeを使って処理を分岐し、利用者画面には分かりやすい日本語メッセージを表示します。

APIキー、内部URL、SQL、サーバのファイルパス、スタックトレース、APIの生レスポンスは利用者画面へ表示しないでください。

同じエラーコードでも、発生したAPI、HTTPステータス、処理段階によって確認内容が異なります。ログにはrequest_id、処理種別、HTTPステータス、error_code、発生日時を記録してください。

  • 共通エラーレスポンス
  • URL発行APIのエラー
  • 結果照会APIのエラー
  • 顧客バックエンドエンドポイントのエラー
  • 通信・HTTP・JSONのエラー
  • 利用者向けメッセージ
  • 再試行できるエラーとできないエラー
  • ログへ記録する情報

1. 共通エラーレスポンス

基本形式

{
	"ok": false,
	"error_code": "invalid_api_key",
	"message": "APIキーが正しくありません。"
}

項目 内容
ok boolean エラー時はfalse
error_code string プログラム側で判定するエラーコード
message string エラー内容を示すメッセージ

利用者向け表示と内部ログを分ける

APIから返されたmessageをそのまま利用者へ表示するのではなく、顧客サイト側で用途に応じた日本語メッセージへ置き換える方法を推奨します。

内部ログには調査に必要な情報を記録し、画面には次の行動が分かる内容だけを表示します。

用途 表示する情報
利用者画面 再試行方法、問い合わせ先、受付番号
内部ログ request_id、kind、HTTP、error_code、発生日時、処理段階
Push! Passkeyのエラー処理をAPI response、error_code、利用者向けmessage、内部logの4領域に分け、画面表示と内部ログを分離する構成図。横長ワイド、白背景、青緑系、法人向け。画像内のテキストはresponse、error_code、message、logなど必要最低限の短い用語だけとし、説明文章はできるだけ排除する。

2. エラーの分類

分類 主な例 主な対応
入力エラー 必須項目不足、JSON不正、action不正 入力値と送信形式を修正する
認証・設定エラー APIキー不正、ドメイン無効 管理ツールと設定ファイルを確認する
整合性エラー request_id、kind、domainの不一致 開始時に保存した情報と照合する
期限エラー URL・request_idの有効期限切れ 新しいURLを発行する
通信エラー DNS、TLS、timeout、HTTP 5xx 通信環境と接続先を確認する
内部処理エラー DB取得・登録エラー request_idを記録し管理者が調査する

3. URL発行APIのエラーコード

登録URL発行APIと認証URL発行APIで確認されているエラーコードです。

error_code 発生条件 開発者が確認する項目
api_key_required JSON本文にapi_keyが指定されていない 設定ファイルからAPIキーを読み込み、JSON本文へ設定しているか
user_key_required JSON本文にuser_keyが指定されていない 顧客サイトのセッションまたはDBからuser_keyを取得できているか
invalid_api_key APIキーが不正、無効、または対象ドメインを利用できない 管理ツールで発行したAPIキー、環境、対象ドメイン、コピー時の空白を確認する
DB_DOMAIN_SELECT_ERROR Push! Passkey側でドメイン情報の取得に失敗 request_idが存在する場合は記録し、時間をおいて再試行または管理者へ連絡する
DB_REQUEST_INSERT_ERROR Push! Passkey側でURL発行リクエストの保存に失敗 同じ要求を連続送信せず、受付情報を記録して管理者へ連絡する

api_key_required

APIキーは顧客サイトのバックエンドで設定します。

$api_request = [
	'api_key' => $config['api_key'],
	'user_key' => $user_key,
	'return_page_url' => $return_page_url,
];

ブラウザから受け取った値をAPIキーとして使用しないでください。

user_key_required

登録処理では、ログイン中のユーザーを顧客サイトのセッションから取得します。

認証開始時に利用者がメールアドレスなどを入力する構成でも、顧客DBで対象ユーザーを検索し、Push! Passkey連携用のuser_keyへ変換してください。

invalid_api_key

次の項目を確認します。

  • 開発環境用と本番環境用のAPIキーを取り違えていない
  • APIキーの前後に空白や改行が含まれていない
  • 対象ドメインが管理ツールで有効になっている
  • 削除または再発行済みの古いAPIキーを使用していない
  • JSON項目名がapi_keyになっている

4. 結果照会APIのエラーコード

登録結果照会APIと認証結果照会APIで確認されているエラーコードです。

error_code 発生条件 開発者が確認する項目
api_key_required JSON本文にapi_keyがない URL発行時と同じドメイン用APIキーを設定しているか
request_id_required JSON本文にrequest_idがない URL発行APIのレスポンスから保存できているか
invalid_api_key APIキーが不正または無効 URL発行時と同じ環境・ドメイン用APIキーか
request_not_found 指定されたrequest_idが存在しない 文字列の欠落、URLパラメータの改変、別環境のrequest_idを確認する
request_domain_mismatch APIキーのドメインとrequest_idのドメインが一致しない 別顧客・別ドメイン・別環境のAPIキーを使用していないか
request_kind_mismatch 登録request_idを認証結果APIへ送るなど、処理種別が一致しない regist_resultとauth_resultの接続先、保存したkindを確認する
REQUEST_EXPIRED request_idの有効期限切れ 発行から10分を超えていないか、新しいURLを発行する
DB_REQUEST_SELECT_ERROR Push! Passkey側でリクエスト情報の取得に失敗 request_idと発生日時を記録し、管理者へ連絡する
結果照会APIのエラーをrequest_id、domain、kind、expired、databaseの5分類に分け、request_not_found、request_domain_mismatch、request_kind_mismatch、REQUEST_EXPIRED、DB_REQUEST_SELECT_ERRORを配置した横長ワイドの法人向けインフォグラフィック。白背景、青緑系。画像内のテキストはrequest_id、domain、kind、expired、DBなど必要最低限の短い用語だけとし、説明文章はできるだけ排除する。

5. request_not_found

主な原因

  • URL発行APIから返されたrequest_idを保存していない
  • request_idの一部が欠落している
  • URLパラメータのpp_request_idが変更されている
  • 開発環境のrequest_idを本番環境で照会している
  • 存在しない値を手動で指定している

確認方法

URL発行APIのレスポンスを受け取った時点で、次の情報を顧客サイトのセッションまたはDBへ保存してください。

[
	'request_id' => $request_id,
	'kind' => $kind,
	'user_key' => $user_key,
	'expire_at' => $expire_at,
	'used' => false,
]

リダイレクト後に受け取ったpp_request_idは、保存済みの値と一致することを確認します。

6. request_domain_mismatch

APIキーとrequest_idの組み合わせが一致しない

URL発行時に使用したAPIキーと、結果照会時に使用したAPIキーが異なるドメインに属している場合に発生します。

主な原因

  • 複数顧客のAPIキーを設定ファイルで取り違えている
  • 開発・検証・本番環境の設定が混在している
  • 別ドメインで発行したrequest_idを照会している
  • マルチテナント処理でAPIキーの選択を誤っている

対応

request_idを保存するときに、顧客サイト側のテナントIDや対象ドメインも一緒に保存し、結果照会時に同じ設定を使用してください。

7. request_kind_mismatch

登録と認証の結果照会先が一致しない

開始処理 正しい結果照会API
regist_start https://auth.jintec.com/regist_result
auth_start https://auth.jintec.com/auth_result

URL発行時にkindを保存し、その値から結果照会先を固定的に決定します。

$api_url = match ($kind) {
	'regist' => $config['regist_result_api'],
	'auth' => $config['auth_result_api'],
};

ブラウザから受け取ったpp_kindだけで結果照会先を決定せず、顧客サイト側で保存したkindと照合してください。

8. REQUEST_EXPIRED

有効期限は発行から10分

登録URLと認証URLの有効期限は、現在の正式仕様では発行から10分間です。

期限切れ後は古いURLやrequest_idを再利用せず、新しいURLを発行してください。

利用者向け表示例

「認証の有効時間が終了しました。最初からやり直してください。」

自動再試行しない

期限切れのrequest_idを使って結果照会を繰り返しても成功しません。

顧客サイト側でポーリングしている場合は、expiredまたはREQUEST_EXPIREDを受け取った時点でポーリングを停止します。

9. 顧客バックエンドのエラーコード

次のエラーコードは、顧客サイトのバックエンドで入力、認証状態、セッションを検証するときに使用する例です。

error_code 内容 推奨HTTP
method_not_allowed POST以外のHTTPメソッド 405
unsupported_media_type Content-Typeがapplication/jsonではない 415
empty_request リクエスト本文が空 400
invalid_json JSON形式が不正 400
invalid_action 許可されていないaction 400
login_required 登録処理に必要なログインセッションがない 401
csrf_failed CSRFトークンが不正 403
invalid_request 入力値、return_page_url、型などが不正 400
server_error 予期しない内部エラー 500

許可するaction

  • regist_start
  • auth_start
  • regist_result
  • auth_result

server_error

利用者には内部詳細を表示せず、問い合わせ用の受付番号を返します。

{
	"ok": false,
	"error_code": "server_error",
	"message": "処理を完了できませんでした。受付番号:a1b2c3d4"
}

10. 通信・HTTP・JSONエラー

状態 確認内容
DNSエラー auth.jintec.comの名前解決、DNS、プロキシを確認する
TLSエラー CA証明書、サーバ時刻、接続先ホスト名を確認する
接続タイムアウト CURLOPT_CONNECTTIMEOUT、FW、経路を確認する
応答タイムアウト CURLOPT_TIMEOUT、API負荷、ネットワーク遅延を確認する
HTTP 405 POSTで送信しているか、APIパスが正しいか確認する
HTTP 500 時間をおいて再試行し、request_idと発生日時を記録する
JSONではない応答 接続先間違い、WebサーバのHTMLエラー、プロキシ応答を確認する
必要項目不足 request_id、regist_url、auth_url、statusなどを確認する

HTML応答を成功として扱わない

try {
	$response = json_decode(
		$response_body,
		true,
		512,
		JSON_THROW_ON_ERROR
	);
} catch (JsonException $e) {
	throw new RuntimeException(
		'Push! Passkey APIの応答がJSONではありません。'
	);
}

Webサーバの405や500ページがHTMLで返された場合も、API成功として扱わないでください。

11. 利用者向けメッセージ

状態 表示例
APIキー・設定エラー 「現在この機能を利用できません。管理者へお問い合わせください。」
request_id不一致 「認証結果を確認できませんでした。最初からやり直してください。」
期限切れ 「認証の有効時間が終了しました。最初からやり直してください。」
通信エラー 「通信に失敗しました。時間をおいて再度お試しください。」
認証失敗 「認証を完了できませんでした。もう一度お試しください。」
内部エラー 「処理を完了できませんでした。受付番号:XXXXXXXX」

表示しない情報

  • APIキー
  • SQL文
  • DB接続情報
  • サーバのファイルパス
  • スタックトレース
  • cURLの詳細エラー全文
  • APIの生レスポンス

12. 再試行方針

エラー 自動再試行 対応
api_key_required 不可 実装・設定を修正する
invalid_api_key 不可 管理ツールとAPIキーを確認する
request_not_found 不可 request_idを確認し、新しい処理を開始する
request_domain_mismatch 不可 APIキーと環境を修正する
request_kind_mismatch 不可 結果照会先を修正する
REQUEST_EXPIRED 同じrequest_idでは不可 新しいURLを発行する
timeout 条件付き 二重処理を避け、状態確認後に再試行する
HTTP 5xx 条件付き 間隔を空け、回数を制限して再試行する

URL発行APIがタイムアウトした場合、Push! Passkey側でリクエスト保存まで完了している可能性があります。

無条件に連続再送せず、顧客サイト側で二重送信防止と受付ログを実装してください。

13. ログ設計

記録する情報

  • 発生日時
  • 顧客サイト側の受付番号
  • request_id
  • actionまたはkind
  • 接続したAPI
  • HTTPステータス
  • error_code
  • 処理段階
  • 再試行回数

記録しない情報

  • APIキー
  • Cookie
  • セッションID
  • パスワード
  • 秘密鍵
  • 不要な個人情報
エラー調査ログの記録項目をtimestamp、request_id、kind、API、HTTP、error_code、retryの7項目に分け、APIキー、Cookie、passwordを記録禁止として比較する横長ワイドのインフォグラフィック。白背景、青緑系、法人向け。画像内のテキストはlog、request_id、HTTP、error、retry、APIキー禁止など必要最低限の短い用語だけとし、説明文章はできるだけ排除する。

14. エラー処理の実装例

error_codeで分岐する

$error_code =
	$response['error_code'] ?? 'unknown_error';

$user_message = match ($error_code) {
	'REQUEST_EXPIRED' =>
		'認証の有効時間が終了しました。'
		. '最初からやり直してください。',

	'request_not_found',
	'request_domain_mismatch',
	'request_kind_mismatch' =>
		'認証結果を確認できませんでした。'
		. '最初からやり直してください。',

	'invalid_api_key',
	'api_key_required' =>
		'現在この機能を利用できません。'
		. '管理者へお問い合わせください。',

	default =>
		'処理を完了できませんでした。'
		. '時間をおいて再度お試しください。',
};

内部ログへ記録する

error_log(json_encode([
	'timestamp' => date('c'),
	'request_id' => $request_id,
	'kind' => $kind,
	'http_status' => $http_status,
	'error_code' => $error_code,
], JSON_UNESCAPED_UNICODE));

APIキーやCookieをログ配列へ追加しないでください。

15. 動作確認

URL発行API

  • api_key未指定時にapi_key_requiredを処理できる
  • user_key未指定時にuser_key_requiredを処理できる
  • 不正なAPIキーでinvalid_api_keyを処理できる
  • DBエラーを利用者へ詳細表示しない

結果照会API

  • request_id未指定時にrequest_id_requiredを処理できる
  • 存在しないrequest_idを拒否できる
  • ドメイン不一致を拒否できる
  • kind不一致を拒否できる
  • 期限切れ時に新しいURL発行へ案内できる

顧客バックエンドエンドポイント

  • GET要求を405で拒否できる
  • JSON以外を拒否できる
  • 不正なactionを拒否できる
  • 未ログイン登録を拒否できる
  • CSRF不一致を拒否できる

表示とログ

  • 利用者画面にAPIキーが表示されない
  • APIの生レスポンスが表示されない
  • 内部ログにrequest_idとerror_codeが記録される
  • 内部ログにAPIキーやCookieが記録されない
エラーコード対応の動作確認項目をAPIキー、user_key、request_id、domain、kind、expired、HTTP、JSON、message、logの10項目に分けた2段構成のチェックリスト型インフォグラフィック。横長ワイド、白背景、青緑系、法人向け。画像内のテキストは各項目名だけに限定し、説明文章はできるだけ排除する。

16. 次に確認するページ

トラブルシューティング

HTTP 405、JSONではない応答、APIキー不正、結果照会できない場合の具体的な確認手順を案内します。

トラブルシューティングを読む

APIリファレンス

各APIの正式なURL、リクエスト項目、レスポンス項目を確認します。

APIリファレンスを読む

認証結果の受け取り

request_id、kind、user_key、statusの照合とセッション発行を確認します。

認証結果の受け取りを読む

まとめ

error_codeを処理判断と調査に使用する

Push! Passkey APIでエラーが発生した場合は、HTTPステータスとJSON本文のerror_codeを確認します。

URL発行APIでは、APIキー、user_key、ドメイン情報、リクエスト保存に関するエラーが発生します。

結果照会APIでは、request_id、ドメイン、処理種別、有効期限、DB取得に関するエラーが発生します。

利用者向けには再試行方法が分かるメッセージを表示し、内部ログにはrequest_id、kind、HTTP、error_code、発生日時を記録してください。

APIキー、Cookie、パスワード、内部構成情報は、画面にもログにも出力しないでください。