Prawdopodobnie jest nie obsłużona sytuacja kiedy mamy wyłączone pobierania billing information. Przy próbie płacenia dostaje:

EntityMetadataWrapperException: Unknown data property commerce_customer_address. in EntityStructureWrapper->getPropertyInfo() (line 339 of /var/aegir/platforms/commerce_kickstart-7.2/profiles/commerce_kickstart/modules/contrib/entity/includes/entity.wrapper.inc).

Comments

marcin.wosinek’s picture

Błąd przestaje się pojawiać kiedy wykomentuje z commerce_payu.module ten kod:

foreach ($params_map as $key => $value) {
    if (isset($wrapper->commerce_customer_billing->commerce_customer_address->$value)) {
      $data[$key] = $wrapper->commerce_customer_billing->commerce_customer_address->$value->value();
      if (!empty($payment_method['settings']['dev_debug'])) {
        drupal_set_message('<strong>+++' . $key . ':' . $value . '</strong>' . $wrapper->commerce_customer_billing->commerce_customer_address->$value->value());
      }
    }
    else {
      if (!empty($payment_method['settings']['dev_debug'])) {
        drupal_set_message('<strong>---' . $key . ':' . $value . '</strong>' . $wrapper->commerce_customer_billing->commerce_customer_address->$value->value());
      }
    }
  }

Do czego służy ten kod?

Prawdopodobnie trzeba we wrapperze inaczej sprawdzać czy ma pole. Poszukam i wrzucę patch

marcin.wosinek’s picture

Patch dokłada jeden warunek: zanim zaczniemy sięgać głębiej sprawdzamy najpierw czy $wrapper->commerce_customer_billing->commerce_customer_address istnieje

arturro’s picture

Sprawdzę to, kod składał dane klienta do wysłania dla systemu PayU. Niektóre pola są obowiązkowe u nich obowiązkowe, więc trzeba zobaczyć co jest dostępne w drupalu. Jeśli nie ma kompletu wymaganego przez PayU to blokować płatność.

marcin.wosinek’s picture

Okazuje się że musimy pobierać dane od usera (zgodnie z tym opisem).

Zobaczy czy da się w jakiś sposób wymusić z poziomu modułu żeby system przy checkoucie pobrał dane potrzebne do przekazania do payu

marcin.wosinek’s picture

Assigned: marcin.wosinek » Unassigned
Status: Active » Needs review

Zweryfikowałem działania modułu z wykorzystaniem patcha - płatność jest zarejestrowana prawidłowo, nawet kiedy nie wysyłamy nazwiska do payu.

Patch wg mnie nadaje się do skomitowania. Działa wg nieudokumentowanego featura payu; ale za to usuwa brzydki błąd w sytuacji kiedy nie mamy billing information w checkoucie.

marcin.wosinek’s picture

W przypadku braku i 'billing information' i 'accounts information' jest błąd tylko dla niezalogowanego usera - commerce blokuje transakcje, bo nie wie gdzie wysłać maila.

Ze strony PayU, brak wymaganych danych nie powoduje błędu.

marcin.wosinek’s picture

Assigned: Unassigned » marcin.wosinek

Do przetestowania:
czy jeśli nie przekarzemy do payu danych user (imię nazwisko) to czy payu pobierze te dane przy płaceniu kartą.

U mnie test się chyba odroczy - strona nie jest jeszcze w pełni zaakceptowana przez payu i przy próbie płatności inne niż testowej dają mi info że dana opcja nie jest dostępna.

arturro’s picture

Assigned: marcin.wosinek » arturro
Status: Needs review » Reviewed & tested by the community

Billing z tego co widzę jest wymagany, sprawdzam czy są dane jeśli nie to wyświetla się komunikat błędu z prośbą o włączenie. Wersja minimalistyczna, ale tutaj imho nie ma się co rozwodzić. Sprawdź czy działa ok.

marcin.wosinek’s picture

Działa ok. Jest bardziej informatywne niż sypanie błędem; a komunikat powienien być i tak wyłapany przy testach.

arturro’s picture

Status: Reviewed & tested by the community » Closed (fixed)

Zostawiam, więc jak jest.