¿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'

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


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>

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


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')
    }
}

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

}

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.