The remote server returned an error: (403) Forbidden. For example here is a post who had same issue
I contacted with Paypal last week here is their response
"Thank you for contacting PayPal Merchant Technical Services.
This issue is caused by not passing User-Agent headers in your IPN post backs, it is latest update and that's why you may receive this error.
Please add User-Agent header in your IPN postback request.
The User-Agent request-header field contains information about the user agent originating the request. This is for statistical purposes, the tracing of protocol violations, and automated recognition of user agents for the sake of tailoring responses to avoid particular user agent limitations.
User agents SHOULD include this field with requests.
Here you can find more information:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
Feel free to come back to me answering this email for more information.”
How to Fix
We need to add following line in VerifyIPN and GetPDTDetails methods in PayPalStandardPaymentProcessor.cs
req.UserAgent = HttpContext.Current.Request.UserAgent;
PayPalStandardPaymentProcessor.cs
public bool VerifyIPN(string formString, out Dictionary<string, string> values)
{
...
string formContent = string.Format("{0}&cmd=_notify-validate", formString);
req.ContentLength = formContent.Length;
//paypal fix
req.UserAgent = HttpContext.Current.Request.UserAgent;
//paypal fix end
...
}
public bool GetPDTDetails(string tx, out Dictionary<string, string> values, out string response)
{
...
string formContent = string.Format("cmd=_notify-synch&at={0}&tx={1}", _paypalStandardPaymentSettings.PdtToken, tx);
req.ContentLength = formContent.Length;
//paypal fix
req.UserAgent = HttpContext.Current.Request.UserAgent;
//paypal fix end
...
}