2013-04-18 11 views
0
public function run() 
    { 
     $postFields = 'cmd=_notify-validate'; 

     foreach($_POST as $key => $value) 
     { 
      $postFields .= "&$key=".urlencode($value); 
     } 

     $ch = curl_init(); 

     curl_setopt_array($ch, array(
      CURLOPT_URL => $this->_url, 
      CURLOPT_RETURNTRANSFER => true, 
      CURLOPT_SSL_VERIFYPEER => false, 
      CURLOPT_POST => true, 
      CURLOPT_POSTFIELDS => $postFields 
     )); 

     $result = curl_exec($ch); 
     curl_close($ch); 

     $fh = fopen('result.txt', 'w'); 
     fwrite($fh, $result . ' -- ' . $postFields); 
     fclose($fh); 

     echo $result; 
    } 
} 
?> 

我得到的結果在文本文件中,像這樣:獲取PayPal返回字符串到MySQL數據庫?

CMD = _notify-驗證&的test_ipn = 1個& payment_type =即時& PAYMENT_DATE = 02:39:41 2011年10月6日PDT & PAYMENT_STATUS =完成& address_status =證實& payer_status =驗證& FIRST_NAME =約翰&姓氏=史密斯& [email protected] & payer_id = TESTBUYERID01 & ADDRESS_NAME =約翰·史密斯& address_cou n請=美國& address_country_code = US & address_zip = 95131 & ADDRESS_STATE = CA & ADDRESS_CITY =聖何塞& address_street = 123,任何街道& [email protected] & [email protected] & receiver_id = TESTSELLERID1 & residence_country = US & ITEM_NAME =東西& = ITEM_NUMBER AK-1234 &量= 1個&運費= 3.04 &稅= 2.02 & mc_currency = USD & mc_fee = 0.44 & mc_gross = 12.34 & mc_gross_1 = 9.34 & txn_type = web_accept & txn_id =41106939¬ify_version= 2.1 &定製= XYZ123 &的charset =窗口1252 & verify_sign = AB3bSjvFd3wXL7rCt.OOGW-nSKg-Ahh5RbboVG4bn9LSAon94Wjt2Oj9

我如何解碼這個字符串,並把它變成mysql數據庫?

我需要在數據庫中輸入客戶的名字,姓氏,地址,電子郵件,物品編號,物品名稱,數量,運輸和時間戳。請在代碼中使用這些,我只需要幫助解碼並將其存入數據庫。謝謝

+0

您的文件似乎只包含帖子字段,其結果是哪裏? – Barmar 2013-04-18 02:46:06

+0

結果是您在上面看到的字符串,我將它捕獲在文本文件中。 – 2013-04-18 02:52:22

+0

'--'在哪裏? – Barmar 2013-04-18 02:54:02

回答

2

您不需要解碼字符串。

我剛剛檢查了PayPal文檔。 notify-validate返回的唯一東西是字符串VERIFIEDINVALID。您發佈的內容都不是PayPal返回字符串的一部分。如果你想要姓氏,它在$_POST['last_name']

爲了得到它到MySQL INSERT語句,做這樣的事情(我只是出4列,可以推斷你想要的所有字段):

$stmt = $con->prepare("INSERT INTO mytable (first_name, last_name, address, email) values (?, ?, ?, ?)"); 
$stmt->bind_param("ssss", $_POST['first_name'], $_POST['last_name'], $_POST['address'], $_POST['email']); 
$stmt->execute(); 
+0

我知道sql代碼,我只是不知道如何將數組獲取到msysql插入語句。 – 2013-04-18 02:54:13

+0

我已經添加了一些代碼來顯示,它假定您使用的是mysqli API。如果您使用PDO,翻譯應該是顯而易見的。如果你使用mysql擴展,升級。 – Barmar 2013-04-18 02:58:08

+0

你是正確的通知驗證退貨覈實或無效。我從PayPal獲得將IPN發送到文本文件的結果。該字符串中的某些字段是我想要的數據庫中的字段。我瞭解sql語句。問題是,即使在涉及到txt文件之前,我如何從字符串中獲取last_name,然後將結果存入數據庫? 「$ stmt = $ con> prepare」之前有什麼? – 2013-04-18 03:28:15

0

可以爆炸與字符串&以獲得每個參數的值,然後您可以用=爆炸以獲得密鑰和值。

$params = explode('&', $result); 

$paypal_result_arr = array(); 

foreach($params AS $param) { 
    $param_arr = explode('=', $param); 

    if(count($param_arr) == 2) { 
     $paypal_result_arr[$param_arr[0]] = $param_arr[1]; 
    } 
} 

$ paypal_result_arr關聯數組會給你從貝寶返回的所有值。 之後,您可以使用代碼$ paypal_result_arr ['first_name']獲得第一個名字,等等......

+1

這不會解碼查詢字符串中的特殊字符,例如%十六進制代碼。這就是爲什麼你應該使用像'parse_str'這樣的函數。 – Barmar 2013-04-18 02:53:14