@Darklez

Как добавить стоимость каждого товара в плагине Robokassa?

Необходимо добавить наименования всех товаров в заказе

Вот исходная часть редактируемого кода:
public function generate_form($order_id){
		global $woocommerce;

		$order = new WC_Order( $order_id );

		if ($this->testmode == 'yes'){
			$action_adr = $this->testurl;
		}
		else{
			$action_adr = $this->liveurl;
		}

		$out_summ = number_format($order->order_total, 2, '.', '');

		$crc = $this->robokassa_merchant.':'.$out_summ.':'.$order_id.':'.$this->robokassa_key1;

		$args = array(
				// Merchant
				'MrchLogin' => $this->robokassa_merchant,
				'OutSum' => $out_summ,
				'InvId' => $order_id,
				'SignatureValue' => md5($crc),
				'Culture' => 'ru',
			);


Вот, что у меня получилось:
public function generate_form($order_id){
		global $woocommerce;

		$order = new WC_Order( $order_id );

		$items = $order->get_items();

		foreach( $items as $item ) {
		$item_total = $item['line_subtotal'];
		$product_name = $item['name'];
		}
		
		if ($this->testmode == 'yes'){
			$action_adr = $this->testurl;
		}
		else{
			$action_adr = $this->liveurl;
		}

		$out_summ = number_format($order->order_total, 2, '.', '');
		$out_summ2 = number_format($item_total, 2, '.', '');

		$crc = $this->robokassa_merchant.':'.$out_summ.':'.$order_id.':'.$this->robokassa_key1;

		$args = array(
				// Merchant
				'MrchLogin' => $this->robokassa_merchant,
				'OutSum' => $out_summ,
				'OutSum2' => $out_summ2,
				'ProductName' => $product_name
				'InvId' => $order_id,
				'SignatureValue' => md5($crc),
				'Culture' => 'ru',
			);

К сожалению отображается наименование только последнего товара и стоимость последнего товара.
  • Вопрос задан
  • 255 просмотров
Решения вопроса 1
Шаг 1. Хорошенько разобраться в том, что делает этот код:
foreach( $items as $item ) {
    $item_total = $item['line_subtotal'];
    $product_name = $item['name'];
}

Шаг 2. Сделать правильно.

UPD: Ок, объясняю по буквам:
// Для каждого элемента массива $items
foreach( $items as $item ) {
    // Устанавливаем значение переменной $item_total равной полю line_subtotal текущего элемента
    $item_total = $item['line_subtotal'];

    // Устанавливаем значение переменной $product_name равной полю name текущего элемента
    $product_name = $item['name'];
}

Теперь понятно, почему у вас в $item_total и $product_name находятся значения последнего товара?

UPD2: Последний подход к снаряду:
$item_total = 0.0;
$product_names = [];

foreach ($items as $item)
{
	$item_total += (float)$item['line_subtotal'];
	$product_names[] = $item['name'];
}

$out_summ2 = number_format($item_total, 2, '.', '');

$args = [
	'MrchLogin' => $this->robokassa_merchant,
	'OutSum' => $out_summ,
	'OutSum2' => $out_summ2,
	'ProductName' => implode(', ', $product_names),
	'InvId' => $order_id,
	'SignatureValue' => md5($crc),
	'Culture' => 'ru',
];
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы