## 同步登录接口 本接口使得用户在一点登录以后,在所有网站同时登录或者登出,要全面实现这一功能,需要此接口与“同步登录通知”配合才能实现,关于同步登录通知请查看 [通知 -> 同步登录通知](../notify/sync.md)。 同步登录接口流程: 1. 用户登录应用; 2. 当前应用调用同步登录接口; 3. 当前应用通过同步登录接口得到所有开启同步登录的应用的“同步登录通知 URL”; 4. 将得到的这些 URL 发送到客户端浏览器; 5. 由浏览器访问这些 URL; 6. 这些 URL 在接收到请求以后,做出一系列的验证,保证参数是合法的,然后将用户状态设置为已登录。 下图是同步流程示意图,本文档描述下图中蓝线和紫线部分,即流程 1-3,流程 4-6 请查看 [通知 -> 同步登录通知](../notify/sync.md): ![同步登录流程](sync.svg){.img-fluid .bg-img} ---------- ### 同步登录 本接口使得用户在一点登录以后,在所有网站同时登录。 ##### URL http://server/index.php/api/sync/login ##### HTTP 请求方式 POST ##### 加密参数 参数进行 JSON 编码,然后将 JSON 字符串进行加密。然后把加密的结果作为 `公共请求参数` 的 code 参数。 | 名称 | 类型 | 必需 | 描述 | | - | - | - | - | | user_id | int | true | | | user_access_token | string | true | 访问口令,必须用 MD5 加密后传输。 | | timestamp | int | true | UNIX 时间戳 | ##### 返回结果是否加密 否 | 键名 | 类型 | 描述 | 备注 | | - | - | - | - | | rcode | string | 返回代码 | | | urlRows | array | 同步登录通知 URL | 系统会在“同步登录通知 URL”上附加 `m=sso&c=sync&a=login` 参数,以便接收通知的系统识别。 | 返回结果示例 ``` javascript { "rcode": "y100401", "urlRows": [ //通知 URL "http://abc.com/api/api.php?m=sso&c=sync&a=login&sign=SDFDSFSDREWERWUGROE7TREIE&code=CSMEIFh7AHYBOFIlXQwAaQE0UXENawF2WUxXUbg1zASk%3D&key=tLUwyt", "http://123.cn/api/api.php?m=sso&c=sync&a=login&&sign=SDFDSFSDREWERWUGROE7TREIE&code=CSMEIFh7AHYBOFIlXQwAaQE0UXENawF2WUxXUbg1zASk%3D&key=tLUwyt" ] } ``` ---------- ### 同步登出 本接口使得用户在一点登出以后,在所有网站同时登出。 ##### URL http://server/index.php/api/sync/logout ##### HTTP 请求方式 POST ##### 加密参数 参数进行 JSON 编码,然后将 JSON 字符串进行加密。然后把加密的结果作为 `公共请求参数` 的 code 参数。 | 名称 | 类型 | 必需 | 描述 | | - | - | - | - | | user_id | int | true | | | user_access_token | string | true | 访问口令,必须用 MD5 加密后传输。 | | timestamp | int | true | UNIX 时间戳 | ##### 返回结果是否加密 否 | 键名 | 类型 | 描述 | 备注 | | - | - | - | - | | rcode | string | 返回代码 | | | urlRows | array | 同步登录通知 URL | 系统会在“同步登录通知 URL”上附加 `m=sso&c=sync&a=logout` 参数,以便接收通知的系统识别。 | ---------- ### 调用 URL 示例 取得结果以后,开发者应该向浏览器输出调用“同步登录通知 URL”的 HTML,“同步登录通知 URL”在接收到通知以后做进一步处理。 ##### AJAX + JSONP 方式 由于 AJAX 方式提交数据会涉及到跨域问题,因此 dataType 设置为 JSONP。关于 JSONP 请查看 [互动百科]((http://www.baike.com/wiki/jsonp)。AJAX 方式的优点是可以获知调用的状态,以便于判断同步是否成功,缺点是存在跨域问题,在部分浏览器可能存在兼容性问题,开发者也可尝试使用 SCRIPT 等其他方式。 ``` php ``` ##### SCRIPT 方式 开发者也可以根据实际情况选择 SCRIPT 方式或者 IFRAME 方式,这两种方式的优点是无跨域问题,缺点是无法获知调用的状态,无法判断同步是否成功。 ``` php $value) { ?> ```