Ошибка выполнения php кода генерация хеша в правилах

Главные вкладки

Аватар пользователя vert4 vert4 6 июня 2019 в 8:08

Здравствуйте!
Стоит задача по событию авторизация пользователя передавать его ID в систему Carrot quest (сбор аналитики). Они (carrot) прислали код, которым нужно передавать UID. У них хитрая система и ID передается с хеш суммой, которая формируется из самого ID и секретного ключа.

$userId = '[account:uid]';
$hash = hash_hmac('sha256', $userId, 'userauthkey-26366-125a1f101332abdce9fe62ea988f167ef7b304ba25bc03ed3c52ddc8414b66');
echo "carrotquest.auth('$userId', '$hash');";

Вот собственно простой код, но он почему то не правильно формирует хеш. Если этот код вставить в devel и проверить то выдаст правильный хеш, а при отработке правила хеш получается другой. Видимо как-то обработчик правила что-то режет..
Подскажите плиз в чем может быть проблема

Комментарии

Аватар пользователя vert4 vert4 6 июня 2019 в 11:41

Вот правило

{ "rules_carrot_authorized" : {
    "LABEL" : "\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0432 carrot \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043b\u0441\u044f",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "TAGS" : [ "carrot" ],
    "REQUIRES" : [ "rules", "php", "rules_b24" ],
    "ON" : { "user_login" : [] },
    "IF" : [
      { "user_has_role" : { "account" : [ "account" ], "roles" : { "value" : { "7" : "7" } } } }
    ],
    "DO" : [
      { "php_eval" : { "code" : "carrotquest.track(\u0022$authorized\u0022, {\u0022$email\u0022: [account:mail], \u0022$name\u0022: [account:full_name]});" } },
      { "php_eval" : { "code" : "$userId = \u0027[account:uid]\u0027;\r\n$hash = hash_hmac(\u0027sha256\u0027, $userId, \u0027userauthkey-26366-125a1f101332abdce9fe62ea988f167ef7b304ba25bc03ed3c52ddc8414b66\u0027);\r\necho \u0022carrotquest.auth(\u0027$userId\u0027, \u0027$hash\u0027);\u0022;" } },
      { "watchdog" : {
          "type" : "carrot_auth",
          "message" : "\u003C?php\r\n$userId = \u0027[account:uid]\u0027;\r\n$hash = hash_hmac(\u0027sha256\u0027, $userId, \u0027userauthkey-26366-125a1f101332abdce9fe62ea988f167ef7b304ba25bc03ed3c52ddc8414b66\u0027);\r\necho \u0022carrotquest.auth(\u0027$userId\u0027, \u0027$hash\u0027);\u0022;\r\n?\u003E",
          "level" : "7"
        }
      }
    ]
  }
}
Аватар пользователя Semantics Semantics 6 июня 2019 в 9:49

Скорее всего, не обработчик режет, а в контекст выполнения правила передаётся не тот пользователь, который вам нужен.
Расскажите подробнее, при каких условиях вы этот код выполняете

Аватар пользователя vert4 vert4 6 июня 2019 в 11:39

Пользователь передается тот, я передал запись результата работы правила в watchdog (туда передается и UID и сам хеш) и потом проверял хеш, который сделало правило и хеш ,который должен был получится на их генераторе.