www.gusucode.com > baigo CMS PHP开源网站管理系统 v1.2.2源码程序 > baigocms_v1.2.2/bg_sso/core/lang/zh_CN/help/api/outline.php
<?php return "<a name=\"top\"></a> <h3>API 概述</h3> <p> 各种应用整合 baigo SSO 都是通过 API 接口实现的,您可以在各类应用程序中使用该接口,通过发起 HTTP 请求方式调用 baigo SSO 服务,返回 JSON 数据。 </p> <p> 使用 API 接口,您需先在 baigo SSO 创建应用,创建成功后会给出 APP ID 和 APP KEY。详情查看 <a href=\"{BG_URL_HELP}ctl.php?mod=admin&act_get=app#show\">应用</a>。 </p> <p> </p> <div class=\"text-right\"> <a href=\"#top\"> <span class=\"glyphicon glyphicon-chevron-up\"></span> top </a> </div> <hr> <p> </p> <h3>应用的验证</h3> <p> baigo SSO 的所有 API 接口均需要验证应用以及验证应用的权限。详情请查看具体接口说明。 </p> <p> </p> <div class=\"text-right\"> <a href=\"#top\"> <span class=\"glyphicon glyphicon-chevron-up\"></span> top </a> </div> <hr> <p> </p> <h3>API 调用示例</h3> <p> <pre><code class=\"language-php\">class CLASS_SSO { \$arr_data = array( "app_id" => BG_SSO_APPID, //APP ID "app_key" => BG_SSO_APPKEY, //APP KEY ); /** 登录 * sso_login function. * * @access public * @param mixed \$str_userName 用户名 * @param mixed \$str_userPass 密码 * @return 解码后数组 登录结果 */ function sso_login(\$str_userName, \$str_userPass) { \$_arr_sso = array( "act_post" => "login", //动作 "user_name" => \$str_userName, //用户名 "user_pass" => md5(\$str_userPass), //密码,需要 md5 加密 ); \$_arr_ssoData = array_merge(\$this->arr_data, \$_arr_sso); \$_arr_get = \$this->fn_http(BG_SSO_URL . "?mod=user", \$_arr_ssoData, "post"); //提交 \$_arr_result = \$this->result_process(\$_arr_get); if (\$_arr_result["alert"] != "y010401") { return \$_arr_result; //返回错误信息 } \$_arr_decode = \$this->sso_decode(\$_arr_result["code"], \$_arr_result["key"]); //解码 \$_arr_decode["alert"] = \$_arr_result["alert"]; return \$_arr_decode; } /** 返回结果处理 * result_process function. * * @access private * @return void */ private function result_process(\$arr_get) { if (!isset(\$arr_get["ret"])) { \$_arr_result = array( "alert" => "x030110" ); return \$_arr_result; } \$_arr_result = json_decode(\$arr_get["ret"], true); if (!isset(\$_arr_result["alert"])) { \$_arr_result = array( "alert" => "x030110" ); return \$_arr_result; } return \$_arr_result; } /** 解码 * sso_decode function. * * @access public * @return void */ function sso_decode(\$str_code, \$str_key) { \$_arr_sso = array( "act_get" => "decode", //方法 "code" => \$str_code, //加密串 "key" => \$str_key, //解码秘钥 ); \$_arr_ssoData = array_merge(\$this->arr_data, \$_arr_sso); //合并数组 \$_arr_get = \$this->fn_http(BG_SSO_URL . "?mod=code", \$_arr_ssoData, "get"); //提交 return \$this->fn_jsonDecode(\$_arr_get["ret"], "decode"); } //http function fn_http(\$str_url, \$arr_data, \$str_method = "get") { \$_obj_http = curl_init(); \$_str_data = http_build_query(\$arr_data); \$_arr_headers = array( "Content-Type: application/x-www-form-urlencoded", ); if (\$_arr_headers) { curl_setopt(\$_obj_http, CURLOPT_HTTPHEADER, \$_arr_headers); } if (\$str_method == "post") { curl_setopt(\$_obj_http, CURLOPT_POST, true); curl_setopt(\$_obj_http, CURLOPT_POSTFIELDS, \$_str_data); curl_setopt(\$_obj_http, CURLOPT_URL, \$str_url); } else { if (stristr(\$str_url, "?")) { \$_str_conn = "&"; } else { \$_str_conn = "?"; } curl_setopt(\$_obj_http, CURLOPT_URL, \$str_url . \$_str_conn . \$_str_data); } curl_setopt(\$_obj_http, CURLOPT_RETURNTRANSFER, true); \$_obj_ret = curl_exec(\$_obj_http); \$_arr_return = array( "ret" => \$_obj_ret, "err" => curl_error(\$_obj_http), "errno" => curl_errno(\$_obj_http), ); curl_close(\$_obj_http); return \$_arr_return; } /** JSON 解码 (值可解码自 base64) * fn_jsonDecode function. * * @access public * @param string \$str_json * @param string \$method * @return void */ function fn_jsonDecode(\$str_json = "", \$method = "") { if (isset(\$str_json)) { \$arr_json = json_decode(\$str_json, true); //json解码 \$arr_json = \$this->fn_eachArray(\$arr_json, \$method); } else { \$arr_json = array(); } return \$arr_json; } /** 遍历数组,并进行 base64 解码编码 * fn_eachArray function. * * @access public * @param mixed \$arr * @param string \$method (default: "encode") * @return void */ function fn_eachArray(\$arr, \$method = "encode") { \$_is_magic = get_magic_quotes_gpc(); if (is_array(\$arr)) { foreach (\$arr as \$_key=>\$_value) { if (is_array(\$_value)) { \$arr[\$_key] = \$this->fn_eachArray(\$_value, \$method); } else { switch (\$method) { case "encode": if (!\$_is_magic) { \$_str = addslashes(\$_value); } else { \$_str = \$_value; } \$arr[\$_key] = base64_encode(\$_str); break; case "decode": \$_str = base64_decode(\$_value); break; default: if (!\$_is_magic) { \$_str = addslashes(\$_value); } else { \$_str = \$_value; } \$arr[\$_key] = \$_str; break; } } } } else { \$arr = array(); } return \$arr; } } \$obj_sso = new CLASS_SSO(); //初始化对象 \$user_name = \$_GET["user_name"]; //表单获取用户名 \$user_pass = \$_GET["user_pass"]; //表单获取密码 \$arr_userRow = \$obj_sso->sso_login(\$user_name, \$user_pass); //调用登录接口</code></pre> </p> <p> </p> <div class=\"text-right\"> <a href=\"#top\"> <span class=\"glyphicon glyphicon-chevron-up\"></span> top </a> </div> <hr> <p> </p> <h3>返回结果</h3> <p> baigo SSO 大部分 API 接口返回加密字符串,详情请查看具体接口,真正内容需要调用密文接口进行解密。解密后部分结果为 <mark>Base64 编码</mark>,需要进行 <mark>Base64 解码</mark>,请查看具体的接口。 </p> <div class=\"panel panel-default\"> <div class=\"panel-heading\">返回结果</div> <div class=\"table-responsive\"> <table class=\"table table-bordered\"> <thead> <tr> <th class=\"text-nowrap\">名称</th> <th class=\"text-nowrap\">类型</th> <th>具体描述</th> </tr> </thead> <tbody> <tr> <td class=\"text-nowrap\">alert</td> <td class=\"text-nowrap\">string</td> <td>返回代码,详情查看 <a href=\"{BG_URL_HELP}ctl.php?mod=api&act_get=alert\">返回代码</a>。</td> </tr> <tr> <td class=\"text-nowrap\">code</td> <td class=\"text-nowrap\">string</td> <td>加密字符串,需要解密。详情查看 <a href=\"{BG_URL_HELP}ctl.php?mod=api&act_get=code#decode\">密文接口</a>。</td> </tr> <tr> <td class=\"text-nowrap\">key</td> <td class=\"text-nowrap\">string</td> <td>解密码,配合加密字符串使用,用于解码。详情查看 <a href=\"{BG_URL_HELP}ctl.php?mod=api&act_get=code#decode\">密文接口</a>。</td> </tr> <tr> <td class=\"text-nowrap\">prd_sso_ver</td> <td class=\"text-nowrap\">string</td> <td>baigo SSO 版本号。</td> </tr> <tr> <td class=\"text-nowrap\">prd_sso_pub</td> <td class=\"text-nowrap\">string</td> <td>baigo SSO 版本发布时间,格式为年月日。</td> </tr> </tbody> </table> </div> </div> <p> </p> <h4>返回结果示例</h4> <p> <pre><code class=\"language-javascript\">{ "prd_sso_ver": "1.1.1", //SSO 版本号 "prd_sso_pub": 20150923, //SSO 版本发布时间 "code": "CSMEIFh7AHYBOFIlXQwAaQE0UXENawF2WUxXUQNFVD4Ac1R%2BUSUFdQgnBmYMcARbAT5RMlprBjZdJQdvBSRQXgkPBEhYZAAnAXFSdV0mAHMBNVEhDQ4BOVliV2wDbFQhAGtUcFElBSwIdgZ2DHEEYQEiUQxaaAY6XWQHPgUkUD0JegRbWFkATwE3UnVdfwAiASVRIA00ASZZXFdxA2lUbgA0VHBRPQUiCBkGVwxTBDQBHVEpWkMGYF1KBxEFR1A1CRcEU1gzADgBf1J7XXEAdQEjUTYNIwELWXdXbANtVGYADlQ%2BUWgFZwg9Bm0MIAQ%2BAXJRHlpSBgJdNwcYBXxQQglrBE9YSgBIAWhSGV0kAD0BbVFxDX0Bdll2V3YDZVRxAA5UO1F3BSIIbgYhDE8EUAEZUStaSgY5XUIHYAVJUFQJbAR6WEMAVgFpUi9dHQBqAR1Rbg1zASk%3D", //加密字符串 "key": "tLUwyt", //解密码 "alert": "y010102" //返回代码 }</code></pre> </p> <p> </p> <div class=\"text-right\"> <a href=\"#top\"> <span class=\"glyphicon glyphicon-chevron-up\"></span> top </a> </div>";