I don’t have time to look at your code, but you should try increasing the solver iteration count and decreasing the fixed time step. Modifying those variables will cost more computation time, but they will improve collision detection accuracy.
If that still doesn’t work, then you may need to look at other approaches to your game that don’t use the physics engine for collision detection and response.