我正在創建一個自定義數字電子商務的IPN,但我有一個問題: 一切工作文件,我在我的數據庫中創建一個「等待支付」與我稱爲PID的ID付款ID),用戶轉到貝寶頁面,當付款完成後,貝寶與IPN監聽器聯繫,檢查付款是否完成並啓用用戶購買的所有媒體。PHP Paypal IPN:交易未確認
我成功創建IPN使用彌卡里克PHP類 (http://www.micahcarrick.com/php-paypal-ipn-integration-class.html)和一切工作exept 我總是得到一個pendign付款狀態,我不能得到證實的。
我目前正在貝寶沙盒中測試它,我創建了2個買家和一個賣家,並且我已經爲每個人啓用了「付款審查」。
我嘗試了不同的方法,但我總是得到相同的結果。
代碼: file_put_contents( 'ipn.log', 「\ N> IPN \ n」 個,FILE_APPEND);
//Check the Payment ID,i pass it to the IPN by GET
if(!isset($_GET['pid'])|| !is_numeric($_GET['pid'])){
file_put_contents('ipn.log',"\n!!!IPN:INVALID PID(".$_GET['pid'].")!!!\n",FILE_APPEND);
exit('PID INVALIDO!');
}
//Logging errors
ini_set('log_errors', true);
ini_set('error_log', dirname(__FILE__).'/ipn_errors.log');
// instantiate the IpnListener class
require('ipnlistener.php');
$listener = new IpnListener();
//Use the sandbox instead of going "live"
$listener->use_sandbox = true;
//validate the request
try {
$listener->requirePostMethod();
$verified = $listener->processIpn();
}
catch (Exception $e) {
error_log($e->getMessage());
exit(0);
}
//Just for debug
file_put_contents('ipn.log',"\n###IPN:verifying...###\n",FILE_APPEND);
if($verified){//the payment is verified
file_put_contents('ipn.log',"\n###IPN:transaction verified(confirmed=".$_POST['payment_status'].")###\n".$listener->getTextReport(),FILE_APPEND);
/*
Once you have a verified IPN you need to do a few more checks on the POST
fields--typically against data you stored in your database during when the
end user made a purchase (such as in the "success" page on a web payments
standard button). The fields PayPal recommends checking are:
1. Check the $_POST['payment_status'] is "Completed"
2. Check that $_POST['txn_id'] has not been previously processed
3. Check that $_POST['receiver_email'] is your Primary PayPal email
4. Check that $_POST['payment_amount'] and $_POST['payment_currency']
are correct
Since implementations on this varies, I will leave these checks out of this
example and just send an email using the getTextReport() method to get all
of the details about the IPN.
*/
if($_POST['payment_status']=="Completed"){
//--check if the price is right and enable the user media--
confirm_payment($_GET['pid'],$_POST['payment_amount']);
file_put_contents('ipn.log',"\n###IPN:Transaction completed###\n".$listener->getTextReport(),FILE_APPEND);
}
}
else {
/*
An Invalid IPN *may* be caused by a fraudulent transaction attempt. It's
a good idea to have a developer or sys admin manually investigate any
invalid IPN.
*/
file_put_contents('ipn.log',"\n###IPN:ERROR###\n".$listener->getTextReport(),FILE_APPEND);
}
我創建的調試日誌永遠是這樣
> IPN < --IT指出IPN正確稱爲
## IPN:驗證... ## # < - IPN正在驗證交易
## IPN:交易驗證(確認=待定) < - 交易是驗證但它沒有被確認,因爲它正在等待,我無法啓用下載!
你是對的,我遵循了一個指導,相反的說明; 無論如何沒有指定你必須創建一個「買家」帳戶,並使用它的電子郵件作爲目的地(而不是你的dev.paypal電子郵件)。 也支付的價格是$ _POST ['mc_gross'] NOT $ _POST ['payment_amount']如評論中所述。 – Plokko