2016-11-08 51 views
0

我想在我的服務器上使用PHP實現PayPal IPN。我在GitHub上找到了來自Paypal的代碼。我的理解是,我在服務器上放了PaypalIPN.php和我的版本example_usage.php,並將我的版本example_usage.php的網址指定給PayPal。使用PayPal獲取PHP自定義變量值即時付款通知

example_usage.php看起來是這樣的:

<?php require('PaypalIPN.php'); 

use PaypalIPN; 
$ipn = new PayPalIPN(); 
// Use the sandbox endpoint during testing. 
$ipn->useSandbox(); 
$verified = $ipn->verifyIPN(); 
if ($verified) { 
    /* 
    * Process IPN 
    * A list of variables is available here: 
    * https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNandPDTVariables/ 
    */ 

***** This is where I should get the value of custom and store it in DB or whatever ***** 
** getPOSTdata() used here ** 

} 
// Reply with an empty 200 response to indicate to paypal the IPN was received correctly. 
header("HTTP/1.1 200 OK"); 

我將派遣自定義變量到PayPal以下列方式:

寶應該自定義變量下返回。我怎樣才能訪問它?小的子問題。這是真的嗎?它看起來非常容易,我擔心我錯過了一些東西。

編輯:我編輯PaypalIPN.php具有以下功能:

private $postData = ""; 

    public function getPOSTdata(){ 
     return $postData; 
    } 

**IN verifyIPN()** 
$raw_post_data = file_get_contents('php://input'); 
$postData=$raw_post_data; 

我使用的方式如下:

$lastname = $ipn->getPOSTdata(); 

的問題,我面對的是$lastname是一個空字符串。這不可能是真實的,因爲我知道PayPal必須給我一些東西。我究竟做錯了什麼?

+0

通過查看PaypalIPN.php,我會修改它,以便我可以訪問「verifyIPN」中定義的「$ myPost」變量。這實際上包含從PayPal傳遞的所有數據,包括您的自定義數據。 – CCamilo

回答

1

您需要添加一個方法來訪問$ myPost陣列內PaypalPN.php

PaypalIPN.php線6 - 8

private $use_sandbox = false; 

private $use_local_certs = true; 

更改爲以下:

private $use_sandbox = false; 
public $pubMyPost; 
private $use_local_certs = true; 

然後再往下...

PaypalIPN.php行75 - 79:

  $myPost[$keyval[0]] = urldecode($keyval[1]); 
     } 
    } 

    // Build the body of the verification post request, adding the _notify-validate command. 

更改爲:

  $myPost[$keyval[0]] = urldecode($keyval[1]); 
     } 
    } 
    this.pubMyPost = $myPost; // set the public var 
    // Build the body of the verification post request, adding the _notify-validate command. 

內。然後example_usage.php

$ipn->useSandbox(); 
$verified = $ipn->verifyIPN(); 
if ($verified) { 
    // Now you can access all the public var containing your key=value pairs from the post. 
    $myPost = $ipn->pubMyPost; 
} 
+0

另外,最好爲該PaypalIPN類創建一個* getPostFields *方法,但爲了簡潔起見,我只創建了一個可以輕鬆訪問的公共屬性。 – varlogtim

+0

謝謝,我最終在if(verifyIPN){}子句中使用了$ _POST [「valueIwant」]。不知道爲什麼我想讓事情複雜化。 – sanjihan