Match ends, West Ham United 1, Fulham 0.
Fulham's Ademola Lookman missed a Panenka-style penalty with the last kick of the game as West Ham clinched a dramatic victory with an injury-time winner of their own.
The game had looked on course to end goalless before Tomas Soucek drove home from substitute Said Benrahma's pass inside the box in the first minute of injury time.
But Fulham were awarded a 95th-minute penalty when Benrahma caught Tom Cairney and, after a check by the video assistant referee, the spot-kick was awarded.
Aleksandar Mitrovic had missed his previous penalty so Lookman stepped up but his chipped effort lacked any sort of power, leaving Lukasz Fabianski waiting to make an ultimately comfortable catch.
Lookman, who has been one of Fulham's better players so far this season, understandably looked devastated when the referee blew for full-time as the chance of what would have been a well-earned point slipped away.
Fulham goalkeeper Alphonse Areola had made a number of excellent saves to deny West Ham and put the visitors within minutes of a second successive clean sheet after claiming their first win of the season against West Brom last time out.
Areola, who is on loan from Paris St-Germain, kept out Arthur Masuaku, Aaron Cresswell and Jarrod Bowen inside the first 10 minutes and also pushed Cresswell's free-kick onto the bar early in the second half.
Fulham finished strongly and had good chances to take all three points themselves as Lookman and Bobby Decordova-Reid both drew saves out of Fabianski.
But just as they looked to leave West Ham with a point, Soucek's late winner and Lookman's poor penalty ensured it was the hosts who claimed their third win of the season.
Should the West Ham goal have stood?
To add to Fulham's frustrations, both managers were in agreement after the game that there were question marks over whether Soucek's goal should have even stood.
The contentious issue was that a ball into the box was aimed at Haller, who was in an offside position, but play continued and the ball was headed down to Benrahma by the Fulham defence to produce the assist for Soucek to strike.
"A tough call on Fulham for our goal because the offside rule is not a good rule. I would claim offside for that, but we get a goal from it," said West Ham boss David Moyes.
"None of us really know the offside rule now," said Fulham boss Scott Parker. "We've got VAR, every gadget and gimmick and there are so many things to look at nobody knows.
"He's (Haller) interfering with play, my defender can't leave it."
Defeat unfortunate for much-improved Fulham
Fulham had made a terrible start to the season that suggested they would be heading back to the Championship with a whimper, losing their first four games.
But in their last two matches there have been significant signs of improvement. They were good value for their win against West Brom and they withstood some early pressure in this game that previously might have seen them wilt.
After that, their defence was rarely troubled as a West Ham side missing the attacking spark of Michail Antonio struggled to make an impression in the final third.
Failing to take a point in such a cruel fashion will be difficult to take for Fulham fans but their overall display in the 90 minutes before then should provide encouragement for the future.
Hammers run continues - the stats
- West Ham are unbeaten in their last 11 home league games against Fulham (won seven, drawn four), with the Hammers currently on a four-game winning streak, their longest since a five-game run between September 1953 and September 1957.
- Fulham are winless in their last 17 Premier League London derbies (16 losses), with their current run of 13 consecutive defeats in such matches a top-flight record.
- Fulham have won just one of their last 25 Premier League games on the road in the Premier League, a 1-0 victory against Bournemouth in April 2019.
- West Ham manager David Moyes is unbeaten in his 14 Premier League home games against Fulham (W13 D1).
- Since scoring with two consecutive efforts in January 2019 against Brighton, Fulham striker Aleksandar Mitrovic has scored with just three of his last 77 shots in the Premier League. He hasn't scored with any of his last 46 non-penalty shots with his right or left foot since a goal against Huddersfield Town in December 2018.
- West Ham goalkeeper Lukasz Fabianski has saved seven penalties since the start of the 2016-17 Premier League campaign; three more than any other goalkeeper.
- West Ham midfielder Tomas Soucek's goal was West Ham's first 90th-minute winner since Javier Hernandez scored in a 4-3 thriller against Huddersfield Town in March 2019.
After the international break West Ham travel to Sheffield United on Sunday, 22 November (14:00 GMT) while Fulham host Everton on Saturday, 21 November (15:00 GMT).
- 21OgbonnaBooked at 56minsSubstituted forDiopat 63'minutesBooked at 90mins
- 20BowenSubstituted forLanziniat 72'minutes
- 18FornalsSubstituted forBenrahmaat 72'minutes
- 29Zambo AnguissaSubstituted forCavaleiroat 90+3'minutes
- 14De Cordova-ReidSubstituted forLoftus-Cheekat 83'minutesBooked at 88mins
- 9MitrovicBooked at 55mins
- Robert Jones
- Shots on Target
Second Half ends, West Ham United 1, Fulham 0.
Penalty saved! Ademola Lookman (Fulham) fails to capitalise on this great opportunity, right footed shot saved in the bottom left corner.
Issa Diop (West Ham United) is shown the yellow card.
VAR Decision: Penalty Fulham.
Penalty conceded by Saïd Benrahma (West Ham United) after a foul in the penalty area.
Penalty Fulham. Tom Cairney draws a foul in the penalty area.
Corner, Fulham. Conceded by Declan Rice.
Attempt blocked. Ruben Loftus-Cheek (Fulham) right footed shot from the centre of the box is blocked.
Attempt blocked. Ivan Cavaleiro (Fulham) right footed shot from outside the box is blocked.
Attempt blocked. Tosin Adarabioyo (Fulham) header from the centre of the box is blocked. Assisted by Tom Cairney with a cross.
Substitution, Fulham. Ivan Cavaleiro replaces André-Frank Zambo Anguissa.
Foul by Vladimir Coufal (West Ham United).
Antonee Robinson (Fulham) wins a free kick on the left wing.
Goal! West Ham United 1, Fulham 0. Tomas Soucek (West Ham United) right footed shot from the centre of the box to the centre of the goal. Assisted by Saïd Benrahma.
Corner, West Ham United. Conceded by Alphonse Areola.
Attempt saved. Saïd Benrahma (West Ham United) right footed shot from the left side of the six yard box is saved in the bottom left corner.
Attempt saved. Saïd Benrahma (West Ham United) right footed shot from a difficult angle on the left is saved in the bottom left corner.
Ruben Loftus-Cheek (Fulham) is shown the yellow card.
Tomas Soucek (West Ham United) wins a free kick in the defensive half.
- Watch 13 first-round ties on iPlayer and the BBC Sport website and app this weekend. Find out more here.