2017-04-23 13 views
0

私はlocalhostで作業しています。私は正常に私のウェブサイトでPayzaを実装していないと私もペイパルを統合する方向に向かっていません。私はいくつかのウェブサイトからコードをダウンロードしました(どこから覚えていないのでしょうか?)そして、自分の要件に従って自分のウェブサイト上で修正して実装する前に、受け取ったlocalhostでテストを試みました。このコードは、URLに送信されたIPNデータを受信するのではなく、すべての手順で動作するようです。私は開発用にlocalhostを使用しているので、私はngrokをテスト目的で使用しています(インターネット上でlocalhostを実行するため)。以下は2ページです。支払い後にPayPal IPNが正常に動作しないURL

のindex.php

<?php 
$data=array(
'merchant_email'=>'[email protected]', 
'product_name'=>'Demo Product', 
'amount'=>5.50, 
'currency_code'=>'USD', 
'thanks_page'=>'http://229a1c8a.ngrok.io/sites/paypal3/success.php', 
'notify_url'=>'http://229a1c8a.ngrok.io/sites/paypal3/ipn.php', 
'cancel_url'=>'http://229a1c8a.ngrok.io/sites/paypal3/cancel.php', 
'paypal_mode'=>true 
); 
if(isset($_POST['pay_now'])){ 
echo '<link rel="stylesheet" type="text/css" href="style.css" />'; 
echo '<div class="wait">PayPal is processing the payment, please wait...</div>'; 
echo '<div class="loader"> 
     <div></div> 
     <div></div> 
     <div></div> 
     <div></div> 
     <div></div> 
    </div>'; 
echo infotutsPaypal($data); 
}else{ 
?> 
<html> 
     <title>Integrate PayPal Payment gateway in php - InfoTuts</title> 
     <head> 
     <link rel="stylesheet" type="text/css" href="style.css" /> 
     </head> 
     <div id="mhead"><h2>Integrate PayPal Payment gateway in PHP - <span class="red">Info</span>Tuts</h2></div> 
     <div id="product"> 
     <form id='paypal-info' method='post' action='#'> 
     <label>Product Name : <?php echo $data['product_name']; ?></label></br> 
     <label>Product Price : <?php echo $data['amount'].''.$data['currency_code']; ?></label> 
     <input type='submit' name='pay_now' id='pay_now' value='Pay' /> 
     </form> 
     </div> 
</html> 
<?php 
} 
    function infotutsPaypal($data) { 

      define('SSL_URL', 'https://www.paypal.com/cgi-bin/webscr'); 
      define('SSL_SAND_URL', 'https://www.sandbox.paypal.com/cgi-bin/webscr'); 

      $action = ''; 
      //Is this a test transaction? 
      $action = ($data['paypal_mode']) ? SSL_SAND_URL : SSL_URL; 

      $form = ''; 

      $form .= '<form name="frm_payment_method" action="' . $action . '" method="post">'; 
      $form .= '<input type="hidden" name="business" value="' . $data['merchant_email'] . '" />'; 
      // Instant Payment Notification & Return Page Details/
      $form .= '<input type="hidden" name="notify_url" value="' . $data['notify_url'] . '" />'; 
      $form .= '<input type="hidden" name="cancel_return" value="' . $data['cancel_url'] . '" />'; 
      $form .= '<input type="hidden" name="return" value="' . $data['thanks_page'] . '" />'; 
      $form .= '<input type="hidden" name="rm" value="2" />'; 
      // Configures Basic Checkout Fields --> 
      $form .= '<input type="hidden" name="lc" value="" />'; 
      $form .= '<input type="hidden" name="no_shipping" value="1" />'; 
      $form .= '<input type="hidden" name="no_note" value="1" />'; 
      // <input type="hidden" name="custom" value="localhost" />--> 
      $form .= '<input type="hidden" name="currency_code" value="' . $data['currency_code'] . '" />'; 
      $form .= '<input type="hidden" name="page_style" value="paypal" />'; 
      $form .= '<input type="hidden" name="charset" value="utf-8" />'; 
      $form .= '<input type="hidden" name="item_name" value="' . $data['product_name'] . '" />'; 
      $form .= '<input type="hidden" value="_xclick" name="cmd"/>'; 
      $form .= '<input type="hidden" name="amount" value="' . $data['amount'] . '" />'; 

      $form .= '</form>'; 
      $form .= '<script>'; 
      $form .= 'setTimeout("document.frm_payment_method.submit()", 0);'; 
      $form .= '</script>'; 
      return $form; 
     } 

ipn.php

<?php 
class PayPal_IPN { 
    function infotuts_ipn($im_debut_ipn) { 
     define('SSL_P_URL', 'https://www.paypal.com/cgi-bin/webscr'); 
     define('SSL_SAND_URL', 'https://www.sandbox.paypal.com/cgi-bin/webscr'); 
     $hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']); 
     if (!preg_match('/paypal\.com$/', $hostname)) { 
      $ipn_status = 'Validation post isn\'t from PayPal'; 
      if ($im_debut_ipn == true) { 
       // mail test 
      } 
      return false; 
     } 

    // parse the paypal URL 
     $paypal_url = ($_REQUEST['test_ipn'] == 1) ? SSL_SAND_URL : SSL_P_URL; 
     $url_parsed = parse_url($paypal_url); 

    $post_string = ''; 
     foreach ($_REQUEST as $field => $value) { 
      $post_string .= $field . '=' . urlencode(stripslashes($value)) . '&'; 
     } 
     $post_string.="cmd=_notify-validate"; // append ipn command 
     // get the correct paypal url to post request to 
     $paypal_mode_status = $im_debut_ipn; //get_option('im_sabdbox_mode'); 
     if ($paypal_mode_status == true) 
      $fp = fsockopen('ssl://www.sandbox.paypal.com', "443", $err_num, $err_str, 60); 
     else 
      $fp = fsockopen('ssl://www.paypal.com', "443", $err_num, $err_str, 60); 

     $ipn_response = ''; 

     if(!$fp){ 
     // could not open the connection. If loggin is on, the error message 
     // will be in the log. 
     $ipn_status = "fsockopen error no. $err_num: $err_str"; 
     if ($im_debut_ipn == true) { 
      echo 'fsockopen fail'; 
     } 
     return false; 
     }else{ 
     // Post the data back to paypal 
     fputs($fp, "POST $url_parsed[path] HTTP/1.1\r\n"); 
     fputs($fp, "Host: $url_parsed[host]\r\n"); 
     fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); 
     fputs($fp, "Content-length: " . strlen($post_string) . "\r\n"); 
     fputs($fp, "Connection: close\r\n\r\n"); 
     fputs($fp, $post_string . "\r\n\r\n"); 
     // loop through the response from the server and append to variable 
     while (!feof($fp)) { 
      $ipn_response .= fgets($fp, 1024); 
     } 
     fclose($fp); // close connection 
     } 
     // Invalid IPN transaction. Check the $ipn_status and log for details. 
     if (!preg_match("/VERIFIED/s", $ipn_response)) { 
      $ipn_status = 'IPN Validation Failed'; 
      if ($im_debut_ipn == true) { 
       echo 'Validation fail'; 
       print_r($_REQUEST); 
      } 
      return false; 
     }else{ 
      $ipn_status = "IPN VERIFIED"; 
      if ($im_debut_ipn == true) { 
       echo 'SUCCESS'; 
     } 
     return true; 
     } 
    } 
    function ipn_response($request){ 
    mail("[email protected]","My subject",print_r($request,true)); 
    $im_debut_ipn=true; 
    if ($this->infotuts_ipn($im_debut_ipn)) { 
      // if paypal sends a response code back let's handle it 
     if ($im_debut_ipn == true) { 
      $sub = 'PayPal IPN Debug Email Main'; 
      $msg = print_r($request, true); 
      $aname = 'infotuts'; 
      //mail send 
     } 
       // process the membership since paypal gave us a valid + 
     $this->insert_data($request); 
     } 
    } 
    function issetCheck($post,$key){ 
    if(isset($post[$key])){ 
     $return=$post[$key]; 
    }else{ 
     $return=''; 
    } 
    return $return; 
    } 
    function insert_data($request){ 
    require_once('dbconnect.php'); 
    $post=$request; 
    $item_name=$this->issetCheck($post,'item_name'); 
    $amount=$this->issetCheck($post,'mc_gross'); 
    $currency=$this->issetCheck($post,'mc_currency'); 
    $payer_email=$this->issetCheck($post,'payer_email'); 
    $first_name=$this->issetCheck($post,'first_name'); 
    $last_name=$this->issetCheck($post,'last_name'); 
    $country=$this->issetCheck($post,'residence_country'); 
    $txn_id=$this->issetCheck($post,'txn_id'); 
    $txn_type=$this->issetCheck($post,'txn_type'); 
    $payment_status=$this->issetCheck($post,'payment_status'); 
    $payment_type=$this->issetCheck($post,'payment_type'); 
    $payer_id=$this->issetCheck($post,'payer_id'); 
    $create_date=date('Y-m-d H:i:s'); 
    $payment_date=date('Y-m-d H:i:s'); 

    mysqli_query($con,"INSERT INTO infotuts_transection_tbl(item_name,payer_email,first_name,last_name,amount,currency,country,txn_id,txn_type,payer_id,payment_status,payment_type,create_date,payment_date) 
    VALUES('$item_name','$payer_email','$first_name','$last_name','$amount','$currency','$country','$txn_id','$txn_type','$payer_id','$payment_status','$payment_type','$create_date','$payment_date')"); 
    mysqli_close($con); 
    } 
} 
$obj = New PayPal_IPN(); 
$obj->ipn_response($_REQUEST); 
?> 

答えて

0

IPNは、それが唯一のドメインまたはライブサイトに送信されます、ローカルホストで受け取ることができません。あなたはIPNの履歴を行くsandbox.paypal.com

  • にして、

    1. ログインをIPNコードを確認したい場合は、いずれかの歴史をクリックすると、IPN完全なURLを取得します。
    2. ローカルホストに郵便受けの送信リクエストを使用しています。今すぐあなたはIPNの応答を検証することができます
  • +0

    私はインターネット経由でローカルホストにアクセスするためにngrokを使用しています。 Payzaでテストしてもlocalhostには送られませんでしたが、ngrokはインターネット経由でlocalhostにアクセスできるため、ngrokを使ってIPNデータを送信しました。 payzaができれば、なぜpaypalできないのですか? –

    +0

    私はngrokを使用していないので、ドメインへのローカルホストの処理方法がわかりません。 https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNTesting/ここでは、IPNのトラブルシューティングのヒントを紹介します。それはあなたを助けるかもしれない:) – Alagesan

    関連する問題