我在搞清楚當付款完成與Woocommerce和PayPal發送IPN什麼函數被調用的一個問題。什麼Woocommerce函數被調用在PayPal IPN反應?
由於PayPal日誌文件在我點擊Pay
後立即被更新,因此我收到了IPN,但我無法弄清楚寫入該文件的函數。
我需要弄清楚,如果已經有一個內置的功能,當創建訂單發送電子郵件給管理員,並其中發生這種情況。
如果它確實存在,我需要修改其電子郵件其他人也一樣,如果沒有的話,我需要創建它自己,但我需要知道在哪裏可以把代碼。
我在搞清楚當付款完成與Woocommerce和PayPal發送IPN什麼函數被調用的一個問題。什麼Woocommerce函數被調用在PayPal IPN反應?
由於PayPal日誌文件在我點擊Pay
後立即被更新,因此我收到了IPN,但我無法弄清楚寫入該文件的函數。
我需要弄清楚,如果已經有一個內置的功能,當創建訂單發送電子郵件給管理員,並其中發生這種情況。
如果它確實存在,我需要修改其電子郵件其他人也一樣,如果沒有的話,我需要創建它自己,但我需要知道在哪裏可以把代碼。
檢查文件/wp-content/plugins/woocommerce/classes/gateways/paypal/class-wc-paypal.php
,我們看到,有功能check_ipn_response
內的行動掛鉤:
if ($this->check_ipn_request_is_valid()) :
header('HTTP/1.1 200 OK');
do_action("valid-paypal-standard-ipn-request", $_POST);
您可以掛接到它是這樣的:
add_action('valid-paypal-standard-ipn-request', 'so_12967331_ipn_response', 10, 1);
function so_12967331_ipn_response($formdata)
{
// do your stuff
}
大廈@ brasofilo的回答,我必須爲每個產品當前定單做額外的工作。
注意:我是(un)序列化數據的新手,所以我不知道爲什麼我不得不使用雙引號使unserialize()
工作。它拋出一個錯誤,否則。也許有一個更好的方式來處理這個問題。
function so_12967331_ipn_response($formdata) {
if (!empty($formdata['invoice']) && !empty($formdata['custom'])) {
if($formdata['payment_status'] == 'Completed') {
if(is_serialized($posted['custom'])) {
// backwards compatible
// unserialize data
$order_data = unserialize(str_replace('\"', '"', $posted['custom']));
$order_id = $order_data[0];
} else {
// custom data was changed to JSON at some point
$order_data = (array)json_decode($posted['custom']);
$order_id = $order_data['order_id'];
}
// get order
$order = new WC_Order($order_id);
// got something to work with?
if ($order) {
// get user id
$user_id = get_post_meta($order_id, '_customer_user', true);
// get user data
$user = get_userdata($user_id);
// get order items
$items = $order->get_items();
// loop thru each item
foreach($items as $order_item_id => $item) {
$product = new WC_Product($item['product_id']);
// do extra work...
}
}
}
}
}
我曾經想過一段時間以前,如果我沒記錯的話,那和我所做的相似。感謝您的迴應! – Brian