Wie kann ich einen verschlüsselten Konfigurationswert entschlüsseln?

11
protected $_paymentData;
protected $_scopeConfig;
protected $logger;

public function __construct(
    \Magento\Framework\Model\Context $context,
    \Magento\Framework\Registry $registry,
    \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
    \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
    \Magento\Payment\Helper\Data $paymentData,
    \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
    \Magento\Payment\Model\Method\Logger $logger,
    \Magento\Framework\Module\ModuleListInterface $moduleList,
    \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
    \Magento\Directory\Model\CountryFactory $countryFactory,
    \Stripe\Stripe $stripe,
    \Inchoo\Stripe\Model\StripeFactory $stripeFactory,
    array $data = array()
) {
    parent::__construct(
        $context,
        $registry,
        $extensionFactory,
        $customAttributeFactory,
        $paymentData,
        $scopeConfig,
        $logger,
        $moduleList,
        $localeDate,
        null,
        null,
        $data
    );
    $this->_scopeConfig = $scopeConfig;
    $this->logger = $logger;
    $this->initializeData($data);
}
 public function getPaymentKey(){
   $key= $this->_scopeConfig->getValue('payment/webpay/keyid');
    echo $key;
    exit; 
}

Echo Ergebnis: idfrk3-45pfnrkhwneirgplbmisniepssnie: hirtw45 True Key - 'p92GBhcQl7TklHOsWcxBk4eOmL6wpQWBG9nT2Qcf'

Magento2 Devloper
quelle

Antworten:

25

Endlich Erfolg beim Entschlüsseln von Code ...

protected $_encryptor;

public function __construct(
    \Magento\Framework\Encryption\EncryptorInterface $encryptor,
) {
    $this->_encryptor = $encryptor;
    parent::__construct($context);
}
$test = 'dfrk3-45pfnrkhwneirgplbmisniepssnie';
$test = $this->_encryptor->decrypt($test);
echo $test;

Teile und hilf anderen ...

Magento2 Devloper
quelle
Es wird ein leerer Wert zurückgegeben. Wie kann ich eine Ausgabe in lesbarem Format erhalten?
Emipro Technologies Pvt. Ltd.
Können Sie den Problemcode freigeben?
Magento2 Devloper
20

\Magento\Framework\App\Config\ScopeConfigInterface::getValuegibt den entschlüsselten Wert zurück. Wenn ScopeConfigInterface::getValueein verschlüsselter Wert zurückgegeben wird, ist die Konfigurationsoption falsch eingerichtet . Eine korrekte Implementierung eines verschlüsselten Konfigurationswerts ist:

Hersteller / Modul / etc / adminhtml / system.xml

Hier haben wir einen obskuren Konfigurationswert in dem Pfad hinzufügen , payment/webpay/keyiddie kritischen Dinge hier ist die Gewährleistung der fieldhat type="obscure"und Verwendungen Magento\Config\Model\Config\Backend\Encryptedfür die backend_model. Auf diese Weise kann Magento ein maskiertes Formularfeld verwenden und alle Benutzereingaben beim Speichern verschlüsseln.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
    <system>
        <section id="payment">
            <group id="webpay">
                <field id="keyid" translate="label" type="obscure" sortOrder="100" showInDefault="1" showInWebsite="1" showInStore="0">
                    <label>Key Id</label>
                    <backend_model>Magento\Config\Model\Config\Backend\Encrypted</backend_model>
                </field>
            </group>
        </section>
    </system>
</config>

Hersteller / Modul / etc / config.xml

Wenn Sie backend_model="Magento\Config\Model\Config\Backend\Encrypted"hier hinzufügen , wird Magento mitgeteilt, dass der Konfigurationswert beim Abrufen mit entschlüsselt werden sollScopeConfigInterface::getValue

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Store:etc/config.xsd">
    <default>
        <payment>
            <webpay>
                <keyid backend_model="Magento\Config\Model\Config\Backend\Encrypted" />
            </webpay>
        </payment>
    </default>
</config>

Hersteller / Modul / etc / di.xml

Dadurch wird der Konfigurationspfad zum vertraulichen Array hinzugefügt und verhindert, dass der Wert des Pfads beim Speichern der Speicherkonfiguration berücksichtigt wird.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Config\Model\Config\TypePool">
        <arguments>
            <argument name="sensitive" xsi:type="array">
                <item name="payment/webpay/keyid" xsi:type="string">1</item>
            </argument>
        </arguments>
    </type>
</config>
Pmclain
quelle
Es scheint einige Szenarien zu geben, in denen dies nicht funktioniert. In meinem Fall hat es zuvor funktioniert und es ist kaputt gegangen, nachdem ich das Feld in eine enthaltene Gruppen-XML-Konfiguration verschoben habe. Die obigen Vorschläge wurden umgesetzt, funktionierten aber nicht
snez
@snez Haben Sie versucht, die Konfiguration nach dem Verschieben erneut zu speichern?
Roman Snitko
5

Wenn Sie n98-magerun2.phar installiert haben, können Sie einen entschlüsselten Konfigurationswert mit folgenden Elementen erhalten:

php bin/n98-magerun2.phar config:store:get --decrypt payment/webpay/keyid

Sie können verschlüsselte Konfigurationswerte auch über die Befehlszeile wie folgt festlegen:

php bin/n98-magerun2.phar config:store:set --encrypt payment/webpay/keyid NEW_KEY_ID_VALUE_HERE

Sie können n98-magerun2.phar hier herunterladen: https://github.com/netz98/n98-magerun2

Silas Palmer
quelle
2
ist n98 nicht das größte?
William Tran
Dies funktioniert auch in n98-magerun (für Magento 1)
CCBlackburn
0

Versuchen Sie es mit dem folgenden Code für den JSON-Dekodierungswert.

class Paymentmodule
{
    protected $jsonEncoder;
    protected $jsonDecoder;

    public function __construct(
        ..//
        \Magento\Framework\Json\DecoderInterface $jsonDecoder
    ) {
        ..//
        $this->jsonDecoder = $jsonDecoder;
    }

    public function getPaymentKey()
    {
        $key= $this->_scopeConfig->getValue('payment/webpay/keyid');
        $config = $this->jsonDecoder->decode($key);
        echo $key;
    }

}
Rakesh Jesadiya
quelle
1
Dekodierung fehlgeschlagen: Syntaxfehler "; i: 1; s: 10720:" # 0 E: \ wamp \ www \ magento2_8 \ vendor \ magento \ framework \ Json \ Decoder.php (20): Zend_Json :: decode ('0: 2: 234SyEIM4aj ... ') # 1 E: \ wamp \ www \ magento2_8 \ vendor \ magento \ module-checkout \ Controller \ Onepage \ Success.php (58): Magento \ Framework \ Json \ Decoder-> decode (' 0: 2: 234SyEIM4aj ... ')
Magento2 Devloper
Irgendeine Idee zu diesem Fehler?
Magento2 Devloper
Ich habe keine Ahnung davon, weil dies für die Zahlungsmethode ist, ich habe für die obige Methode für einfache Abfrage gearbeitet
Rakesh Jesadiya
Syntaxfehler Ich denke, andere Typen definieren.
Magento2 Devloper
funktioniert gut in einfachen Abfrage?
Magento2 Devloper
0

You can try with below method for payment encryption method to get value,

Sie müssen durch \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,folgenden Klassenpfad ersetzen. \Magento\Payment\Gateway\ConfigInterface Dies funktioniert einwandfrei.

   <?php
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Vendor\Module\Gateway\Http;

use Magento\Payment\Gateway\Http\TransferBuilder;
use Magento\Payment\Gateway\Http\TransferFactoryInterface;
use Magento\Payment\Gateway\Http\TransferInterface;
use Magento\Payment\Gateway\ConfigInterface;

class TransferFactory implements TransferFactoryInterface
{
    private $config;

    private $transferBuilder;

    public function __construct(
        ConfigInterface $config,
        TransferBuilder $transferBuilder
    ) {
        $this->config = $config;
        $this->transferBuilder = $transferBuilder;
    }


    public function getPaymentKey()
    {
        echo $this->config->getValue('payment/webpay/keyid')
    }
}
Rakesh Jesadiya
quelle
Ist das Arbeit für dich?
Rakesh Jesadiya
Fatal error: Can not instantiate Schnittstelle Magento \ Payment \ Gateway \ ConfigInterface in E: \ wamp \ www \ magento2_8 \ Anbieter \ magento \ Framework \ Object \ Fabrik \ Dynamische \ Developer.php auf Linie 73
Magento2 Devloper
Hast du das Problem gelöst?
Rakesh Jesadiya
Kein schwerwiegender Fehler: Schnittstelle Magento \ Payment \ Gateway \ ConfigInterface in E: \ wamp \ www \ magento2_8 \ vendor \ magento \ framework \ ObjectManager \ Factory \ Dynamic \ De‌ veloper.php in Zeile 73 kann nicht instanziiert werden.
Magento2 Devloper
Versuchen Sie es mit dem oben aktualisierten Code und entfernen Sie den var-Ordner.
Rakesh Jesadiya