暗号化された構成値を復号化するにはどうすればよいですか?


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

エコー結果:idfrk3-45pfnrkhwneirgplbmisniepssnie:hirtw45 True Key-'p92GBhcQl7TklHOsWcxBk4eOmL6wpQWBG9nT2Qcf'

回答:


25

ついに解読コードで成功を収める...

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;

共有して他の人を助ける...


空白値を返します。読みやすい形式で出力を取得するにはどうすればよいですか?
Emipro Technologies Pvt。株式会社

問題コードを共有できますか?
Magento2 Devloper 2018

20

\Magento\Framework\App\Config\ScopeConfigInterface::getValue復号化された値を返します。ScopeConfigInterface::getValueが暗号化された値を返す場合、構成オプションは正しくセットアップされていません。暗号化された構成値の正しい実装は次のとおりです。

ベンダー/モジュール/etc/adminhtml/system.xml

ここでは、パスにあいまいな設定値を追加しpayment/webpay/keyid、ここで重要な事柄を確保されfieldているtype="obscure"と使用Magento\Config\Model\Config\Backend\Encryptedのためにbackend_model。これは、Magentoがマスクされたフォームフィールドを使用し、保存時にユーザー入力を暗号化することを認識する方法です。

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

ベンダー/モジュール/etc/config.xml

backend_model="Magento\Config\Model\Config\Backend\Encrypted"ここに追加すると、Magentoは、設定値がScopeConfigInterface::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>

ベンダー/モジュール/etc/di.xml

これにより、構成パスが機密配列に追加され、ストア構成をダンプするときにパスの値が含まれなくなります。

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

これが機能しないシナリオがいくつかあるようです。私の場合、以前は機能していましたが、フィールドをインクルードされたグループxml構成に移動した後に機能しなくなりました。上記の提案は実装されましたが、機能しませんでした
snez

@snez構成を移動した後、構成を再保存しようとしましたか?
Roman Snitko

5

n98-magerun2.pharがインストールされている場合は、次のように復号化された構成値を取得できます。

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

暗号化された構成値は、次のようなコマンドラインから設定することもできます。

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

ここからn98-magerun2.pharを取得できます:https : //github.com/netz98/n98-magerun2


2
n98は最高のものではありませんか?
William Tran

これはn98-magerun(Magento 1用)でも機能します
CCBlackburn

0

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
デコードに失敗しました:構文エラー "; 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

このエラーについて何か考えはありますか?
Magento2 Devloper 16

私はそれについては
わかり

構文エラー私は別のタイプを定義すると思います。
Magento2 Devloper 2016

単純なクエリで正常に動作していますか?
Magento2 Devloper 16

0

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

あなたは\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,以下のクラスパスで置き換える必要があります、\Magento\Payment\Gateway\ConfigInterface これはうまくいきます、

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

致命的エラー:73行目でMagento \ Payment \ Gateway \ ConfigInterfaceのインスタンスをE:\ wamp \ www \ magento2_8 \ vendor \ magento \ framework \ ObjectManager \ Factory \ Dynamic \ Developer.phpにインスタンス化できません
Magento2 Devloper

あなたは問題を解決しましたか?
Rakesh Jesadiya 16

致命的なエラーが発生しない:E:\ wamp \ www \ magento2_8 \ vendor \ magento \ framework \ ObjectManager \ Factory \ Dynamic \ De‌ veloper.phpのインターフェイスMagento \ Payment \ Gateway \ ConfigInterfaceを73行でインスタンス化できません。
Magento2 Devloper 2016

上記の更新されたコードで試して、varフォルダーを削除してください。
Rakesh Jesadiya 16
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.