Jump to content


Photo
* * * * * 1 votes

Яндекс Касса

яндекс касса

33 replies to this topic

#21 Rivermc

Rivermc
  • JBZoo User (rus)
  • User rate: 10.1
  • posts: 56
  • topics: 7

Posted 28 March 2018 - 10:26

случайно написал вопрос не в той теме, http://forum.jbzoo.c...v220/?p=103769 


  • 0

#22 Rivermc

Rivermc
  • JBZoo User (rus)
  • User rate: 10.1
  • posts: 56
  • topics: 7

Posted 28 March 2018 - 13:00

Вопрос с редиректом решил, оказалось что кнопка должна быть name=create-pay а не просто create. Не знаю почему у меня не появилась нужная кнопка, скорее всего я ее как то удалил, сайт делался год назад и тогда оплаты не надо было.


  • 0

#23 Rivermc

Rivermc
  • JBZoo User (rus)
  • User rate: 10.1
  • posts: 56
  • topics: 7

Posted 29 March 2018 - 06:42

Народ подскажите дураку, у меня опять затуп...

Почему то возврат в callback сопровождается ошибкой  в функции инициализации. Выдает ошибку Undefined Order: Variable name with order ID was not found в логах и при возврате в магазин выдает сообщение 500 Internal Server Error из проверки JDEBUG. При этом заказ создается и в логах элемента все данные есть

if (!JDEBUG) {
            header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error', true, 500);
            jexit('500 Internal Server Error');
        }
29-03-18 - 05:март --- $debug
29-03-18 - 05:март --- 0
29-03-18 - 05:март --- idempotenceKey:
29-03-18 - 05:март --- 5abc772f41c857.82540772
29-03-18 - 05:март --- pay_id:
29-03-18 - 05:март --- 224e8aef-000f-5000-a000-1ae24fc91f2b
29-03-18 - 05:март --- $pay_status:
29-03-18 - 05:март --- pending
29-03-18 - 05:март --- $pay_created_at:
29-03-18 - 05:март --- 2018-03-29T05:18:39+00:00
29-03-18 - 05:март --- $payCurrency:
29-03-18 - 05:март --- RUB
29-03-18 - 05:март --- $pay_amount:
29-03-18 - 05:март --- 2925
29-03-18 - 05:март --- $orderAmount:
29-03-18 - 05:март --- 2925
29-03-18 - 05:март --- $orderId:
29-03-18 - 05:март --- 116
29-03-18 - 05:март --- $shopId:
29-03-18 - 05:март --- скрыт
29-03-18 - 05:март --- $secret:
29-03-18 - 05:март --- скрыт
29-03-18 - 05:март --- $return_url:
29-03-18 - 05:март --- https://kozhevatkinprof.ru/index.php?option=com_zoo&controller=payment&task=paymentSuccess&orderId=116
29-03-18 - 05:март --- $pay_redirect_url:
29-03-18 - 05:март --- https://money.yandex.ru/api-pages/v2/payment-confirm/epl?orderId=224e8aef-000f-5000-a000-1ae24fc91f2b 

Яндекс ответ в callback присылает в таком виде. Хоть убейте не понимаю как мне работать с этими данными в isValid как получить переменную с этими данными? Подскажите пожалуйста, уже крыша едет от этих API

{
  "type": "notification",
  "event": "payment.waiting_for_capture",
  "object": {
    "id": "21740069-000f-50be-b000-0486ffbf45b0",
    "status": "waiting_for_capture",
    "paid": true,
    "amount": {
      "value": "2.00",
      "currency": "RUB"
    },
    "created_at": "2017-10-14T10:53:29.072Z",
    "metadata": {},
    "payment_method": {
      "type": "yandex_money",
      "id": "731714f2-c6eb-4ae0-aeb6-8162e89c1065",
      "saved": false,
      "account_number": "410011066000000",
      "title": "Yandex.Money wallet 410011066000000"
    }
  }
}

Функция getRequestOrderId() не получает id через функцию getOrderId(), не могу понять что не так.

 public function getRequestOrderId()
    {
    	$ord_id = $this->getOrderId();
		$this->logInfo('$RequestOrderId:');
		$this->logInfo($ord_id);
        return $ord_id;
    }

Все запросы отсылаются по 4 раза, здесь совсем непонятно почему...


Edited by Rivermc, 29 March 2018 - 10:30.

  • 0

#24 Rivermc

Rivermc
  • JBZoo User (rus)
  • User rate: 10.1
  • posts: 56
  • topics: 7

Posted 07 April 2018 - 16:05

Всем добрый день. Модуль яндекс кассы почти готов, принимает оплачивает возвращает, отправляет данные для ФЗ 54 и выгружает csv о оплаченных заказах для интеграции в 1С. Есть одна неприятная проблема, функция getRedirectUrl вызывается 4 раза, что создает в яндексе 4 заказа. Где искать, как поправить? Пришлось частично переписать callback, планирую переписать что бы работал только как отдельный модуль, тогда поделюсь. Но в данный момент есть вот такая беда.

 

Attached Thumbnails

  • Снимок экрана от 2018-04-07 18-00-47.png

  • 1

#25 fiction13

fiction13
  • JBZoo User (rus)
  • User rate: 272.6
  • posts: 604
  • topics: 23

Posted 08 April 2018 - 07:03

Надо код смотреть ;-) Присылайте в ЛС, я могу посмотреть.


  • 0

#26 Rivermc

Rivermc
  • JBZoo User (rus)
  • User rate: 10.1
  • posts: 56
  • topics: 7

Posted 08 April 2018 - 15:19

Кодом поделюсь, сейчас там много лишнего закоменченого и т д. Вызов несколько раз функции redirecturl общая проблема мой код здесь не причем, в темах про другие системы оплаты присутствует. Где посмотреть откуда она вызывается и почему несколько раз? Очень надо исправить, иначе прям беда беда


  • 0

#27 fiction13

fiction13
  • JBZoo User (rus)
  • User rate: 272.6
  • posts: 604
  • topics: 23

Posted 08 April 2018 - 16:59

Как хотите. У меня нигде столько раз не вызывалось.


  • 1

#28 CB9TOIIIA

CB9TOIIIA
  • Administrators
  • User rate: 230.6
  • posts: 3680
  • topics: 235

Posted 08 April 2018 - 17:32

У меня предположением - что Вы в цикле метод указали - поэтому в цикле он нес-ко раз и отправляет.


  • 0

#29 Rivermc

Rivermc
  • JBZoo User (rus)
  • User rate: 10.1
  • posts: 56
  • topics: 7

Posted 08 April 2018 - 19:01

	public function getRedirectUrl()
	{

		require_once JPATH_ROOT .'/vendor/autoload.php';

		$debug = $this->isDebug();

		//$orderData = $this->getOrderData();

		$shopId = $this->config->get('shopid');
		$secret = $this->config->get('secret');
		$vat_code = $this->config->get('vat_code');
		$tax_system_code = $this->config->get('tax_system_code');
		$recipient = $this->config->get('recipient');

		$order = $this->getOrder();
		$orderId = $this->getOrderId();

		$return_url = $this->_jbrouter->payment('success') . '&orderId=' . $orderId;

		$payCurrency = JString::strtoupper($this->getDefaultCurrency());
		$orderAmount = $this->_order->val($this->getOrderSumm(), $order->getCurrency())->convert($payCurrency);
		$orderAmount = round($orderAmount->val(), 0);

		$orderDesc = $this->getOrderDescription();

		
		//$orderFileds = $order->getFields();


		//$shippingName = $order->getShipping()->getName();
		$shippingPrice = $order->getShippingPrice()->val();
        //$this->logInfo('shippingName ' .  $shippingName);
        $this->logInfo('shippingPrice ' .  $shippingPrice);

        $shippingArray = array(
        	"description" => 'Доставка',
            "quantity" => '1',
            "amount" => array(
                "value" => $shippingPrice,
                "currency" => $payCurrency
            ),
            "vat_code" => $vat_code
        );


		$orderItems = (array)$order->getItems();

		//$this->logInfo('Items:' . implode(',', $orderItems));

		$i = 0;
	    foreach ($orderItems as $item) {

	        $recipientItems = array(
	        	"description" => $item['item_name'],
                "quantity" => $item['quantity'],
                "amount" => array(
                    "value" => $item['elements']['_value'],
                    "currency" => $payCurrency
                ),
                "vat_code" => $vat_code
	        );

	        $recip[$i] =  $recipientItems;


	       $i= $i+1;
	    }

	    $recip[] =  $shippingArray;

	    $orderRecipientPhone = $order->getFieldElement('91dc265a-6d12-43f1-95c5-53189b161ccd')->data();
		$orderRecipientPhone = preg_replace('~\D~','',$orderRecipientPhone['value']);

	    if ($recipient == 'phone') {			

			$recipientArray = array(
		    	"phone" => $orderRecipientPhone,
		    	"tax_system_code" => $tax_system_code,
		    	"items" => $recip
		    );
		}
		else {
			$orderRecipient = $order->getFieldElement('8fa262d6-30b0-4f1b-933f-5314d459463a')->data();
			$orderRecipient = $orderRecipient['value'];

			$recipientArray = array(
		    	"email" => $orderRecipient['value'],
		    	"tax_system_code" => $tax_system_code,
		    	"items" => $recip
		    );			
		}








/*

        $this->logInfo('recipientArray description ' .  $recipientArray['items'][0]['description']);
        $this->logInfo('recipientArray quantity ' .  $recipientArray['items'][0]['quantity']);
        $this->logInfo('recipientArray vat_code ' .  $recipientArray['items'][0]['vat_code']);
        $this->logInfo('recipientArray value ' .  $recipientArray['items'][0]['amount']['value']);
        $this->logInfo('recipientArray currency ' .  $recipientArray['items'][0]['amount']['currency']);


        $this->logInfo('shippingArray 1 description ' .  $recipientArray['items'][1]['description']);
        $this->logInfo('shippingArray 1 quantity ' .  $recipientArray['items'][1]['quantity']);
        $this->logInfo('shippingArray 1 vat_code ' .  $recipientArray['items'][1]['vat_code']);
        $this->logInfo('shippingArray 1 value ' .  $recipientArray['items'][1]['amount']['value']);
        $this->logInfo('shippingArray 1 currency ' .  $recipientArray['items'][1]['amount']['currency']);
*/

		$this->client = new Client();
		$this->client->setAuth($shopId, $secret);

		$idempotenceKey = uniqid('', true);

		$pay = $this->client->createPayment(
		        array(
		            'amount' => array(
		                'value' => $orderAmount,
		                'currency' => $payCurrency
		            ),
			        'payment_method_data' => array(
			            'type' => 'bank_card'
			        ),
		            //'capture' => 1,
		            'confirmation' => array(
		                'type' => 'redirect',
		                'return_url' => $return_url
		            ),
		            'metadata' => array(
		            	'orderId' => $orderId,
		            	'recipientPhone' => $orderRecipientPhone
		            ),
		            'receipt' => $recipientArray
		        ),
		        $idempotenceKey
		    );

		$pay = json_encode($pay);
		$pay = json_decode($pay, true);

		$pay_id_d = $pay['id'];
		$pay_status = $pay['status'];
		$pay_amount = $pay['amount']['value'];
		$pay_created_at = $pay['created_at'];
		$pay_redirect_url = $pay['confirmation']['confirmation_url'];





		$this->logInfo('//-------------------------------------------//');
		//$this->logInfo('getRedirectUrl debug' . $debug);
		//$this->logInfo('$recipientArrayrecip ' . $recipientArrayrecip);
		//$this->logInfo('getRedirectUrl idempotenceKey:' . $idempotenceKey);
		$this->logInfo('Описание заказа: ' . $orderDesc);
		$this->logInfo('Статус платежа:'. $pay_status);
		$this->logInfo('Дата и время создания платежа:' . $pay_created_at);
		$this->logInfo('Валюта:' . $payCurrency);
		$this->logInfo('Сумма платежа:' . $pay_amount);
		$this->logInfo('Сумма корзины:' . $orderAmount);
		$this->logInfo('Id заказа:' . $orderId);
		$this->logInfo('Получатель чека: ' .  $orderRecipient);
		//$this->logInfo('getRedirectUrl shopId:' . $shopId);
		//$this->logInfo('getRedirectUrl secret:' . $secret);
		//$this->logInfo('getRedirectUrl return_url:' . $return_url);
		//$this->logInfo('getRedirectUrl pay_redirect_url:' . $pay_redirect_url);
		$this->logInfo('//-------------------------------------------//');

		return $pay_redirect_url;
	}
public function paymentCallback()
    {

        $j = @file_get_contents('php://input');
        $data = json_decode($j, true);

        $orderId = $data['object']['metadata']['orderId'];





        $this->_init($orderId);

        $this->app->jbevent->fire($this->order, 'basket:paymentCallback');
        $this->app->jbdoc->rawOutput();

        $cart = JBCart::getInstance();



        /** @type JBCartElementPayment $payment */
        $payment = $this->order->getPayment();
        // check payment element
        if (!empty($payment)) {
            $payment->logInfo('Платеж существует');
            $pay_id = $payment->getRequestPayId($data);

            $status_pay = $payment->getStatusPay($pay_id);
            $amount_pay = $payment->getAmountPay($data);





            if ($status_pay == 'waiting_for_capture') {

                $payment->logInfo( 'Ожидание подтверждение платежа: ' . $status_pay);

                $paymentCapture = $payment->paymentCapture($pay_id, $amount_pay);

                $payment->logInfo( 'Подтверждение платежа: ' . $paymentCapture);

                if ($paymentCapture == 'succeeded') {

                    $payment->logInfo( 'Платеж подтвержден ' . $paymentCapture);
                    $payment->setSuccess();
                    $this->app->event->dispatcher->notify($this->app->event->create($this->order, 'basket:paymentSuccess'));
                    $payment->renderResponse();
                    $itemPay = $payment->getItemPay($data, $paymentCapture);





                }

                else {
                    $payment->logInfo( 'Платеж не подтвержден ' . $paymentCapture);
                    $this->app->event->dispatcher->notify($this->app->event->create($this->order, 'basket:paymentFail'));
                    $itemPay = $payment->getItemPay($data, $paymentCapture);
                }
            }
            else if ($status_pay == 'succeeded') {

                $payment->logInfo( 'Платеж уже подтвержден '. $status_pay);
            }
            else {
                $payment->logInfo( 'Платеж отменен '. $status_pay);
                $this->app->event->dispatcher->notify($this->app->event->create($this->order, 'basket:paymentFail'));
                $itemPay = $payment->getItemPay($data, $paymentCapture);
            }
        }

        else {

            $payment->logInfo('Такого платежа не существует');

        }


        






        // payment is exists
        if (!$this->_orderInfo->get('type')) {
            $payment->logInfo('Undefined payment system');
        }

        // check payment type
        if ($payment->getType() != $this->_orderInfo->get('type')) {
            $payment->logInfo('Payment type is not correct');
        }

        // current status is not completed
        if ($payment->getStatus() == $cart->getPaymentSuccess()) {
            $payment->logInfo('Payment status is "' . $payment->getStatus()->getCode() . '" already');
        }

        // check sum
        $realSum    = $payment->getOrderSumm();
        $requestSum = $payment->getRequestOrderSum();

        if ($realSum->compare($requestSum, '!=', 2)) {
            $payment->logInfo('Not correct amount: ' . $realSum->data(true) . ' != ' . $requestSum->data(true));
        }

        // check if sum was empty
        if ($realSum->compare(0, '<=')) {
            $payment->logInfo('Amount less or equal zero: ' . $realSum->data(true));
        }

        // checking of payment element
        if ($payment->isValid()) {
        	$payment->logInfo( 'isValid good');

        } else {
            $payment->logInfo('No valid request');
        }
    }


  • 0

#30 Андрей Завалин

Андрей Завалин
  • Topic Starter
  • JBZoo User (rus)
  • User rate: 0
  • posts: 34
  • topics: 4

Posted 16 October 2018 - 15:11

Добрый день! После обновления JBZoo до крайней версии и поднятия php 7.2 перестала работать оплата через Яндекс Кассу. Обновил элемент оплаты от сюда до крайней версии. Проблема по прежнему актуальна. Подскажите пожалуйста где копать?

 

Сайт http://servicemo.market


  • 1

 






Also tagged with one or more of these keywords: яндекс касса

Click to return to top of page in style!