How does a PaymentGateway signal a completed order
A similar scenario has been discussed on #commerce Slack on Monday. In contrast to onReturn() no transition is triggered after onNotify().
@bojanz says:

it's a safeguard we'll need to add to Commerce, but won't have the resources to do so before october
once we have $order-&gt;balance and an order paid in full event, we can use it to auto-place the order
at least those two parts could land in september for 2.10


TL;DR
onReturn() must create a Payment, as suggested in a comment from @No Sssweat. In case PaymentGatewayException is thrown Commerce will redirect to the previous checkout step.
onNotify() can register info about payment but, at the current state, it won't place the order for you.