2011-11-23 77 views
0

我收到PayPal的IPN的陣列形式是這樣的:PHP和PayPal IPN陣列

$ipn = array(
    'mc_gross' => '15.50', 
    'protection_eligibility' => 'Eligible', 
    'address_status' => 'confirmed', 
    'item_number1' => '1', 
    'tax' => '0.00', 
    'item_number2' => '2', 
    'payer_id' => 'XXXXXXXXXXXXX', 
    'address_street' => '1 Main St', 
    'payment_date' => '02:41:18 Nov 23, 2011 PST', 
    'payment_status' => 'Completed', 
    'charset' => 'windows-1252', 
    'address_zip' => '95131', 
    'mc_shipping' => '0.00', 
    'mc_handling' => '0.00', 
    'first_name' => 'Test', 
    'mc_fee' => '0.75', 
    'address_country_code' => 'US', 
    'address_name' => 'Test User', 
    'custom' => '', 
    'payer_status' => 'verified', 
    'business' => '[email protected]', 
    'address_country' => 'United States', 
    'num_cart_items' => '2', 
    'mc_handling1' => '0.00', 
    'mc_handling2' => '0.00', 
    'address_city' => 'San Jose', 
    'payer_email' => '[email protected]', 
    'mc_shipping1' => '0.00', 
    'mc_shipping2' => '0.00', 
    'txn_id' => '8RE82733S8684874F', 
    'payment_type' => 'instant', 
    'last_name' => 'User', 
    'address_state' => 'CA', 
    'item_name1' => 'trilogy2', 
    'receiver_email' => '[email protected]', 
    'item_name2' => 'trilogy1', 
    'payment_fee' => '0.75', 
    'quantity1' => '1', 
    'quantity2' => '1', 
    'receiver_id' => 'XXXXXXXXXXXXX', 
    'txn_type' => 'cart', 
    'mc_gross_1' => '5.55', 
    'mc_currency' => 'USD', 
    'mc_gross_2' => '9.95', 
    'residence_country' => 'US', 
    'transaction_subject' => 'Shopping Carttrilogy2trilogy1', 
    'payment_gross' => '15.50', 
    '' => '' 
    ); 

在這種情況下,客戶已訂購僅2項:​​和'item_name2'

顯然,客戶可以訂購X產品數量和PayPal將在通知數據中包含'item_nameX'。有沒有辦法去通過陣列,並提取所有的名字,並將它們分配給變量,所以我會碰到這樣的:

$ordered_item1 = $ipn['item_name1']; 
$ordered_item2 = $ipn['item_name2']; 
... 
$ordered_itemXYZ = $ipn['item_nameXYZ']; 

感謝您的幫助。

+0

是否有您可以創建在你身邊一個籃子的方式,通過在對貝寶的引用,涉及到這個用戶籃(SESSION_ID也許),做你的額外的邏輯(也許將其標記爲有效訂單,發送電子郵件等)一旦貝寶已確認或拒絕? – PHPology

+0

不,因爲我爲shopcart使用了不同的服務器,而不同的服務器用於結帳(解釋起來很複雜,並且與此問題無關) – Peter

回答

0

如果您的數據以前綴後跟計數命名,則應該使用數組而不是單獨的變量。爲了填補與項目信息的數組:

foreach ($ipn as $key => $value) { 
    if (preg_match('/(?P<field>[a-z]+)_?(?P<i>\d+)/', $key, $parts)) { 
     $ordered_items[(int) $parts['i']][$parts['field']] = $value; 
    } 
} 
+0

這創建了具有一些其他字段(數量,總數)的多維數組。是否有一種方法可以將其刪除爲「僅命名」? ...對於竊聽對不起,但我真的沒有得到陣列:(謝謝! – Peter