WooCommerce — Checkout nicht möglich — Keine Errors

Bestellung konnte nicht erstellt werden”

Die Lösung fin­det sich am Ende des Arti­kel. Die Vor­ge­schich­te dazu beginnt jetzt! Der Auf­trag lau­te­te: Daten­mi­gra­ti­on aus einer Word­Press Instanz von Ser­ver A auf Ser­ver B, wobei dort ein fri­sches und aktu­el­les Word­Press auf den Daten­emp­fang war­te­te. Ziel war es, nur die die Bei­trags- und Sei­ten­in­hal­te sowie die Meta­da­ten zu trans­fe­rie­ren, den Rest jedoch ruhen zu las­sen. Die Daten­bank der alten Sei­te war gene­risch gewach­sen und beinhal­te­te vie­le Daten­lei­chen. Auf der neu­en Instanz soll­ten nur die tat­säch­lich rele­van­ten Daten ihren Platz fin­den.

Also, ran ans Werk. Mit Bord­mit­teln von Word­Press war ein Daten­bank­ex­port undenk­bar, denn etwa 1000 Bei­trä­ge hat­ten sich dort ver­ewigt und der Hos­ter sorg­te dafür, dass kom­ple­xe Anfra­ge in Time­outs resul­tier­ten. Also doch mit ande­ren Tools und par­ti­ell — Das glück­te.

Ein neu­es Word­Press, wel­ches aktu­el­len Stan­dards — z.B. Sal­ting der Keys — ent­spricht, hat­te ich auf dem Ziel­sys­tem bereits ein­ge­rich­tet und impor­tier­te den Hau­fen an Daten in die neue Daten­bank. Auch dies gelang und das Ergeb­nis sah in dem neu­en The­me anspre­chend aus. Top!

Nach weni­gen Hand­grif­fen war der Blog an sich ein­satz­be­reit. Der Kun­de woll­te zusätz­lich einen Woo­Com­mer­ce Shop inte­griert haben, da der alte Stra­to Shop weder modern, schnell noch respon­si­ve war. Und außer­dem ist es sowie­so rat­sam, Blog und Shop mit­ein­an­der zu ver­zah­nen, um die Syn­er­gi­en zur Bestell­ma­xi­mie­rung zu nut­zen. Also wur­de Woo­Com­mer­ce plus Ger­ma­ni­zed imple­men­tiert. Der Kun­de woll­te sich um die Arti­kel­pfle­ge sel­ber küm­mern.

Zwei Wochen geschah im Shop nichts. Doch irgend­wann wur­de auch die­ser ange­gan­gen und mit den ers­ten Pro­duk­ten gefüllt. Ich unter­stütz­te bei der Erstel­lung von Pro­dukt­vor­la­gen und bei der Grund­kon­fi­gu­ra­ti­on von Woo­Com­mer­ce. Als dann die Imple­men­tie­rung von Pay­pal Plus im Check­out getes­tet wer­den soll­te, tauch­te die mir bis dato unbe­kann­te Mel­dung “Die Bestel­lung konn­te nicht erstellt wer­den” nach dem Klick auch “Kau­fen” auf.

Rou­ti­ne­mä­ßig über­prüf­te ich jeg­li­che Para­me­ter, die den Bestell­vor­gang behin­dern kön­nen. Aber es war alles in Ord­nung. PHP Ver­si­on aktu­ell, SQL Sys­tem eben­falls, auch die Per­ma­links, die bei Fehl­kon­fi­gu­ra­ti­on manch­mal zu Pro­ble­men füh­ren, waren kor­rekt gesetzt. Im nächs­ten Schritt ging es ans Debug­gen. Jedoch… gab es nichts zum Debug­gen. Weder die Kon­so­le warf Exep­ti­ons, noch wur­den Logs gene­riert, die einen Hin­weis auf den Feh­ler hät­ten lie­fern kön­nen. Das war tat­säch­lich schon recht selt­sam.

Wie fin­det man einen Feh­ler, der anschei­nend gar kein Feh­ler ist? Der Ver­dacht, dass das ein­ge­setz­te The­me den Bestell­vor­gang blo­ckier­te, wur­de schnell auf­ge­löst, nach­dem ich zwei Stan­dard­the­mes zu Test­zwe­cken nutz­te — Glei­cher “Feh­ler”. Ich fühl­te mich ein wenig, wie der bekann­te Ochs vorm Ber­ge.

Goog­le­re­cher­che brach­te mich nicht wei­ter, eben­so wenig wie das sequen­ti­el­le Abschal­ten von Plugins, also ging ich tie­fer in die Ana­ly­se und schau­te mir den Quell­text des Check­out Pro­zes­ses von Woo­Com­mer­ce an.Nachdem ich ver­stan­den habe, das Woo­Com­mer­ce Daten in die wp_posts Tabel­le spei­chert und unter ande­rem durch die Funk­ti­on wc_generate_order_key() Wer­te in das Feld “post_password” über­gibt, muss­te der Taschen­rech­ner ran. Denn post_password kann maxi­mal 20 Zei­chen auf­neh­men, wäh­rend die Funk­ti­on wc_generate_order_key() mini­mal 22 Zei­chen über­gibt.

Und exakt an die­ser Stel­le kommt es zu dem initi­al genann­ten Pro­blem: Die Bestel­lung kann nicht erstellt wer­den, da die Funk­ti­on min­des­tens 22 Zei­chen ver­sucht zu über­ge­ben und zwar an ein Feld, das maxi­mal 20 Zei­chen spei­chern kann. Das läuft schief und wird lei­der nicht durch eine Excep­ti­on auf­ge­fan­gen, so dass man rat­los in der Gegend steht. Das Pro­blem kommt nur dann zustan­de, wenn man Tabel­len aus einem älte­ren Word­Press Sys­ten (< Ver­si­on 4.8) in ein aktu­el­len migriert. 

Die Lösung für das “Unable to create order. Please try again”-Problem

… ist eine ein­fa­che, wenn man weiß, wor­an man dre­hen muss. In die­sem Fall muss man in der Tabel­le wp_posts die Feld­län­ge von post_password auf 255 anpas­sen.

Etwas genau­er: Die Daten­bank via phpmy­ad­min o.ä. auf­ru­fen, die Tabel­le wp_posts selek­tie­ren und dann die Tabel­len­struk­tur bear­bei­ten. Anschlie­ßend nach dem Feld post_password Aus­chau hal­ten, es edi­tie­ren und die 20 Zei­chen durch 255 ersetz­ten.

Fer­tig. Die Bestel­lun­gen soll­ten nun wie gewohnt kre­iert wer­den.