php WC-创建-order.php

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php WC-创建-order.php相关的知识,希望对你有一定的参考价值。

<?php
function roomble_ajax_create_order() {

	// Получить корзину
	$cart = WC()->cart;

	$phone = esc_attr( trim( $_REQUEST['phone'] ) );
	$email = esc_attr( trim( $_REQUEST['email'] ) );
	$name = esc_attr( trim( $_REQUEST['name'] ) );
	$nonce = esc_attr( trim( $_REQUEST['nonce'] ) );

	if( ! wp_verify_nonce( $nonce, 'woocommerce-cart' ) ) {
		wp_send_json_error('Не совпадает ключ безопасности. Обратитесь к разработчикам.');
	}

	$address = [
		'first_name' => $name,
		//'last_name'  => 'bar',
		//'company'    => 'stackoverflow',
		'email'      => $email,
		'phone'      => $phone,
		//'address_1'  => 'без адреса',
		//'address_2'  => '',
		//'city'       => 'Солнечный Магадан',
		//'state'      => 'TN',
		//'postcode'   => '12345',
		'country'    => 'RU',
	];

	$order = wc_create_order();
	$order_id = $order->get_id();

	// На этот хук генерится инвойс, наример
	do_action( 'woocommerce_new_order', $order_id );

	// Информация о покупателе
	$order->set_address( $address, 'billing' );
	$order->set_address( $address, 'shipping' );

	// Товары из корзины
	foreach( $cart->get_cart() as $cart_item_key => $cart_item ) {

		$_product     = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
		$product_id   = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key );

		$order->add_product( $_product, $cart_item['quantity'], [
			'variation' => $cart_item['variation'],
			'totals'    => [
				'subtotal'     => $cart_item['line_subtotal'],
				'subtotal_tax' => $cart_item['line_subtotal_tax'],
				'total'        => $cart_item['line_total'],
				'tax'          => $cart_item['line_tax'],
				'tax_data'     => $cart_item['line_tax_data']
			]
		]);
	}

	// Добавить купоны
	foreach ( $cart->get_coupons() as $code => $coupon ) {
		$order->add_coupon( $code, $cart->get_coupon_discount_amount( $code ), $cart->get_coupon_discount_tax_amount( $code ) );
	}

	$order->calculate_totals();

	// устанавливает статус заказа "В обработке"
	// в этом случае WooCommerce отправляет уведомление администратору сайта и клиенту
	// Потом меняем статус "В ожидании оплаты"
	//$order->update_status('processing');
	//$order->update_status('pending');

	//$a = new WC_Emails();

	//$a->tr

	//WC()->mailer()->send_transactional_email()

	//$order->update_status('neworder');

	// Отправить письмо юзеру
	$mailer = WC()->mailer();
	$emailer = $mailer->emails['WC_Email_Customer_Processing_Order'];
	$emailer->trigger( $order->get_id() );

	// Отправить письмо админу
	$emailer = $mailer->emails['WC_Email_New_Order'];
	$emailer->trigger( $order->get_id() );

	// Очистить корзину
	$cart->empty_cart();

	// Автоматом добавим юзера в лист рассылки
	if ( $email ) {
		roomble_mailchimp_subscribe( $email, $name );
	}

	// Запишем трекинг к50
	if ( ! empty( $_COOKIE['k50sid'] ) && ! empty( $_COOKIE['k50uuid'] ) ) {
		update_post_meta( $order->get_id(), '_order_k50_sid', str_replace( '"', '', $_COOKIE['k50sid'] ) );
		update_post_meta( $order->get_id(), '_order_k50_uuid', str_replace( '"', '', $_COOKIE['k50uuid'] ) );
	}

	// Флаг того, что транзакция совершилась
	update_post_meta( $order->get_id(), '_order_transaction_complete', md5( $order->get_id() ) );

	wp_send_json_success( $order->get_id() );

}
add_action( 'wp_ajax_create_order', 'roomble_ajax_create_order' );
add_action( 'wp_ajax_nopriv_create_order', 'roomble_ajax_create_order' );

以上是关于php WC-创建-order.php的主要内容,如果未能解决你的问题,请参考以下文章

php 在我的帐户中添加跟踪信息(Orders.php和View-Order.php)

“src/Entity/Order.php):无法打开流:没有这样的文件或目录” - 当 make:entity - Symfony 5 [重复]

过滤 woocommerce 取消未付订单

如何在 WooCommerce 中获取订单日期?

如何将本地存储从 JS 发送到 PHP 文件(?)

警告:mysql_num_rows() 期望参数 1 是资源,布尔值在 C:\wamp\www\AB-FASHION\order_success.php 第 56 行 [重复]