郭子仪首战告捷后,随即与关内节度使王思礼合兵,向长安进军。叛军大将安守忠、李归仁率大军在京城西清渠抵挡唐军,双方相持7天,唐军无法前进一步。安守忠假装撤退,郭子仪立即下令全军追击。叛军派出9000骁勇骑兵,摆开一字长蛇阵,唐军上前进攻的时候,长蛇阵首尾突然变化为两翼,夹击唐军,唐军大败。唐判官韩液、监军孙知古都被叛军俘虏,军资器械丢弃殆尽。郭子仪不得不退军,并上书肃宗,请求自贬。
肃宗见唐军一败再败,认为叛军精锐难敌,一直忧心忡忡。郭子仪认为回纥骑兵精锐,可与叛军匹敌,便劝肃宗请回纥派援兵。肃宗与回纥怀仁可汗定约:“收复京师之日,土地和百姓归唐,金帛与子女尽归回纥。”这实际上是一种变相的饮鸠止渴,同时将灾难转嫁到普通百姓身上。
怀仁可汗欣然同意,立即派儿子叶护及将军帝德等率4000精锐骑兵来到凤翔,要助唐军一臂之力。肃宗十分高兴,盛情宴劳赏赐叶护,惟其所愿。回纥军的伙食也优厚于唐军,每天供应羊200只,牛20头,米40斛。肃宗之子广平王李俶(后改名李豫,即为后来的唐代宗)还与叶护对天盟誓,约为兄弟,叶护大喜过望,主动称呼李俶为兄长。
至德二年(757年)八月二十三日,肃宗犒赏三军,准备发起总攻长安、收复京师的战斗。郭子仪依然任天下兵马副元帅(广平王李俶挂名天下兵马元帅),负责总指挥。肃宗对郭子仪说:“事情成败,在此一举。”郭子仪回答说:“如果这一战不能收复长安,臣当以死来相报。”
八月二十七日,御史大夫崔光远(即前面那位反复无常的京兆尹)首先出战,大败叛军于骆谷(今陕西周至西南)。随后,唐将光远行军司马王伯伦、判官李椿率2000人马进攻中渭桥(今陕西咸阳东北),杀叛军守桥兵1000余人,并乘胜攻至长安苑门,形势一度对唐军有利。当时驻扎在武功的叛军听说渭桥失守,担心腹背受敌,便急忙弃地而逃,奔回长安,刚好遇到唐军进攻长安苑门,于是与守城叛军内外夹击唐军,唐军溃败,唐主将王伯伦战死,另一主将李椿被叛军俘虏。
九月十二日,天下兵马元帅广平王李俶率领朔方诸道唐军及回纥、西域来援之军共15万,号称20万,从凤翔出发。回纥军到达扶风之时,郭子仪专门为叶护设宴,热情款待。出乎所有人的意料,叶护竟然慷慨说:“国家有难,我才率兵从大老远赶来相助,国难未消,何以食为!”宴会一结束,便立即率军出发。
九月二十七日,唐大军到达长安城西,在沣水之东的香积寺(位于今陕西长安南)以北摆开阵势,李嗣业为前军,郭子仪为中军,王思礼为后军,回纥兵马由叶护率领作为机动部队,唐军绵延横亘30里,要与叛军决一死战。叛军10万人在北部列阵,叛将骁将李归仁首先出阵挑战,唐军前队迎战,逼近叛军阵前,叛军突然开始大反扑,唐军阵势大乱,开始溃败。在最危急的时候,李嗣业说:“今日如果不以身饵敌,则官军非败不可。”于是卸下铠甲,光着膀子,抡起长刀,大声呼叫,冲向敌阵。李嗣业勇猛砍杀,所向披靡,共杀数十人,叛军一时惊骇,竟然被其英勇所震慑。唐军见主将身先士卒,士气大振,阵势得以稳定。
当时,叛军事先将精兵埋伏在东面,想袭击唐军的背部。唐军得知后,派朔方左厢兵马使仆固怀恩率回纥兵回击,回纥兵锐不可当,叛军望而生畏,死伤惨重,几乎全军覆没,叛军由此锐气大受挫折。李嗣业又与回纥兵从叛军阵后出击,与唐大军两面夹击,共杀死叛军6万余人,填于沟堑死者不计其数。这场血战一直从午时持续到酉时,直到夜幕降临,叛军大败之下,不得不收拾残兵退入长安城中。
这时候,仆固怀恩对广平王李俶说:“叛军肯定要逃离长安,请让我率两百骑兵追击,这样一定能俘获叛军大将安守忠、李归仁等人。”李俶却不同意,说:“将军战已疲劳,暂且休息,等明天再说。”仆固怀恩说:“李归仁、安守忠等都是叛军中的骁将,今天被我们骤然打败,这是天赐给我们的好机会,为何要纵之而逃呢!如果使其重整旗鼓,卷土重来,将是我们的大祸患,到那时后悔就迟了!兵贵神速,为何要等到明天!”广平王李俶却坚持不让追击,让仆固怀恩回去。仆固怀恩料到叛军必无守志,一定会弃城逃跑,又去向李俶请求,往而复返,一晚数次,但李俶始终没有同意。