"Missing param apikey."), 400); } /* Valid API KEY (defined in credentials.php) ? */ if( $_GET['apikey'] !== USER_API_KEY && $_GET['apikey'] !== USER_API_KEY_KASSA ) { return_json_response(array('error' => "Invalid apikey: '".$_GET['apikey']."'."), 400); } if($_SERVER['REQUEST_METHOD'] === 'POST') { $body = file_get_contents('php://input'); $data = json_decode($body, true); /* Validate params */ if( !isset($data['card_number']) ) { return_json_response(array('error' => "Missing param card_number"), 400); } $card_number = $data['card_number']; if( !is_numeric($card_number) ) { return_json_response(array('error' => "Value card_number must be numeric: '".$card_number."'"), 400); } /* Validate user_id */ if( !isset($data['user_id']) || !isset($data['phone_number']) ) { return_json_response(array('error' => "Missing either param user_id or phone_number"), 400); } $is_new_membership = isset($data['phone_number']); // FIXME: Use param type=new_card instead of checking phone_number if($is_new_membership) { $phone_number = clean_phonenumber($data['phone_number']); if(!valid_phonenumber($phone_number)) { return_json_response(array('error' => "Invalid phone number: '".$phone_number."'"), 400); } /* New membership, with only card number and phone number tuple */ update_card_with_phone_number($card_number, $phone_number); /* Return card object */ return_json_response(array('user'=> NULL, 'card' => get_card($card_number))); } else { /* Existing user */ if( !is_numeric($data['user_id']) ) { return_json_response(array('error' => "Value user_id must be numeric: '".$data['user_id']."'"), 400); } /* If user does not exist, bail */ $user_data = get_user_data($data['user_id']); if( count($user_data) !== 1 ) { return_json_response(array('error' => "User with user_id '".$data['user_id']."' does not exist."), 400); } $user = $user_data[0]; $active_card_number = get_active_card_number($user); /* If card number is attached to specified user, bail */ if($active_card_number && $active_card_number === $data['card_number']) { return_json_response(array('error' => "Card number ".$data['card_number']." is already attached to user (".$data['user_id'].")."), 400); } /* If card number does not exist, bail */ $id_from_card_number = get_user_id_by_card_number($data['card_number']); if($id_from_card_number === NULL) { return_json_response(array('error' => "Card number ".$data['card_number']." does not exist."), 400); } /* If card belongs to another user, bail */ if($id_from_card_number !== "") { return_json_response(array('error' => "Card number ".$data['card_number']." belongs to another user ($id_from_card_number)."), 400); } /* Add card relationship OR set old relationship inactive and add new */ update_card($data['user_id'], $data['card_number']); return_json_response(array('user' => get_user_data($data['user_id']))); } } else { /* Validate params */ if( !isset($_GET['card_number']) ) { return_json_response(array('error' => "Missing param card_number: ".var_export($_POST, true)), 400); } $card_number = $_GET['card_number']; if( !is_numeric($card_number) ) { return_json_response(array('error' => "Value card_number must be numeric: '".$card_number."'"), 400); } $card = get_card($card_number); if(!$card || $card['user_id'] === "") { $user = NULL; } else { /* Existing user with card_number */ try{ $user = get_user_data($card['user_id'])[0]; } catch(Exception $e) { return_json_response(array('error' => $e->getMessage()), 500); return; // Note: Help IntelliJ code inspection. } } return_json_response(array('user' => $user, 'card' => $card)); }