Bagaimana cara mendekripsi nilai konfigurasi terenkripsi?

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

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

Magento2 Devloper
sumber

Jawaban:

25

Akhirnya Dapatkan Sukses Dalam Kode Dekripsi ...

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;

Bagikan dan bantu orang lain ...

Magento2 Devloper
sumber
Ini mengembalikan nilai kosong. Bagaimana saya bisa mendapatkan output dalam format yang dapat dibaca?
Emipro Technologies Pvt. Ltd.
dapatkah Anda membagikan kode masalah?
Magento2 Devloper
20

\Magento\Framework\App\Config\ScopeConfigInterface::getValueakan mengembalikan nilai yang didekripsi. Ketika ScopeConfigInterface::getValuemengembalikan nilai yang dienkripsi, opsi konfigurasi salah setup . Implementasi yang benar dari nilai konfigurasi terenkripsi adalah:

Vendor / Module / etc / adminhtml / system.xml

Di sini kita menambahkan nilai konfigurasi yang tidak jelas di jalur payment/webpay/keyidhal-hal penting di sini adalah memastikan fieldmemiliki type="obscure"dan menggunakan Magento\Config\Model\Config\Backend\Encrypteduntuk backend_model. Ini adalah bagaimana Magento tahu untuk menggunakan bidang formulir bertopeng dan mengenkripsi setiap input pengguna di simpan.

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

Vendor / Module / etc / config.xml

Menambahkan di backend_model="Magento\Config\Model\Config\Backend\Encrypted"sini memberi tahu Magento nilai konfigurasi harus didekripsi ketika diambil denganScopeConfigInterface::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>

Vendor / Module / etc / di.xml

Ini menambahkan jalur konfigurasi ke array sensitif dan mencegah nilai jalur dimasukkan saat membuang konfigurasi toko.

<?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>
Pclclain
sumber
Tampaknya ada beberapa skenario di mana ini tidak berhasil, dalam kasus saya ini berfungsi sebelumnya dan itu rusak setelah saya memindahkan bidang ke grup xml config yang disertakan. Saran di atas diterapkan, tetapi tidak berfungsi
snez
@snez, sudahkah Anda mencoba menyimpan kembali konfigurasi setelah Anda memindahkannya?
Roman Snitko
5

Jika Anda telah menginstal n98-magerun2.phar, Anda bisa mendapatkan nilai konfigurasi yang didekripsi dengan sesuatu seperti:

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

Anda juga dapat mengatur nilai konfigurasi terenkripsi dari baris perintah dengan sesuatu seperti:

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

Anda bisa mendapatkan n98-magerun2.phar dari sini: https://github.com/netz98/n98-magerun2

Silas Palmer
sumber
2
bukankah hal yang terbaik?
William Tran
Ini juga berfungsi di n98-magerun (untuk Magento 1)
CCBlackburn
0

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

Anda harus mengganti \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,dengan jalur kelas di bawah \Magento\Payment\Gateway\ConfigInterface ini , Ini berfungsi dengan baik,

   <?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
sumber
Apakah ini berhasil untuk Anda?
Rakesh Jesadiya
Kesalahan fatal: Tidak dapat membuat antarmuka Magento \ Pembayaran \ Gateway \ ConfigInterface di E: \ wamp \ www \ magento2_8 \ vendor \ magento \ framework \ ObjectManager \ Factory \ Dynamic \ Developer.php pada saluran 73
Magento2 Devloper
sudahkah Anda memecahkan masalah?
Rakesh Jesadiya
tidak mendapatkan kesalahan fatal: Tidak dapat membuat antarmuka Magento \ Pembayaran \ Gateway \ ConfigInterface di E: \ wamp \ www \ magento2_8 \ vendor \ magento \ framework \ ObjectManager \ Factory \ Dynamic \ De‌ veloper.php pada baris 73 kesalahan.
Magento2 Devloper
coba dengan kode yang diperbarui di atas dan hapus folder var.
Rakesh Jesadiya
0

Jika Anda ingin mendekripsi beberapa nilai menggunakan beberapa kunci: Masukkan kode di bawah ini ke dalam decrypt-config-value.php di root dari proyek magento Anda.

<?php

use Magento\Framework\App\Bootstrap;
require __DIR__ . '/app/bootstrap.php';

$bootstrap = Bootstrap::create(BP, $_SERVER);

$obj = $bootstrap->getObjectManager();

$state = $obj->get('Magento\Framework\App\State');
$state->setAreaCode('frontend');


######################################################################################################################

/**
 * @var \Magento\Framework\Encryption\EncryptorInterfaceFactory $ef
 */
$ef = $obj->get('Magento\Framework\Encryption\EncryptorInterfaceFactory');

class CustomDeploymentConfig extends \Magento\Framework\App\DeploymentConfig {
    public function get($key = null, $defaultValue = null)
    {
        return '8343d1c27ee612c73131c0ec693ed86e';
    }
}

/**
 * @var CustomDeploymentConfig $d
 */
$d = $obj->get(CustomDeploymentConfig::class);

/**
 * @var \Magento\Framework\Encryption\EncryptorInterface $e
 */
$e = $ef->create(['deploymentConfig' => $d]);

echo ">>>", $e->decrypt('encripted-value-here'), "<<<\n";

Jalankan php decrypt-config-value.php menggunakan konsol atau //yourwebsite.com/decrypt-config-value.php menggunakan browser.

Федосимов Сергей
sumber
-1

Coba dengan kode di bawah ini untuk nilai dekode 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
sumber
1
Penguraian gagal: Kesalahan sintaks "; 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
ada ide tentang kesalahan ini?
Magento2 Devloper
saya tidak tahu, karena ini untuk metode pembayaran, saya telah bekerja untuk metode di atas untuk permintaan sederhana
Rakesh Jesadiya
kesalahan sintaks saya pikir mendefinisikan tipe lain.
Magento2 Devloper
bekerja dengan baik dalam permintaan sederhana ??
Magento2 Devloper