OK, some people have argued that p=mv is only valid for low velocities. This not true, P=mv is valid for all velocities and will give the correct value provided that the relativistic mass is used, which becomes more apparent at higher velocities.
Now, the reason that a photon has momentum is because it has energy
Energy of photon E=HC/L (let L stand for lambda, the wavelength, c the speed of light and H plank's constant),
then by using Velocity = f.L , f = frequency, you get that:
P = H/L , essentially this is because of the equivalency between energy and mass.