pauth.me × Laravel — 着信認証API実装ガイド
LaravelプロジェクトにpAuth着信認証APIを組み込む手順をステップバイステップで解説します。 ユーザーは指定番号に1コール電話するだけで本人確認が完了します。
※本ページのコード例は説明目的の擬似コードです。実際の実装では環境に合わせた調整が必要です。
前提条件
- PHP 8.1以上 / Laravel 10以上
- pauth.me APIキー(無料登録で取得)
- Guzzle HTTP クライアント(Laravel標準で利用可能)
Step 1: 環境変数の設定
.env ファイルにAPIキーを追加します。
PAUTH_API_KEY=your_api_key_here
PAUTH_BASE_URL=https://api.pauth.me
Step 2: 認証セッションの開始
ユーザーの電話番号を受け取り、pAuth APIでセッションを作成します。
use Illuminate\Support\Facades\Http;
class AuthController extends Controller
{
public function startVerification(Request $request)
{
$response = Http::withToken(config('services.pauth.api_key'))
->post(config('services.pauth.base_url') . '/v1/auth/sessions', [
'phone_number' => $request->phone_number,
'callback_url' => route('auth.callback'),
]);
$session = $response->json();
session(['pauth_session_id' => $session['id']]);
return response()->json([
'session_id' => $session['id'],
'call_number' => $session['call_number'], // ユーザーがかける電話番号
]);
}
}
Step 3: 認証完了の確認(ポーリング)
フロントエンドから定期的にステータスを確認します。
public function checkStatus(Request $request)
{
$sessionId = session('pauth_session_id');
$response = Http::withToken(config('services.pauth.api_key'))
->get(config('services.pauth.base_url') . "/v1/auth/sessions/{$sessionId}");
$data = $response->json();
if ($data['status'] === 'verified') {
// 認証成功: ログイン処理へ
Auth::login(User::where('phone', $request->phone)->first());
return response()->json(['status' => 'verified']);
}
return response()->json(['status' => $data['status']]);
}
エラーハンドリング
if ($response->failed()) {
logger()->error('pAuth API error', $response->json());
return back()->withErrors(['phone' => '認証の開始に失敗しました。時間をおいて再試行してください。']);
}
// タイムアウト(セッション有効期限切れ)
if ($data['status'] === 'expired') {
return response()->json(['status' => 'expired', 'message' => '認証がタイムアウトしました。'], 408);
}
本番環境の注意点
- APIキーは必ず
.envで管理し、コードにハードコードしない - ポーリング間隔は2〜3秒、最大試行回数(例:30回 = 1分)を設定する
- セッションIDはサーバーサイドセッションまたはDBで管理し、なりすましを防ぐ
- 本番では
PAUTH_BASE_URLをproduction URLに変更する