Lo que está pasando en esta migración es que no estás eliminando el index creado al hacerla.
Dada esta línea de tu migración:
$table->foreign('user_id')->references('id')->on('users');
Quiere decir que se está creando un índice en la base de datos a la clave primaria user_id. Si eliminas más tarde la columna user_id tendrías que eliminar el índice.
La solución consiste simplemente en hacer el dropForeign antes de eliminar el "user_id" con dropColumn.
public function down()
{
Schema::table('payments', function (Blueprint $table) {
$table->dropForeign('payments_user_id_foreign');
$table->dropColumn('user_id');
});
}
Solo tienes que asegurarte del nombre del índice que se ha generado, que siempre combina el nombre de la tabla y el campo de la relación, con la palabra foreign. Luego te dejará hacer el dropColumn al volver atrás la migración.