也先在进攻北京的过程中,到处遭到军民的抵抗和不断袭击。各地的百姓自动组织起来,抗击瓦剌军的掠夺。北方边陲重镇的守兵,也抱着与城共存亡的决心,誓死保卫国土。也先进攻北京各门屡次遭到失败,中路军在居庸关的进攻也受挫,并获悉明朝各援军即将到达。唯恐后路被切断,便于十五日夜率一部人马,挟持朱祁镇由良乡(今北京市房山)向紫荆关撤退。
于谦发现也先军队正在撤退,即命令石亨等集中火炮轰击也先军营,炸死瓦剌军一万余人。瓦剌军在撤退的路上,一路烧杀抢掠,掠夺了许多物资和人口。而明军分路追击;石亨大破瓦剌军于清风店(今河北易县西),范广在固安打败瓦剌军。也先一路狂逃,十月十七日,撤出紫荆关,不久退往关外。东路的脱脱不花军,闻得中路、西路已败,亦立即撤退,并于十月二十日单独遣使进贡,来北京议和。至此,明军取得了保卫北京的胜利。
也先率军退至塞外,数次南下,都因明军防范严密而未得逞。鉴于政治诱降落空,军事进攻又遭失败。在长期的战争中,损失了大量的人力和物力,又失去了与明朝经商的机会。万般无奈之下,于景泰元年(1450年)八月,无条件地释放了明英宗朱祁镇。其后,在蒙古族内部的相王争斗中,也先的势力一落千丈,日渐衰竭。