| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 | <?php
namespace App\Http\Controllers;
use Carbon\Carbon;
use App\Models\Tag;
use App\Models\Survey;
use Illuminate\Http\Request;
use GuzzleHttp\Client;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage;
class HealthyPassPortController extends Controller
{
    private $api_header = array();
    private $tag_set = array();
    public function __construct()
    {
        $this->api_header = [
            'Authorization' => 'Bearer ' . config('botApi.botToken'),
            'Accept'        => 'application/json'
        ];
    }
    public function sticker(Request $request){
        $headSticker = $request->headSticker; //頭貼
        $profile = Survey::where('line_user_id',$request->lineUserId)->first();
        $profile->head_sticker = $headSticker;
        $profile->save();
        return response()->json(["data" => $profile] );
    }
    public function profile(Request $request){
        $profile = Survey::where('line_user_id',$request->lineUserId)->first();
        return response()->json(["data" => $profile] );
    }
    /**
     * 送出問卷
     *
     */
    public function post(Request $request){
        $lineUserId = $request->lineUserId; //line UID
        $headSticker = $request->headSticker ?? ""; //頭貼
        $healthAction = $request->healthAction; //平常你有什麼健康行動(複選)
        $healthTopic = $request->healthTopic; //你對什麼健康話題有興趣(複選)
        $healthStatus = $request->healthStatus; //你覺得自己的身體狀況如何
        $healthAdapt = $request->healthAdapt; //面對疫情趨緩,以下哪一個敘述最符合你的應對
        $healthThought = $request->healthThought; //下列哪一個敘述最符合你的想法
        $healthAge = $request->healthAge; //你的年齡
        $healthNickname = $request->healthNickname; //暱稱
        $healthGender = $request->healthGender; //性別
        $healthGenderRole = $request->healthGenderRole;//性別 male or female
        
        $survey_fill_content = ["healthAction" => $healthAction, 
                                "healthTopic" => $healthTopic,
                                "healthStatus" => $healthStatus,
                                "healthAdapt" => $healthAdapt,
                                "healthThought" => $healthThought,
                                "healthAge" => $healthAge,
                                "healthGender" => $healthGender,
        ];
        
        //準備將填寫內容過API寫入 botbonnie 後台
        $buildActions = [];
        array_push($buildActions, $this->buildActionsRequest("addTag", $healthAction));
        array_push($buildActions, $this->buildActionsRequest("addTag", $healthTopic));
        array_push($buildActions, $this->buildActionsRequest("addTag", $healthStatus));
        array_push($buildActions, $this->buildActionsRequest("addTag", $healthAdapt));
        array_push($buildActions, $this->buildActionsRequest("addTag", $healthThought));
        array_push($buildActions, $this->buildActionsRequest("addTag", $healthAge));
        array_push($buildActions, $this->buildActionsRequest("addTag", $healthGender));
        if($healthGenderRole != "")array_push($buildActions, $this->buildActionsRequest("saveParams", $healthGenderRole, "demographics", "gender"));       
        $statusCode = $this->botActionsSend($lineUserId,$buildActions);
        if($statusCode == 200){
            //確認完成填寫問卷後,建立完成問券標籤
            $buildActions = [];
            array_push($buildActions, $this->buildActionsRequest("addTag", config("botApi.doneSurvey")));
            array_push($buildActions, $this->buildActionsRequest("setMenu", config("botApi.setMenuDoneSurvey")));
            $this->botActionsSend($lineUserId,$buildActions);
            //儲存填寫資料
            $survey_data = Survey::where('line_user_id',$lineUserId)->first();
            if(empty($survey_data->id)){
                $survey_data = new Survey();
            }
            $survey_data->line_user_id = $lineUserId;
            $survey_data->head_sticker = $headSticker;
            $survey_data->nickname = $healthNickname;
            $survey_data->filler_content = json_encode($survey_fill_content);
            $survey_data->save();
            return  response()->json(["result" => 'successed']);
        }else{
            return response()->json(["result" => 'failed'] );
        }
    }
    function buildActionsRequest($type, $values, $groupId = null, $paramName = ""){
        if($type == "addTag"){
            if(is_array($values)){
                $tags = $values;
            }else{
                $tags = [$values];
            }
            return [
                "type" => $type,
                "value" => $tags
            ];
        }elseif($type == "saveParams"){
            return [
                "type" => $type,
                "groupId" => $groupId,
                "values" => [
                    [
                        "name" => $paramName,
                        "value" => $values
                    ]
                ]
            ];
        }elseif($type == "setMenu"){
            return [
                "type" => $type,
                "platform" => 1,
                "value" => $values
            ];
        }
    }
    function botActionsSend($lineUserId,$actions){
        $client = new Client();
        $res_users = $client->request('POST', config('botApi.botActions'),[
            'headers'=>$this->api_header,
            'json' => [
                'userId' => $lineUserId,
                'pageId' => config('botApi.lineOAId'),
                'platform' => 1,
                'actions' => $actions
            ]
        ]);
        $statusCode = $res_users->getStatusCode();
        return $statusCode;
    }
}
 |