Unable to read SPI memory manufacturer ID with Mega 2560

I have a flash 6 click from MIKROE: Flash 6 Click | Mikroe

Which comes with a W25Q128JV SPI memory: https://download.mikroe.com/documents/datasheets/w25q128jv.pdf

I’ve spent countless hours trying to just read the manufacturer ID but it keeps printing out 0. Expected value should be 0xEF.

This is my first time using SPI, and after reading a lot of source codes, I think I have a good grasp of it how it works:

Hardware connection:
Arduino 3.3V → 3.3V on Flash 6 Click.
Arduino GND → GND on Flash 6 Click.
Arduino Pin 50 → SDI on Flash 6 Click.
Arduino Pin 51 → SDO on Flash 6 Click.
Arduino Pin 52 → CLK on Flash 6 Click.
Arduino Pin 53 → CS on Flash 6 Click.

Could someone point me in the right direction? I’m really not sure which part I am missing messing up with.

#include <SPI.h>

#define WRITE 0x02
#define READ  0x03
#define WREN  0x06
#define MANID 0x90

unsigned int data;
unsigned int address = 0;
byte invalue;

void setup()
{
  Serial.begin(9600);
  Serial.println("--------------");
  Serial.println(SS); // chip select
  Serial.println(MOSI); // master out, slave in
  Serial.println(MISO); // master in, slave out
  Serial.println(SCK); // clock
  Serial.println("--------------");
  
  // set up to match device datasheet
  SPI.setBitOrder(MSBFIRST);
  SPI.setDataMode(SPI_MODE0);
  SPI.setClockDivider(SPI_CLOCK_DIV2); 
  SPI.begin(); // sets up pin modes etc.
  
  // Enable writing
  digitalWrite(SS, LOW);
  SPI.transfer(WREN);
  digitalWrite(SS, HIGH);
  
  
  delay(1000);
  
  // Read One Value from One Address
  digitalWrite(SS, LOW); 
  SPI.transfer(MANID); // read instruction
  
  SPI.transfer((address >> 16) & 255);  // send MSByte address first
  SPI.transfer((address >> 8) & 255);
  SPI.transfer(address & 255);// send LSByte address second
  invalue = SPI.transfer(0); // read the manufacturer ID 
 
  digitalWrite(SS, HIGH);
   
  Serial.print("Read Data = ");
  Serial.println(invalue, DEC); // print the ID 
}

void loop()
{
   
}