Здравствуйте!
Стоит задача по событию авторизация пользователя передавать его ID в систему Carrot quest (сбор аналитики). Они (carrot) прислали код, которым нужно передавать UID. У них хитрая система и ID передается с хеш суммой, которая формируется из самого ID и секретного ключа.
$hash = hash_hmac('sha256', $userId, 'userauthkey-26366-125a1f101332abdce9fe62ea988f167ef7b304ba25bc03ed3c52ddc8414b66');
echo "carrotquest.auth('$userId', '$hash');";
Вот собственно простой код, но он почему то не правильно формирует хеш. Если этот код вставить в devel и проверить то выдаст правильный хеш, а при отработке правила хеш получается другой. Видимо как-то обработчик правила что-то режет..
Подскажите плиз в чем может быть проблема
Комментарии
Опубликуйте пожалуйста код правила здесь?
Вот правило
"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"
}
}
]
}
}
Скорее всего, не обработчик режет, а в контекст выполнения правила передаётся не тот пользователь, который вам нужен.
Расскажите подробнее, при каких условиях вы этот код выполняете
Пользователь передается тот, я передал запись результата работы правила в watchdog (туда передается и UID и сам хеш) и потом проверял хеш, который сделало правило и хеш ,который должен был получится на их генераторе.