2012-04-25 19 views
4

我正在使用Codeigniter paypal_lib測試我的購物車結帳。我從沙盒消息中獲得的結果:「VERIFIED」以及函數「validate_ipn」返回true。但是我在這裏遇到的麻煩是我的日誌文件和訂單數據包含從PayPal不時相同的數據。如何解決在一個交易中接收多個IPN消息(相同內容)

下面是我的IPN驗證:

function validate_ipn(){ 

    $url_parsed = parse_url($this->paypal_url);  
    $post_string="cmd=_notify-validate";  
    if ($this->CI->input->post()) 
    { 
     foreach ($this->CI->input->post() as $field=>$value) 
     { 
      $this->ipn_data[$field] = $value; 
      $post_string .= '&' . $field.'='.urlencode(stripslashes($value)); 
     } 
    } 

    //$fp = fsockopen($url_parsed['host'],"80",$err_num,$err_str,30); 
      $fp = fsockopen('ssl://www.sandbox.paypal.com', 443, $err_num, $err_str, 30); 
    if(!$fp) 
    { 
     $this->last_error = "fsockopen error no. $errnum: $errstr"; 
     $this->log_ipn_results(false);  
     return false; 
    } 
    else 
    { 
     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)) 
      $this->ipn_response .= fgets($fp, 1024); 

     fclose($fp); // close connection 
    } 

    if (eregi("VERIFIED",$this->ipn_response)) 
    { 
     // Valid IPN transaction. 
     $this->log_ipn_results(true); 
     return true;   
    } 
    else 
    { 
     $this->last_error = 'IPN Validation Failed.'; 
     $this->log_ipn_results(false); 
     return false; 
    } 
} 

這是我在我的日誌(沒有什麼不同)得到。所以許多消息是這樣的:

[04/24/2012 9:31 AM] - SUCCESS! 
IPN POST Vars from Paypal: 
mc_gross=11.00, protection_eligibility=Eligible, address_status=confirmed 
, item_number1=3, tax=0.00, item_number2=5, payer_id=T4WYEY49NUK4Y, item_number3=6, address_street=1 Maire-Victorin, payment_date=00:28:18 Apr 24, 
2012 PDT, payment_status=Pending, charset=windows-1252, address_zip=M5A 1E1, mc_shipping=0.00, mc_handling=0.00, first_name=Test, address_country_code=CA, 
address_name=Test User, notify_version=3.4, custom=292aaf2e76b586a80c20f13c5b1d6997, payer_status=verified, [email protected], 
address_country=Canada, num_cart_items=3, mc_handling1=0.00, mc_handling2=0.00, mc_handling3=0.00, address_city=Toronto, verify_sign=AQwZI3e5UUeRN1fFRRAZwba0SCKvAK5Jh7SdLhAZdWaitG4t3SzIzk6D, 
[email protected], mc_shipping1=0.00, mc_shipping2=0.00, mc_shipping3=0.00, tax1=0.00, tax2=0.00, tax3=0.00, txn_id=19366377KU1661939, 
payment_type=instant, last_name=User, address_state=Ontario, item_name1=Test 003 Product, [email protected], item_name2=Test 005 Product, 
item_name3=Test 006 Product, quantity1=1, quantity2=1, receiver_id=C7F8469MV6QVN, pending_reason=multi_currency, quantity3=1, txn_type=cart, mc_gross_1=2.00, mc_currency=EUR, 
mc_gross_2=4.00, mc_gross_3=5.00, residence_country=CA, test_ipn=1, transaction_subject=292aaf2e76b586a80c20f13c5b1d6997, payment_gross=, ipn_track_id=95d4aa9eb8b34, 

IPN Response from Paypal Server: 
HTTP/1.1 200 OK 

8 
VERIFIED 
0 



[04/24/2012 9:33 AM] - SUCCESS! 
IPN POST Vars from Paypal: 
mc_gross=11.00, protection_eligibility=Eligible, address_status=confirmed 
, item_number1=3, tax=0.00, item_number2=5, payer_id=T4WYEY49NUK4Y, item_number3=6, address_street=1 Maire-Victorin, payment_date=00:28:18 Apr 24, 
2012 PDT, payment_status=Pending, charset=windows-1252, address_zip=M5A 1E1, mc_shipping=0.00, mc_handling=0.00, first_name=Test, address_country_code=CA, 
address_name=Test User, notify_version=3.4, custom=292aaf2e76b586a80c20f13c5b1d6997, payer_status=verified, [email protected], 
address_country=Canada, num_cart_items=3, mc_handling1=0.00, mc_handling2=0.00, mc_handling3=0.00, address_city=Toronto, verify_sign=AQwZI3e5UUeRN1fFRRAZwba0SCKvAK5Jh7SdLhAZdWaitG4t3SzIzk6D, 
[email protected], mc_shipping1=0.00, mc_shipping2=0.00, mc_shipping3=0.00, tax1=0.00, tax2=0.00, tax3=0.00, txn_id=19366377KU1661939, 
payment_type=instant, last_name=User, address_state=Ontario, item_name1=Test 003 Product, [email protected], item_name2=Test 005 Product, 
item_name3=Test 006 Product, quantity1=1, quantity2=1, receiver_id=C7F8469MV6QVN, pending_reason=multi_currency, quantity3=1, txn_type=cart, mc_gross_1=2.00, mc_currency=EUR, 
mc_gross_2=4.00, mc_gross_3=5.00, residence_country=CA, test_ipn=1, transaction_subject=292aaf2e76b586a80c20f13c5b1d6997, payment_gross=, ipn_track_id=95d4aa9eb8b34, 

IPN Response from Paypal Server: 
HTTP/1.1 200 OK 
Date: Tue, 24 Apr 2012 07:33:44 GMT 

8 
VERIFIED 
0 
+0

我現在有完全相同的問題 – mclaassen 2013-07-24 01:34:58

+0

很奇怪 - 你如何將IPN網址傳遞給貝寶? IIRC,您可以將其設置在您的帳戶中,並且可以在付款過程中傳遞它。不知道兩者是否會造成兩個通知?另外,不要打折貝寶的錯誤。我遇到了一些問題,需要與員工長時間打電話,結果導致他們採取了一些行動來解決問題。檢查您的出站流程和帳戶,然後我建議您與他們聯繫。關於同一件事的兩個通知,相隔2分鐘似乎......很奇怪。間歇? – 2013-11-08 05:12:56

回答

0

這很煩人,這甚至會發生,但在PayPal解決問題之前,您需要制定安全措施,以免兩次處理相同的付款。

最常見的解決方案是將數據庫中的事務標記爲已處理,更改狀態字段或添加日期。然後你在每個IPN消息上檢查這個值,如果它已經設置了,忽略IPN(但記錄它)。

相關問題