私はこのライブラリを使用しています: http://codeigniter.com/wiki/PayPal_Lib/
それは私にとってかなりうまくいきます。IPN から必要なフィールドに一致するテーブルにマップする order_model を作成し、次のようなメソッドでコントローラーを作成しました。
function ipn(){
$this->load->library("paypal_lib");
$res = $this->paypal_lib->ipn();
$response = print_r($res, TRUE);
log_message('error', $response);
if(isset($res["error"])) {
log_message('error', 'fail');
return;
}
if($res["verified"]) {
log_message('error', 'verified');
$res["payment"] = "paypal";
$new_order = $this->order_model->create($res["data"]);
log_message('error', 'created order: '.$new_order['id']);
} else {
log_message('error', 'no error, but not verified?');
}
}