C'est le comportement de base de Thelia. La commande est créée lorsque le client clique le bouton "payer", quelque soit le type de paiement choisi.
Ceci dit, tu peux modifier le moment de l'envoi du mail au client en interceptant l'event ORDER_SEND_CONFIRMATION_EMAIL, pour faire un truc du genre :
public function checkSendOrderConfirmationMessageToCustomer(OrderEvent $event)
{
$monmodule= new Monmodule();
if ($monmodule->isPaymentModuleFor($event->getOrder())) {
if (! $event->getOrder()->isPaid()) {
$event->stopPropagation();
}
}
}
Bien évidemment, lorsque le paiement sera effectué et confirmé (order->idPaid() est true), tu devra dispatcher manuellement ORDER_SEND_CONFIRMATION_EMAIL.
Je suppose qu'il faudra faire une vérification si le numéro de la commande existe, qu'il appartienne à l'utilisateur connecté ?
Tu peux faire ça dans pay(), et rediriger vers une page d'erreur si la vérification échoue.