api.so-manager-dev.com/app/Http/Controllers/Api/PaymentStatusController.php
Your Name f139a3f608
All checks were successful
Deploy api / deploy (push) Successful in 22s
支払いAPI実装
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 20:02:25 +09:00

83 lines
2.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
use App\Models\PaymentTransaction;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
/**
* 決済ステータス取得コントローラAPI 4
*/
class PaymentStatusController extends Controller
{
/**
* 決済ステータス取得
*
* GET /api/newwipe/status?SyunoRecvNum=...
*/
public function show(Request $request): JsonResponse
{
$syunoRecvNum = $request->query('SyunoRecvNum');
if (empty($syunoRecvNum)) {
return response()->json([
'error' => [
'code' => 'INVALID_REQUEST',
'message' => 'SyunoRecvNumは必須です。',
]
], 400);
}
if (!preg_match('/^[a-zA-Z0-9]{1,20}$/', (string) $syunoRecvNum)) {
return response()->json([
'error' => [
'code' => 'INVALID_REQUEST',
'message' => 'SyunoRecvNumの形式が不正です。',
]
], 400);
}
$transaction = PaymentTransaction::where('syuno_recv_num', $syunoRecvNum)->first();
if (!$transaction) {
return response()->json([
'error' => [
'code' => 'DATA_NOT_FOUND',
'message' => '指定された受付番号のデータが見つかりません。',
]
], 404);
}
// レスポンス構築
$response = [
'SyunoRecvNum' => $transaction->syuno_recv_num,
'status' => $transaction->status,
'amount' => $transaction->amount,
'payLimit' => $transaction->pay_limit ? $transaction->pay_limit->toIso8601String() : null,
];
// 入金済みの場合は追加情報
if ($transaction->status === '入金済み') {
$response['paidDateTime'] = $transaction->paid_datetime
? $transaction->paid_datetime->toIso8601String()
: null;
$response['storeCode'] = $transaction->store_code;
$response['storeName'] = $this->getStoreName($transaction->store_code);
}
return response()->json($response);
}
/**
* 店舗コードから店舗名を取得
*/
private function getStoreName(?string $storeCode): ?string
{
if (empty($storeCode)) {
return null;
}
return config('wellnet.store_codes.' . $storeCode);
}
}