The difference is more about context. 'Have' is more acceptable in casual and formal contexts, but 'did' is really only good for casual contexts. Also, as you correctly wrote, 'have' is in the present so to ask about something in the past, 'receive' needs to be 'received'.
New words, one handy idiom, and a 2-minute quiz — delivered to your inbox to keep your streak alive.