How can IPN (Instant Payment Notification) be used in conjunction with PayPal integration in PHP?

To use IPN with PayPal integration in PHP, you need to set up a listener script that will receive notifications from PayPal about payment transactions. This listener script should verify the authenticity of the notification and process the payment accordingly.

// Listener script to handle PayPal IPN
// Verify IPN request
$raw_post_data = file_get_contents('php://input');
$raw_post_array = explode('&', $raw_post_data);
$myPost = array();
foreach ($raw_post_array as $keyval) {
  $keyval = explode ('=', $keyval);
  if (count($keyval) == 2)
    $myPost[$keyval[0]] = urldecode($keyval[1]);
}
$req = 'cmd=_notify-validate';
foreach ($myPost as $key => $value) {
  $value = urlencode(stripslashes($value));
  $req .= "&$key=$value";
}

// Post IPN data back to PayPal to validate
$ch = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr');
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));

// Get response from PayPal
if( !($res = curl_exec($ch)) ) {
    curl_close($ch);
    exit;
}
curl_close($ch);

// Process IPN data
if (strcmp ($res, "VERIFIED") == 0) {
    // Payment is verified, process it accordingly
    // Access IPN data using $_POST array
} else if (strcmp ($res, "INVALID") == 0) {
    // IPN data is invalid, log for investigation
}