QrcodeController.php 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use App\Helpers\PhoneHelper;
  5. use App\Models\QrcodeRecord;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Http;
  8. use Illuminate\Support\Facades\Validator;
  9. class QrcodeController extends Controller
  10. {
  11. public function generate(Request $request)
  12. {
  13. $validator = \Validator::make($request->all(), [
  14. 'tel' => 'required|digits:10',
  15. ]);
  16. if ($validator->fails()) {
  17. return response()->json([
  18. 'success' => false,
  19. 'message' => $validator->errors()->first(),
  20. ], 422);
  21. }
  22. $tel = $request->input('tel');
  23. $outletid = '';
  24. $logkey = config('app.oneapp_logkey');
  25. $baseUrl = config('app.oneapp_base_url');
  26. // Step 1: 取得 oneTimeKey
  27. $step1 = Http::post("{$baseUrl}/API/GetPrivateKey.ashx", [
  28. 'outletid' => $outletid,
  29. 'tel' => $tel,
  30. 'logkey' => $logkey,
  31. ]);
  32. if (!$step1->json('Success')) {
  33. return response()->json(['success' => false, 'message' => 'GetPrivateKey failed'], 400);
  34. }
  35. $oneTimeKey = $step1->json('data.oneTimeKey');
  36. // Step 2: 取得 User Data
  37. $step2 = Http::post("{$baseUrl}/API/GetUserData.ashx", [
  38. 'oneTimeKey' => $oneTimeKey,
  39. ]);
  40. if (!$step2->json('Success')) {
  41. return response()->json(['success' => false, 'message' => 'GetUserData failed'], 400);
  42. }
  43. $data = $step2->json('data');
  44. // Step 3: 處理資料
  45. $encryptedPhone = PhoneHelper::encrypt($tel);
  46. $maskedPhone = substr($tel, 0, 2) . '*****' . substr($tel, 7);
  47. // Step 4: 寫入紀錄
  48. QrcodeRecord::create([
  49. 'outlet_id' => $data['outletid'],
  50. 'outlet_name' => $data['name'],
  51. 'representative_id' => $encryptedPhone,
  52. 'qr_generated_at' => now(),
  53. 'source' => 'web',
  54. ]);
  55. // Step 5: 回傳
  56. return response()->json([
  57. 'success' => true,
  58. 'data' => [
  59. 'otid' => $data['otid'],
  60. 'outletid' => $data['outletid'],
  61. 'name' => $data['name'],
  62. 'representative_id' => $encryptedPhone,
  63. 'representative_id_masked' => $maskedPhone,
  64. ],
  65. ]);
  66. }
  67. public function generateFromOneApp(Request $request)
  68. {
  69. $validator = Validator::make($request->all(), [
  70. 'token' => 'required|string',
  71. ]);
  72. if ($validator->fails()) {
  73. return response()->json([
  74. 'success' => false,
  75. 'message' => $validator->errors()->first(),
  76. ], 422);
  77. }
  78. // Step 1: 取得 user data
  79. $step = Http::post(config('app.oneapp_base_url') . '/API/GetUserData.ashx', [
  80. 'token' => $request->input('token'),
  81. ]);
  82. if (!$step->json('Success')) {
  83. return response()->json(['success' => false, 'message' => 'GetUserData failed'], 400);
  84. }
  85. $data = $step->json();
  86. // Step 2: 處理資料
  87. $tel = $data['tel'];
  88. $encryptedPhone = PhoneHelper::encrypt($tel);
  89. $maskedPhone = substr($tel, 0, 2) . '*****' . substr($tel, 7);
  90. // Step 3: 寫入紀錄
  91. QrcodeRecord::create([
  92. 'outlet_id' => $data['outletid'],
  93. 'outlet_name' => $data['name'],
  94. 'representative_id' => $encryptedPhone,
  95. 'qr_generated_at' => now(),
  96. 'source' => 'oneapp',
  97. ]);
  98. // Step 4: 回傳
  99. return response()->json([
  100. 'success' => true,
  101. 'data' => [
  102. 'otid' => $data['otid'],
  103. 'outletid' => $data['outletid'],
  104. 'name' => $data['name'],
  105. 'representative_id' => $encryptedPhone,
  106. 'representative_id_masked' => $maskedPhone,
  107. ],
  108. ]);
  109. }
  110. }