Como descriptografar um valor de configuração criptografado?

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 do eco: idfrk3-45pfnrkhwneirgplbmisniepssnie: hirtw45 True Key - 'p92GBhcQl7TklHOsWcxBk4eOmL6wpQWBG9nT2Qcf'

Magento2 Devloper
fonte

Respostas:

25

Finalmente obtenha sucesso no código de descriptografia ...

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;

Compartilhe e ajude outras pessoas ...

Magento2 Devloper
fonte
Retorna o valor em branco. Como posso obter saída em formato legível?
Emipro Technologies Unip. Ltd.
você pode compartilhar código de problema?
Magento2 Devloper
20

\Magento\Framework\App\Config\ScopeConfigInterface::getValueretornará o valor descriptografado. Quando ScopeConfigInterface::getValueretorna um valor criptografado, a opção de configuração está configurada incorretamente . Uma implementação correta de um valor de configuração criptografado é:

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

Aqui nós adicionar um valor de configuração obscura no caminho payment/webpay/keyidas coisas críticas aqui é garantir a fieldtem type="obscure"e usos Magento\Config\Model\Config\Backend\Encryptedpara o backend_model. É assim que o Magento sabe usar um campo de formulário mascarado e criptografar qualquer entrada do usuário ao salvar.

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

Fornecedor / Módulo / etc / config.xml

Adicionar backend_model="Magento\Config\Model\Config\Backend\Encrypted"aqui informa ao Magento que o valor da configuração deve ser descriptografado quando recuperado comScopeConfigInterface::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>

Fornecedor / módulo / etc / di.xml

Isso adiciona o caminho da configuração à matriz sensível e evita que o valor do caminho seja incluído ao descarregar a configuração da loja.

<?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
fonte
Parece haver alguns cenários em que isso não funciona, no meu caso, estava funcionando antes e foi interrompido depois que mudei o campo para uma configuração xml de grupo incluída. As sugestões acima foram implementados, mas não está funcionando
snez
@snez você tentou salvar novamente a configuração depois de movê-la?
Roman Snitko
5

Se você tiver o n98-magerun2.phar instalado, poderá obter um valor de configuração descriptografado com algo como:

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

Você também pode definir valores de configuração criptografados na linha de comando com algo como:

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

Você pode obter o n98-magerun2.phar a partir daqui: https://github.com/netz98/n98-magerun2

Silas Palmer
fonte
2
N98 não é a melhor coisa?
William Tran
Isso também funciona no n98-magerun (para Magento 1)
CCBlackburn
0

Tente com o código abaixo para o valor de decodificação 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
fonte
1
Falha na decodificação: erro de sintaxe "; i: 1; s: 10720:" # 0 E: \ wamp \ www \ magento2_8 \ fornecedor \ magento \ framework \ Json \ Decoder.php (20): Zend_Json :: decode ('0: Se você tiver algum problema de instalação ou instalação, por favor, entre em contato com o suporte técnico da Microsoft para obter mais informações sobre o processo de instalação. 0: 2: 234SyEIM4aj ... ')
Magento2 Devloper
alguma idéia sobre esse erro?
Magento2 Devloper
eu não tenho nenhuma idéia sobre isso, porque este é para pagamento, tenho trabalhado para o método acima para consulta simples
Rakesh Jesadiya
erro de sintaxe, acho que definir outros tipos.
Magento2 Devloper
funcionando bem em consulta simples?
Magento2 Devloper
0

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

Você precisa substituir o \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,caminho da classe abaixo. \Magento\Payment\Gateway\ConfigInterface Isso funciona bem,

   <?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
fonte
Este trabalho é para você?
Rakesh Jesadiya
Erro fatal: Não é possível interface de instanciar Magento \ Pagamento \ gateway \ ConfigInterface no E: \ wamp \ www \ magento2_8 \ fornecedor \ magento \ framework \ ObjectManager \ Fábrica \ Dinâmico \ Developer.php na linha 73
Magento2 Devloper
você resolveu o problema?
Rakesh Jesadiya
erro fatal: Não é possível instanciar erro de interface Magento \ Payment \ Gateway \ ConfigInterface em E: \ wamp \ www \ magento2_8 \ vendor \ magento \ framework \ ObjectManager \ Factory \ Dynamic \ Demand veloper.php na linha 73.
Magento2 Devloper
tente com o código atualizado acima e remova a pasta var.
Rakesh Jesadiya