Я делаю вызов партнерскому API, используя данные, содержащиеся в полях проверки woocommerce, а также в корзине. Этот первый вызов выполняется с использованием хука процесса оформления заказа для проверки данных через API. если вызов возвращает, что он действителен, процесс продолжается, в противном случае он останавливается.
Затем мне нужно дождаться завершения платежа, чтобы сделать еще один вызов, чтобы фактически создать план с использованием тех же данных. Есть ли способ передать массив, который я создаю при первом вызове хука процесса оформления заказа, на хук завершения оплаты, чтобы не перестраивать массив?
Код будет выглядеть следующим образом:
add_action('woocommerce_checkout_process', 'apicall_verif');
function apicall_verif () {
$_ids = array(...);
$billing_fields = [
'billing_first_name' => '',
'billing_last_name' => '',
'billing_email' => '',
'billing_phone' => '',
'insurance-birthdate' => '',
'gender-selection' => '',
'billing_address_1' => '',
'billing_address_2' => '',
'billing_postcode' => '',
'billing_city' => ''
];
foreach( $fields as $field_name => $value ) {
if ( !empty( $_POST[$field_name] ) ) {
$fields[$field_name] = sanitize_text_field( $_POST[$field_name] );
}
}
foreach ( WC()->cart->get_cart() as $cart_item ) {
if ( in_array( $cart_item['product_id'], $_ids ) ) {
$_product_id = $cart_item['product_id'];
}
}
$_product = wc_get_product( $_product_id );
$billingcountry = WC()->customer->get_billing_country();
$cur_lang = pll_current_language();
$data_verif = array(
"refs" => array(
"country" => $billingcountry,
),
"settings" => array(
"language" => $cur_lang
),
"policyholder" => array(
"firstName" => $fields['billing_first_name'] ,
"lastName" => $fields['billing_last_name'],
"email" => $fields['billing_email'],
"phone" => $fields['billing_phone'],
"birthdate" => $fields['insurance-birthdate'],
"gender" => $fields['gender-selection' ],
"address" => array(
"country" => $billingcountry,
"zip" => $fields['billing_postcode'],
"city" => $fields['billing_city'],
"street" => $fields['billing_address_1'],
"number" => $fields['billing_address_2'],
"box" => "box"
),
"entityType" => "ENTITY_TYPE_PERSON"
),
"risk" => array(
"model" => $_product -> get_title(),
"originalValue" => $_product -> get_price() * 100,
"antiTheftMeasure" => "ANTI_THEFT_MEASURE_NONE",
),
"terms" => array(
"depreciation" => false
),
);
// Set the array to a custom WC_Session variable (to be used afterwards)
WC()->session->set('data_verif', $data_verif);
// API CALL HERE AND CHECK WHETHER VALID OR NOT
}
//After payment is completed
add_action( 'woocommerce_payment_complete', 'apicall_create' );
function apicall_create() {
//Somehow get $data_verif here and do another API call
}
Вы можете просто установить свой массив в пользовательской переменной WC_Session, которую вы сможете использовать впоследствии, например:
$data_verif = array(
"refs" => array(
"country" => $billingcountry,
),
"settings" => array(
"language" => $cur_lang
),
"policyholder" => array(
"firstName" => $fields['billing_first_name'] ,
"lastName" => $fields['billing_last_name'],
"email" => $fields['billing_email'],
"phone" => $fields['billing_phone'],
"birthdate" => $fields['insurance-birthdate'],
"gender" => $fields['gender-selection' ],
"address" => array(
"country" => $billingcountry,
"zip" => $fields['billing_postcode'],
"city" => $fields['billing_city'],
"street" => $fields['billing_address_1'],
"number" => $fields['billing_address_2'],
"box" => "box"
),
"entityType" => "ENTITY_TYPE_PERSON"
),
"risk" => array(
"model" => $_product -> get_title(),
"originalValue" => $_product -> get_price() * 100,
"antiTheftMeasure" => "ANTI_THEFT_MEASURE_NONE",
),
"terms" => array(
"depreciation" => false
),
);
// Set the array to a custom WC_Session variable (to be used afterwards)
WC()->session->set('data_verif', $data_verif);
// API CALL HERE AND CHECK WHETHER VALID OR NOT
Затем вы сможете вызывать этот массив в woocommerce_payment_complete
подключенной функции, используя:
$data_verif = WC()->session->get('data_verif');
Это должно работать.
Теперь лучше удалить (удалить) эту пользовательскую переменную сеанса, как только вы закончите ее использовать… Вы можете сделать это с помощью метода __unset()
, например:
WC()->session->__unset('data_verif');
Итак, в вашей второй подключенной функции:
//After payment is completed
add_action( 'woocommerce_payment_complete', 'apicall_create' );
function apicall_create() {
// Get the data array
WC()->session->get('data_verif');
// Do the API CALL HERE
// Remove the session variable
WC()->session->__unset('data_verif');
}