Получите информацию о последнем заказе на продление подписки в Woocommerce 3

Мы пытаемся передать данные о продлении подписки на woocommerce в программу вознаграждений за лояльность, и у нас возникают всевозможные проблемы, и мы не можем получить соответствующую информацию о подписке на woocommerce или что-то еще для работы. Наш полный код лояльности для zinrelo работает с ручными данными.

Полный код с вашими предложениями запускается в файле функций

add_action( 'woocommerce_subscription_renewal_payment_complete', 'custom_add_subscription_points', 10, 1 );
  function custom_add_subscription_points( $subscription ) {
    if ( ! $subscription )
        return;

    // Get related orders
    $orders_ids = $subscription->get_related_orders();

    // Get the last renewal related Order ID
    $order_id = reset( $order_ids );

    $order = wc_get_order($order_id);
    $order_id = $order->get_id();
    $order_email = $order->get_billing_email();
    $order_date = $order->get_date_completed();
    $order_total = $order->get_total();
    $order_subtotal = $order->get_subtotal();

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, "https://api.zinrelo.com/v1/loyalty/purchase");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, "user_email={$order_email}&activity_id=made_a_purchase&order_{id=$order_id}&total={$order_total}&subtotal={$order_subtotal}");
    curl_setopt($ch, CURLOPT_POST, 1);

    $headers = array();
    $headers[] = "Partner-Id: 000000";
    $headers[] = "Api-Key: 000000";
    $headers[] = "Content-Type: application/x-www-form-urlencoded";
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
    }
    curl_close ($ch);
}

person Mark Ferguson    schedule 31.10.2018    source источник


Ответы (1)


Поскольку метод WC_Subscription get_related_orders() дает массив идентификаторов заказов, вам необходимо использовать функцию reset(), чтобы получить идентификатор последнего заказа на продление и избежать ошибка с функцией wc_get_order(), которая ожидает уникальный идентификатор заказа в качестве аргумента (но не массив).

Так что постарайтесь:

add_action( 'woocommerce_subscription_renewal_payment_complete', 'custom_add_subscription_points', 10, 1 );
function custom_add_subscription_points( $subscription, $last_order ) {
    if ( ! $subscription )
        return;

    $order_email    = $last_order->get_billing_email();
    $order_date     = $last_order->get_date_completed();
    $order_total    = $last_order->get_total();
    $order_subtotal = $last_order->get_subtotal();
}

Теперь он должен работать с:

curl_setopt($ch, CURLOPT_POSTFIELDS, "user_email={$order_email}&activity_id=made_a_purchase&order_{id=$order_id}&total={$order_total}&subtotal={$order_subtotal}");
person LoicTheAztec    schedule 31.10.2018
comment
При запуске обновления мы получаем ошибку 500. Есть предположения - person Mark Ferguson; 01.11.2018
comment
Я добавил наш полный код функций. Код curl, созданный вручную и открытый в файле php, работает. - person Mark Ferguson; 01.11.2018
comment
@MarkFerguson Да, мой код работает ... но я не могу протестировать часть CURL, и никто не может. - person LoicTheAztec; 01.11.2018