Не совсем одно и то же.
Оба слова связаны с платежами. И то, и другое означает "внести плату".
Но в том и то и дело, что смыслы у них совпадают не полностью.
Оплатить можно что-то - товар, работу, услуги. Например, проезд в транспорте, коммунальные услуги, выставленный счет, результаты труда, аренду, вещь и тому подобное.
Между прочим, с предлогом "за" этот глагол не употребляется. Так что правильно "оплатить проезд", "оплатить аренду", "оплатить воду (свет, отопление)".
Единственный вариант, когда глагол "оплатить" можно использовать с предлогом "за" - когда он относится не к предмету платежа, а используется в значении "вместо". Например: "Этот счет я оплатил за нее".
"Уплатить" используется тогда, когда речь идет о том, что платят. О деньгах и их эквивалентах: взносах, сборах, пошлинах, вознаграждении, алиментах. штрафах и так далее.
Правильно будет: "уплатил налог", "уплатил алименты", "уплатил вознаграждение", "уплатил штраф" - "оплатить" налог (алименты, вознаграждения, штрафы) невозможно, ведь это платежи, а не товары или услуги.
Так что:
- оплатить - это заплатить за что-то
- уплатить - это заплатить что-то
Так и можно проверять, когда какое слово использовать - заменой на слово "заплатить" (за что? или что?)
"Я оплатил проживание в гостинице" - "Я заплатил (за что?) за проживание в гостинице". Вполне нормальная фраза. Значит, все верно - "оплатил".
"Я уплатил штраф" - "Я заплатил (что?) штраф"; согласитесь, "заплатил за штраф" в этой фразе звучит не по-русски - значит, использовать в ней глагол "оплатил" неверно.
Исключение: слово "долг" - у него несколько смыслов и в зависимости от ситуации допустимо использовать с ним оба глагола.