¿Cómo puedo descifrar un valor de configuración cifrado?

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; 
}

Resultado de eco: idfrk3-45pfnrkhwneirgplbmisniepssnie: hirtw45 True Key - 'p92GBhcQl7TklHOsWcxBk4eOmL6wpQWBG9nT2Qcf'

Magento2 Devloper
fuente

Respuestas:

25

Finalmente obtener el éxito en el código de descifrado ...

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;

Comparte y ayuda a otros ...

Magento2 Devloper
fuente
Devuelve un valor en blanco. ¿Cómo puedo obtener la salida en formato legible?
Emipro Technologies Pvt. Ltd.
¿Puedes compartir el código del problema?
Magento2 Devloper
20

\Magento\Framework\App\Config\ScopeConfigInterface::getValuedevolverá el valor descifrado. Cuando ScopeConfigInterface::getValuedevuelve un valor cifrado, la opción de configuración se configura incorrectamente . Una implementación correcta de un valor de configuración cifrada es:

Proveedor / Módulo / etc / adminhtml / system.xml

A continuación añadimos un valor de configuración oscura en el camino de payment/webpay/keyidlas cosas importantes aquí es asegurar la fieldtiene type="obscure"y usos Magento\Config\Model\Config\Backend\Encryptedpara el backend_model. Así es como Magento sabe usar un campo de formulario enmascarado y encriptar cualquier entrada del usuario al guardar.

<?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>

Proveedor / Módulo / etc / config.xml

Agregar backend_model="Magento\Config\Model\Config\Backend\Encrypted"aquí le dice a Magento que el valor de configuración debe descifrarse cuando se recupera conScopeConfigInterface::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>

Proveedor / Módulo / etc / di.xml

Esto agrega la ruta de configuración a la matriz sensible y evita que el valor de la ruta se incluya al volcar la configuración de la tienda.

<?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
fuente
Parece que hay algunos escenarios en los que esto no funciona, en mi caso funcionaba antes y se rompió después de mover el campo a una configuración xml de grupo incluido. Las sugerencias anteriores se implementaron, pero no funcionaron
snez
@snez, ¿ha intentado volver a guardar la configuración después de moverla?
Roman Snitko
5

Si tiene instalado n98-magerun2.phar, puede obtener un valor de configuración descifrado con algo como:

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

También puede establecer valores de configuración encriptados desde la línea de comando con algo como:

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

Puede obtener n98-magerun2.phar desde aquí: https://github.com/netz98/n98-magerun2

Silas Palmer
fuente
2
¿No es n98 lo mejor?
William Tran
Esto también funciona en n98-magerun (para Magento 1)
CCBlackburn
0

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

Tienes que reemplazar \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,con la ruta de clase a continuación, \Magento\Payment\Gateway\ConfigInterface esto funciona bien,

   <?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
fuente
¿Es este trabajo para ti?
Rakesh Jesadiya
Error grave: no se puede crear una instancia de la interfaz Magento \ Payment \ Gateway \ ConfigInterface en E: \ wamp \ www \ magento2_8 \ vendor \ magento \ framework \ ObjectManager \ Factory \ Dynamic \ Developer.php en la línea 73
Magento2 Devloper
¿Has resuelto el problema?
Rakesh Jesadiya
no se obtiene Error fatal: no se puede crear una instancia de la interfaz Magento \ Payment \ Gateway \ ConfigInterface en E: \ wamp \ www \ magento2_8 \ vendor \ magento \ framework \ ObjectManager \ Factory \ Dynamic \ De‌ veloper.php en la línea 73 error.
Magento2 Devloper
intente con el código actualizado anteriormente y elimine la carpeta var.
Rakesh Jesadiya
-1

Pruebe con el siguiente código para el valor de decodificación json,

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
fuente
1
Error de decodificación: error de sintaxis "; 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
alguna idea sobre este error?
Magento2 Devloper
No tengo idea al respecto, porque esto es para el método de pago, he trabajado para el método anterior para una consulta simple
Rakesh Jesadiya
error de sintaxis creo que define otros tipos.
Magento2 Devloper
trabajando bien en consulta simple ??
Magento2 Devloper