调用Bitrix24 REST API绑定事件返回WRONG_AUTH_TYPE错误
问题背景
- 需求为通过Bitrix24 REST API注册
OnVoximplantCallInit事件,绑定自定义回调处理器,预期事件对所有普通用户生效,无需管理员权限 - 实际调用接口时,即便使用持有管理员权限的账号发起请求,仍返回授权类型错误,初步排除账号权限等级导致问题的可能
- 开发者为Bitrix24开发新手,对平台授权机制不熟悉,查阅官方文档后未定位到问题根因
接口返回错误
Array ( [error] => WRONG_AUTH_TYPE [error_description] => Current authorization type is denied for this method )
原有业务代码
<?php require_once (__DIR__.'/crest.php'); class AuthSimple { const AUTH_TYPE = 'demo_simple'; const AUTH_PARAM_NAME = 'secret_word'; const AUTH_PARAM_VALUE = 'MySuperSecurePassword123456'; public static function onRestCheckAuth(array $query, $scope, &$res) { if(array_key_exists(static::AUTH_PARAM_NAME, $query)) { $res = array('error' => 'INVALID_CREDENTIALS', 'error_description' => 'Invalid request credentials'); return false; } return null; } } $data = file_get_contents('https://gotmink.bitrix24.com.br/rest/4755/uj3p50inofwg6eqm/'); echo '<PRE>'; $result = CRest::call( 'event.bind', [ 'event' => 'OnVoximplantCallInit', 'handler' => 'https://testebitrix24.herokuapp.com/handler.php', 'auth_type' => '4755', 'event_type' => 'online' ] ); print_r($result); echo '</PRE>'; ?>
错误根因
- 触发
WRONG_AUTH_TYPE的直接原因是event.bind请求中传入的auth_type参数值非法:传入的4755是用户ID,不属于Bitrix24开放平台规定的该接口合法参数取值范围。 - Bitrix24
event.bind接口的auth_type参数仅支持三类合法取值,传入其他任意值都会触发该错误:0:默认取值,使用当前调用接口的用户授权上下文,事件触发时回调请求携带对应操作发起人的授权令牌1:使用应用管理员授权上下文,事件触发时回调请求携带应用全局管理员权限令牌- 提前通过平台接口注册过的自定义授权类型标识(例如代码中定义的
demo_simple),需要配套实现自定义授权校验逻辑才可使用
- 代码中存在两处冗余无效逻辑:一是拉取REST入口地址的
file_get_contents调用结果未被任何逻辑使用,二是自定义的AuthSimple类没有注册到平台授权钩子中,运行时不会实际生效。
修复方案
- 根据业务需求替换
auth_type的参数值:- 要实现“所有普通用户生效、无需管理员权限”的需求,直接将
auth_type设为0即可,事件触发时会自动携带当前发起呼叫操作的用户的授权上下文,不需要额外申请管理员权限 - 如果需要回调请求固定持有管理员权限,将
auth_type设为1 - 如果要使用自定义授权逻辑,需要先通过
rest.onRestAddAuthType事件将自定义授权类型注册到平台,再将auth_type设为对应标识(例如demo_simple)
- 要实现“所有普通用户生效、无需管理员权限”的需求,直接将
- 清理冗余代码:删除未被使用的
file_get_contents请求逻辑,未注册的AuthSimple类如果后续不需要使用可一并移除。 - 修正后的接口调用代码示例:
$result = CRest::call( 'event.bind', [ 'event' => 'OnVoximplantCallInit', 'handler' => 'https://testebitrix24.herokuapp.com/handler.php', 'auth_type' => 0, 'event_type' => 'online' ] );
内容的提问来源于stack exchange,提问作者LucasAHKB
相关产品推荐
相关产品推荐

