Pereiti prie turinio
← Visos PrestaShop 9 klaidos

PrestaShop 9 klaidos

You have requested a non-existent parameter "api_private_key" po PrestaShop atnaujinimo

PrestaShop 8.1 ir naujesnėms versijoms faile app/config/parameters.php reikia dviejų API raktų. Iš 1.7 ar 8.0 atnaujinta parduotuvė juos gauna iš atnaujinimo asistento. Jei tas žingsnis neįvyko, administravimas sustoja su šia klaida.

Klaida
You have requested a non-existent parameter "api_private_key".
Pasirodo
Atnaujinant iš 1.7 ar 8.0 į 8.1, 8.2 ar 9.x
Dažniausiai randama
app/config/parameters.php

Kas nutiko

Nuo 8.1 administravime yra OAuth2 serveris Admin API, o jo paslauga skaito du parametrus: api_private_key ir api_public_key. Naujas diegimas įrašo RSA raktų porą į app/config/parameters.php. Parduotuvė, pradėjusi nuo 1.7 ar 8.0, tokių raktų neturi.

Atnaujinant į 8.1 ar naujesnę su atnaujinimo asistentu (modulis autoupgrade), jo duomenų bazės žingsnis sukuria raktų porą su PHP OpenSSL plėtiniu ir įrašo ją į parameters.php. Jei po atnaujinimo raktų nėra, tas žingsnis nebuvo vykdytas arba nepavyko:

  • atnaujinta kitu būdu: nauji failai nukopijuoti rankomis, naudota sena atnaujinimo asistento versija arba parameters.php po to atstatytas iš atsarginės kopijos;
  • PHP, kuriuo vyko atnaujinimas, neturėjo veikiančio OpenSSL. Atnaujinant komandine eilute tai gali būti ne tas pats PHP, kurį naudoja svetainė: php -m turi rodyti openssl.

Mūsų bandomojoje PrestaShop 9.2 parduotuvėje išėmus abu raktus administravimas grąžino klaidą 500 su lygiai šiuo pranešimu, o cache nebebuvo įmanoma sukurti.

Sprendimas

Viso atnaujinimo kartoti nereikia. Sukurkite raktų porą taip pat, kaip tai daro PrestaShop diegimo programa (2048 bitų RSA su openssl_pkey_new). Išsaugokite šį failą kaip gen-api-keys.php parduotuvės šakniniame aplanke:

<?php
// Adds the api_public_key / api_private_key pair that PrestaShop 8.1+ expects
// in app/config/parameters.php. Run once from the shop root: php gen-api-keys.php
$path = __DIR__ . '/app/config/parameters.php';
$p = require $path;
if (!empty($p['parameters']['api_private_key']) && !empty($p['parameters']['api_public_key'])) {
    exit("Keys already present, nothing to do.\n");
}
$key = openssl_pkey_new(['private_key_bits' => 2048, 'private_key_type' => OPENSSL_KEYTYPE_RSA]);
if ($key === false) {
    exit('OpenSSL could not create a key: ' . openssl_error_string() . "\n");
}
openssl_pkey_export($key, $private);
$p['parameters']['api_private_key'] = $private;
$p['parameters']['api_public_key'] = openssl_pkey_get_details($key)['key'];
copy($path, $path . '.bak');
file_put_contents($path, '<?php return ' . var_export($p, true) . ';');
echo "Keys added. Backup: app/config/parameters.php.bak\n";

Tada:

php gen-api-keys.php
rm -rf var/cache/prod var/cache/dev
rm gen-api-keys.php

Linux serveryje paleiskite kaip svetainės serverio vartotojas, kad parameters.php išliktų tas pats savininkas. Išbandėme 9.2.0 parduotuvėje: be raktų administravimas grąžino klaidą 500 su šiuo pranešimu, o paleidus skriptą ir išvalius cache vėl atsidarė.

Jei skriptas parašo OpenSSL could not create a key, to PHP OpenSSL plėtinys neveikia. Pirma sutvarkykite jį arba kreipkitės į hostingo įmonę. Nekopijuokite raktų poros iš kitos parduotuvės ar instrukcijos internete: privatus raktas pasirašo administravimo API žetonus, todėl kiekvienai parduotuvei reikia savo.

Kur dar pasitaiko

Kitos non-existent parameter klaidos iškart po atnaujinimo dažniausiai reiškia tą patį: atnaujinimas nebaigė nustatymų žingsnio. Tokiu atveju parametrus po vieną pridėti rankomis – ne tas kelias. Atstatykite atsarginę kopiją ir atnaujinkite iš naujo su naujausiu atnaujinimo asistentu, naudodami PHP su OpenSSL.

Vis tiek atnaujinate? Sužinokite, kas lūš toliau

Ši klaida kyla iš serverio ar paties atnaujinimo, ne iš modulių. Kitos dažniausiai kyla iš kodo: modulių, temos ir override failų, kurie vis dar kviečia tai, ką PrestaShop 8 ir 9 pašalino. Mūsų nemokama PrestaShop 9 parengties patikra parodo kiekvieną su failu ir eilute. Ji tik skaito, nieko nekeičia.

Gauti nemokamą patikrą

Nenorite atnaujinti patys? Parduotuves į PrestaShop 9 atnaujiname už fiksuotą kainą. Apie atnaujinimą