Q: PayPal IPN returns invalid in live but true in sandbox I am using PayPal parallel payments.
Using this code, $ipnMessage->validate() returns false, although in sandbox returns true:
if($ipnMessage->validate()) { 
    error_log("Success: Got valid IPN data");
    // In sandbox returns true, in 'live' returns false
} else {
    error_log("ERROR: Invalid IPN ");   
}

My solution was:
foreach($ipnMessage->getRawData() as $key => $value) {
   error_log("IPN: $key => $value\n", 3, "error_log.rtf");
   if ($key == "transaction[0].status") $completed = $value;
}

if($completed == 'Completed') { 
   //error_log("Success: Got valid IPN data");
   // Always returns true
} else {
   error_log("ERROR: Invalid IPN ");    
}

The question is: checking transaction[0].status with the value Completed is a secure way to be sure the transaction was completed and  it is legitimate?
