CakePHP PayPal IPN Интеграция - PullRequest
1 голос
/ 20 июля 2011

Я использую версию CakePHP 1.3.10 и хочу интегрировать PayPal IPN для процесса оплаты.

Я нашел несколько готовых плагинов, хотя они не работают должным образом и возвращают кучу ошибок.

Я хотел бы, чтобы ваши предложения, любой орган в сообществе, использующий то же самое с успехом, и любое учебное пособие для интеграции в простые шаги.

Ваш ответ будет оценен.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 29 ноября 2012

Я только что обнаружил хороший класс PHP, который запускает все IPP PayPal.

https://github.com/Quixotix/PHP-PayPal-IPN/

Я превратил его в Компонент для моего проекта CakePhp.Для этого просто создайте новый компонент в папке app / Controller / Components / и вставьте код из этого проекта.Затем измените:

class IpnListener {
...

на

class IpnListener extends Component {
...

Затем вернитесь к контроллеру, с которым вы хотите PayPal Ipn и добавьте:

public $components = array('IpnListener');

Вы можете чемполучить доступ к классу, используя:

$this->IpnListener->foo

в функциях вашего контроллера

Надеюсь, это поможет

0 голосов
/ 20 июля 2011

Я использовал Paypal IPN с тортом раньше, и это достаточно просто, чтобы не отвечать на плагин. Используете ли вы это для отслеживания получения оплаты в приложении торт? Вы можете создать форму / кнопку PayPal в своей учетной записи PayPal, настроить обратный вызов URL, чтобы PayPal мог уведомить вас. Создайте таблицу в БД, если вы хотите записать информацию, которую отправляет PayPal. Есть метод в контроллере для обработки данных POST из PayPal. Вот мой пример кода:

function blah() {
   $this->autoRender = false;
   // post back to PayPal system to validate
   $req = 'cmd=_notify-validate';
   foreach ($_POST as $key => $value) {
      $value = urlencode(stripslashes($value));
      $req .= "&$key=$value";
   }
   $header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
   $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
   $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
   $fp = fsockopen('ssl://www.paypal.com', 443, $errno, $errstr, 30);
   if (!$fp) {// HTTP ERROR, we should record the data still..?
   } else {
      fputs($fp, $header . $req);
      while (!feof($fp)) {
         $res = fgets($fp, 1024);
         if (strcmp($res, "VERIFIED") == 0) {// verified from paypal, processing...
         } else if (strcmp($res, "INVALID") == 0) {
            // oh no, someone is hijacking us...
         }
      }
      fclose($fp);
   }
}

Какие поля в таблице зависят от того, что вы хотите сохранить. Посмотрите IPN API, и вы можете настроить тестирование в песочнице с PayPal.

...