Bri*_*ian 5 wordpress paypal-ipn woocommerce
当使用Woocommerce完成付款并且PayPal发送IPN时,我在确定调用什么函数时遇到问题.
正在收到IPN,因为我点击后会立即更新PayPal日志文件Pay,但我无法确定写入该文件的功能.
我需要弄清楚是否已经有一个内置功能,可以在创建订单时向管理员发送电子邮件,以及发生这种情况的地方.
如果确实存在,我需要修改它以通过电子邮件发送给其他人,如果没有,那么我需要自己创建它,但我需要知道在哪里放置代码.
bra*_*ilo 11
检查文件/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);
Run Code Online (Sandbox Code Playgroud)
你可以像这样挂钩:
add_action( 'valid-paypal-standard-ipn-request', 'so_12967331_ipn_response', 10, 1 );
function so_12967331_ipn_response( $formdata )
{
// do your stuff
}
Run Code Online (Sandbox Code Playgroud)
以@brasofilo的答案为基础,我必须为当前订单的每种产品做额外的工作。
注意:我是不(对)序列化数据的新手,所以我不知道为什么必须取消转义双引号才能开始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...
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3710 次 |
| 最近记录: |