Common game logic update sequence? (development experience related)

could someone share some tips on game update syncing with box2d-like physics?

in my game, the main loop looks like this:
preUpdate -> physics step / update hero’s states like blood
update -> sync object’s position with its rigid body / Phaser rendering / things related to rendering
postUpdate -> debug etc

what confused me is, what is the ‘correct’ sequence a game commonly use?
where is the correct position to update user input states?
and the bigiest problem:
for example I use box2d as my physics engine,
box2d.step will trigger ContactListener listeners if some events happen in the physics world,
because box2d.step is called in the preUpdate, so actually the behaviors in the listeners are still in preUpdate phase, so if you call some method this moment which are supposed to call in update phase, this will mess things up.
beside, you can’t modify rigid body in this phase (like body.setActive) in the ContactListener, the physic world is locked at this moment.
so this makes the coding harder.
I’m finding if there’s a solution that can isolate the physics callbacks, or other solution for example everytime only update ‘state’ (values only) in the preUpdate phase, and do exact update later in the update phase?

so mainly 2 questions:
1, the update sequence
2, physics engine callback integration

thanks in advance.