Faits: A. A._ se trouve en détention provisoire à Genève depuis le 28 février 2012, sous la prévention de blanchiment aggravé. Il lui est reproché d'avoir, de novembre 2011 à février 2012, en tant qu'employé d'un bureau de change genevois, blanchi plusieurs millions d'euros provenant de trafics de stupéfiants commis à Lyon. Il était mis en cause par le dénommé B._, ainsi que par un employé de celui-ci, dénommé C._. Après avoir collecté des fonds provenant de trafiquants de drogue, ils les acheminaient en Suisse et les changeaient auprès du prévenu en grosses coupures, ou procédaient à des virements en faveur de donneurs d'ordre marocains. Ces mises en cause étaient corroborées par des écoutes téléphoniques au sujet desquelles le prévenu - déjà condamné en 2007 pour le même genre d'infraction - s'était contenté d'évoquer une plaisanterie ou un piège. La détention provisoire a été prolongée par le Tribunal des mesures de contraintes (Tmc), en raison des risques de collusion avec les personnes à entendre. B._ et C._ étaient certes détenus en France, mais on ignorait jusqu'à quand devait durer cette détention, et le prévenu avait été en relation avec d'autres personnes qu'il pouvait être tenté d'influencer. Compte tenu des antécédents du recourant, un risque de réitération a également été retenu. Par arrêt du 5 mai 2012 (1B_226/2012), le Tribunal fédéral a confirmé l'arrêt cantonal du 3 avril 2012, retenant que les charges étaient suffisantes et qu'il existait un risque de collusion à l'égard des deux personnes qui le mettaient en cause. B. Le 29 mai 2012, le prévenu a demandé sa mise en liberté immédiate. Il reprochait au Ministère public de ne pas vouloir procéder à une nouvelle audition de B._ et C._, de sorte qu'il n'existait plus de risque de collusion. Une commission rogatoire a été adressée aux autorités lyonnaises le même jour. Par ordonnance du 6 juin 2012, le Tmc a refusé la mise en liberté du prévenu, écartant le risque de fuite mais retenant le danger de collusion et de réitération. Par arrêt du 27 juin 2012, la Chambre pénale de recours de la Cour de justice genevoise a rejeté le recours formé par A._. Le risque de collusion demeurait jusqu'à l'audition des deux précités, déjà entendus le 13 mars 2012. Le Procureur n'avait jamais renoncé à une nouvelle audition, mais avait attendu l'évolution de l'enquête pour l'ordonner. Le texte de la commission rogatoire avait été soumis le 6 mai 2012 à l'avocat du prévenu et l'envoi avait eu lieu deux semaines plus tard. Il n'y avait pas de violation du principe de célérité, ni d'attitude contradictoire de la part du Ministère public. Le risque de réitération a lui aussi été confirmé: le recourant avait été condamné avec sursis en juillet 2007 pour des faits similaires et avait recommencé ses agissements à peine quatre mois après l'échéance du sursis. La durée de la détention demeurait proportionnée au regard des montants blanchis. C. Par acte du 19 juillet 2012, A._ forme un recours en matière pénale par lequel il demande principalement l'annulation de l'arrêt cantonal et sa mise en liberté, subsidiairement le renvoi de la cause à la cour cantonale pour nouvelle décision. La cour cantonale se réfère à son arrêt, sans observations. Le Ministère public ne s'est pas déterminé. 