正统十四年(1449年)十月初一,瓦剌首领也先率一路兵马,经过大同、阳和等地,并占领紫荆关,长驱进入北京地区。十月十一日,瓦剌军逼近北京,也先将军队布置在西直门以西。于谦派兵迎击瓦剌军于彰义门,打败也先部队先锋,夺回被俘者一千多人。同时于谦又派人率兵夜袭,以疲惫敌军。十月十三日,瓦剌军趁风雨大作,进攻德胜门。于谦命大将石亨在城外民房内埋伏好军队,然后派遣小股骑兵佯败诱敌。也先果然中计,亲率大批部队穷追不舍。等也先军进入埋伏圈后,于谦一声令下,明军开始反击。只见神机营火器齐发,火箭弓弩多如飞蝗般地射向敌军,明军前后夹击,也先部队大败而逃。
瓦剌军受到致命的打击之后,也先发觉明军主力在德胜门,便集中力量转攻西直门。都督孙镗率军迎战,打败也先的先头部队。由于也先不断增兵围攻孙镗,孙镗力战不支,退至城下。此时,把守城头的给事中程信,严令不准开城。同时,命城上守军发神炮,火箭轰击瓦剌军,明军又从彰义门、德胜门抽兵增援,终于打退了瓦剌军的进攻。