Jump to content

[Gelöst] Bundesländer PayPal Problem


Claudiocool

Recommended Posts

Ich habe in meinem 1.6.1.7 mit PayPal 3.11.5 folgende Meldung bekommen, als ein Kunde aus Thailand bestellt hat:

PayPal response:TIMESTAMP -> 2018-02-07T17:47:16ZL_ERRORCODE0 -> 10729L_SHORTMESSAGE0 -> Shipping Address State EmptyL_LONGMESSAGE0 -> The field Shipping Address State is requiredL_SEVERITYCODE0 -> Error

Nach meinem Verständnis will Paypal ein Bundesland, das aber definitiv nicvht vorhanden ist.

Gut, ne, eigentlich nicht gut.....

kennt jemand den Fehler?

Bundesländer hat Thailand wohl 76 Stk. aber die braucht man nicht mal beim Versand. Und ich möchte die jetzt ungern eingeben müssen, weil (das ist das andere Problem) wohl keine Importmöglichkeit existiert.

 

 

 

Edited by Claudiocool (see edit history)
Link to comment
Share on other sites

Ich habe mittlerweile aus anderer Quelle mitbekommen, dass PayPal bei manchen Ländern zusätzlich ein Datenfeld mit Bundesländern haben will (so auch z.B. bei Mexico), und das führt dann zu dem Fehler. Ich habe einen Workaround gefunden und eingebaut, der das Feld mit dem Adress_State dann mit dem Länderkürzel füllt, dann ist das Ding nicht leer und die Betzahlung wird durchgeführt.

Jetzt warte ich nur auf die nächste Bestellung aus der Gegend, wenn das hinhaut, werde ich den Workaround hier posten.

Link to comment
Share on other sites

  • 4 months later...

Sodele.... hat ein wenig gedauert, bis wieder was aus Thailand per Paypal geordert wurde.

Die Lösung ist:

In .../modules/paypal/express_checout/process.php

Irgendwo um Zeile 290 fügen wir eine kleine Änderung ein, damit der anstelle der Bundesländer den ISO-Code des Landes übergibt, das akzeptiert PayPal und es kann uns wurscht sein, was der Kunde da eingegeben hat.

        if ($address->id_state) {
            $state = new State((int) $address->id_state);
            $fields['PAYMENTREQUEST_0_SHIPTOSTATE'] = $state->iso_code;
			}

ändern in

      $country = new Country((int)$address->id_country);
      $fields['PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE'] = $country->iso_code;


  if ($address->id_state)
      {
      $state = new State((int)$address->id_state);
      $fields['PAYMENTREQUEST_0_SHIPTOSTATE'] = $state->iso_code;
      } else {
      $fields['PAYMENTREQUEST_0_SHIPTOSTATE'] = $country->iso_code;
      }

Irgendwo um Zeile 300

$fields['L_PAYMENTREQUEST_0_DESC'.$index] = Tools::substr(strip_tags($product['description_short']), 0, 100).'...';

ändern zu 

$fields['L_PAYMENTREQUEST_0_DESC'.$index] = Tools::substr(strip_tags($product['description_short']), 0, 20).'...';

dann noch ca. 20 Zeilen weiter unten

$fields['L_PAYMENTREQUEST_0_DESC'.$index] = Tools::substr(strip_tags($discount['description']), 0, 100).'...';

ändern zu

$fields['L_PAYMENTREQUEST_0_DESC'.$index] = Tools::substr(strip_tags($discount['description']), 0, 20).'...';

PayPal wil maximal 127 Zeichen, wenn es mehr werden, kommt der Fehler. Bei UTF-8 werden pro Zeichen bis zu 6 Byte verwendet daher muß die Zeichenzahl auf 20 begrenzt werden, damit dann maximal 120 Zeichen rübergehen. Überschreitet man die 127 Zeichen, kommt der Fehler. Man könnte zwar maximal 21 Zeichen geben, aber den kleinen Puffer von 7 Byte lasse ich mal lieber stehen.

Ich habe es gerade getestet und es funktioniert astrein.

Also, falls da jemand auch Probleme damit hat, try this.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...