API 概述

假设网站 URL 为 http://www.domain.com 上传到根目录 /,以下说明均以此为例。各种应用整合 baigo SSO 都是通过 API 接口实现的,您可以在各类应用程序中使用该接口,通过发起 HTTP 请求方式调用 baigo SSO 服务,返回 JSON 数据。

使用 API 接口,您需先在 baigo SSO 创建应用,创建成功后会给出 APP ID 和 APP KEY。详情查看 应用

 

 

应用的验证

baigo SSO 的所有 API 接口均需要验证应用以及验证应用的权限。详情请查看具体接口说明。

 

 

API 调用示例

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"   => "login", //动作
            "user_name"  => $str_userName, //用户名
            "user_pass"  => md5($str_userPass), //密码,需要 md5 加密
        );

        $_arr_ssoData = array_merge($this->arr_data, $_arr_sso);
        $_arr_ssoData["signature"] = $this->sso_signature($_arr_ssoData);
        $_arr_get     = $this->fn_http(BG_SSO_URL . "?mod=user", $_arr_ssoData, "post"); //提交
        $_arr_result  = $this->result_process($_arr_get);

        if ($_arr_result["rcode"] != "y010401") {
            return $_arr_result; //返回错误信息
        }

        $_arr_decode          = $this->sso_decode($_arr_result["code"], $_arr_result["key"]); //解码
        $_arr_decode["rcode"] = $_arr_result["rcode"];

        return $_arr_decode;
    }


    /** 返回结果处理
     * result_process function.
     *
     * @access private
     * @return void
     */
    private function result_process($arr_get) {
        if (!isset($arr_get["ret"])) {
            $_arr_result = array(
                "rcode" => "x030110"
            );
            return $_arr_result;
        }

        $_arr_result = json_decode($arr_get["ret"], true);
        if (!isset($_arr_result["rcode"])) {
            $_arr_result = array(
                "rcode" => "x030110"
            );
            return $_arr_result;
        }

        return $_arr_result;
    }


    /** 签名
     * sso_signature function.
     *
     * @access public
     * @param mixed $arr_params
     * @return void
     */
    function sso_signature($arr_params) {
        $_arr_sso = array(
            "act"  => "signature", //方法
            "params"    => $arr_params,
        );

        $_arr_ssoData     = array_merge($this->arr_data, $_arr_sso); //合并数组
        $_arr_get         = fn_http(BG_SSO_URL . "?mod=signature", $_arr_ssoData, "post"); //提交

        return fn_jsonDecode($_arr_get["ret"], "no");
    }


    /** 解码
     * sso_decode function.
     *
     * @access public
     * @return void
     */
    function sso_decode($str_code, $str_key) {
        $_arr_sso = array(
            "act"   => "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     = $_POST["user_name"]; //表单获取用户名
$user_pass     = $_POST["user_pass"]; //表单获取密码
$arr_userRow   = $obj_sso->sso_login($user_name, $user_pass); //调用登录接口

 

 

返回结果

baigo SSO 大部分 API 接口返回加密字符串,详情请查看具体接口,真正内容需要调用密文接口进行解密。解密后部分结果为 Base64 编码,需要进行 Base64 解码,请查看具体的接口。

返回结果
名称 类型 描述
rcode string 返回代码,详情查看 返回代码
code string 加密字符串,需要解密。详情查看 密文接口
prd_sso_ver string baigo SSO 版本号。
prd_sso_pub string baigo SSO 版本发布时间,格式为年月日。
 

返回结果示例

{
    "prd_sso_ver": "1.1.1", //SSO 版本号
    "prd_sso_pub": 20150923, //SSO 版本发布时间
    "code": "CSMEIFh7AHYBOFIlXQwAaQE0UXENawF2WUxXUQNFVD4Ac1R%2BUSUFdQgnBmYMcARbAT5RMlprBjZdJQdvBSRQXgkPBEhYZAAnAXFSdV0mAHMBNVEhDQ4BOVliV2wDbFQhAGtUcFElBSwIdgZ2DHEEYQEiUQxaaAY6XWQHPgUkUD0JegRbWFkATwE3UnVdfwAiASVRIA00ASZZXFdxA2lUbgA0VHBRPQUiCBkGVwxTBDQBHVEpWkMGYF1KBxEFR1A1CRcEU1gzADgBf1J7XXEAdQEjUTYNIwELWXdXbANtVGYADlQ%2BUWgFZwg9Bm0MIAQ%2BAXJRHlpSBgJdNwcYBXxQQglrBE9YSgBIAWhSGV0kAD0BbVFxDX0Bdll2V3YDZVRxAA5UO1F3BSIIbgYhDE8EUAEZUStaSgY5XUIHYAVJUFQJbAR6WEMAVgFpUi9dHQBqAR1Rbg1zASk%3D", //加密字符串
    "rcode": "y010102" //返回代码
}