HealthyPassPortController.php 5.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Carbon\Carbon;
  4. use App\Models\Tag;
  5. use App\Models\Survey;
  6. use Illuminate\Http\Request;
  7. use GuzzleHttp\Client;
  8. use Illuminate\Support\Facades\Log;
  9. use Illuminate\Support\Facades\Storage;
  10. class HealthyPassPortController extends Controller
  11. {
  12. private $api_header = array();
  13. private $tag_set = array();
  14. public function __construct()
  15. {
  16. $this->api_header = [
  17. 'Authorization' => 'Bearer ' . config('botApi.botToken'),
  18. 'Accept' => 'application/json'
  19. ];
  20. }
  21. public function file(Request $request){
  22. }
  23. public function profile(Request $request){
  24. $profile = Survey::where('line_user_id',$request->lineUserId)->first();
  25. return response()->json(["data" => $profile] );
  26. }
  27. /**
  28. * 送出問卷
  29. *
  30. */
  31. public function post(Request $request){
  32. $lineUserId = $request->lineUserId; //line UID
  33. $headSticker = $request->headSticker; //頭貼
  34. $healthAction = $request->healthAction; //平常你有什麼健康行動(複選)
  35. $healthTopic = $request->healthTopic; //你對什麼健康話題有興趣(複選)
  36. $healthStatus = $request->healthStatus; //你覺得自己的身體狀況如何
  37. $healthAdapt = $request->healthAdapt; //面對疫情趨緩,以下哪一個敘述最符合你的應對
  38. $healthThought = $request->healthThought; //下列哪一個敘述最符合你的想法
  39. $healthAge = $request->healthAge; //你的年齡
  40. $healthNickname = $request->healthNickname; //暱稱
  41. $healthGender = $request->healthGender; //性別
  42. $healthGenderRole = $request->healthGenderRole;//性別 male or female
  43. $survey_fill_content = ["healthAction" => $healthAction,
  44. "healthTopic" => $healthTopic,
  45. "healthStatus" => $healthStatus,
  46. "healthAdapt" => $healthAdapt,
  47. "healthThought" => $healthThought,
  48. "healthAge" => $healthAge,
  49. "healthGender" => $healthGender,
  50. ];
  51. //準備將填寫內容過API寫入 botbonnie 後台
  52. $buildActions = [];
  53. array_push($buildActions, $this->buildActionsRequest("addTag", $healthAction));
  54. array_push($buildActions, $this->buildActionsRequest("addTag", $healthTopic));
  55. array_push($buildActions, $this->buildActionsRequest("addTag", $healthStatus));
  56. array_push($buildActions, $this->buildActionsRequest("addTag", $healthAdapt));
  57. array_push($buildActions, $this->buildActionsRequest("addTag", $healthThought));
  58. array_push($buildActions, $this->buildActionsRequest("addTag", $healthAge));
  59. array_push($buildActions, $this->buildActionsRequest("addTag", $healthGender));
  60. if($healthGenderRole != "")array_push($buildActions, $this->buildActionsRequest("saveParams", $healthGenderRole, "demographics", "gender"));
  61. $statusCode = $this->botActionsSend($lineUserId,$buildActions);
  62. if($statusCode == 200){
  63. //確認完成填寫問卷後,建立完成問券標籤
  64. $buildActions = [];
  65. array_push($buildActions, $this->buildActionsRequest("addTag", config("botApi.doneSurvey")));
  66. array_push($buildActions, $this->buildActionsRequest("setMenu", config("botApi.setMenuDoneSurvey")));
  67. $this->botActionsSend($lineUserId,$buildActions);
  68. //儲存填寫資料
  69. $survey_data = new Survey();
  70. $survey_data->line_user_id = $lineUserId;
  71. $survey_data->head_sticker = $headSticker;
  72. $survey_data->nickname = $healthNickname;
  73. $survey_data->filler_content = json_encode($survey_fill_content);
  74. $survey_data->save();
  75. return response()->json(["result" => 'successed']);
  76. }else{
  77. return response()->json(["result" => 'failed'] );
  78. }
  79. }
  80. function buildActionsRequest($type, $values, $groupId = null, $paramName = ""){
  81. if($type == "addTag"){
  82. if(is_array($values)){
  83. $tags = $values;
  84. }else{
  85. $tags = [$values];
  86. }
  87. return [
  88. "type" => $type,
  89. "value" => $tags
  90. ];
  91. }elseif($type == "saveParams"){
  92. return [
  93. "type" => $type,
  94. "groupId" => $groupId,
  95. "values" => [
  96. [
  97. "name" => $paramName,
  98. "value" => $values
  99. ]
  100. ]
  101. ];
  102. }elseif($type == "setMenu"){
  103. return [
  104. "type" => $type,
  105. "platform" => 1,
  106. "value" => $values
  107. ];
  108. }
  109. }
  110. function botActionsSend($lineUserId,$actions){
  111. $client = new Client();
  112. $res_users = $client->request('POST', config('botApi.botActions'),[
  113. 'headers'=>$this->api_header,
  114. 'json' => [
  115. 'userId' => $lineUserId,
  116. 'pageId' => config('botApi.lineOAId'),
  117. 'platform' => 1,
  118. 'actions' => $actions
  119. ]
  120. ]);
  121. $statusCode = $res_users->getStatusCode();
  122. return $statusCode;
  123. }
  124. }