error = $error; $this->error_code = $error_code; $this->msg = $msg; $this->data = $data; } public function to_array() { return (array)$this; } public function to_string() { return json_encode($this, JSON_UNESCAPED_UNICODE); } public function from_array($array) { foreach ($array as $key => $value) { if (property_exists($this, $key)) { $this->$key = $value; } } return true; } public function from_string($string) { return $this->from_array((array)json_decode($string)); } } /** * 错误码 * 获取优惠券:12000--12050 * 更新用户积分:13000-13050 * 友乐牛牛用户登录:13100-13150 * 基类 * @path("/apiBase") */ class apiBase { public static $domain = "sdk.tscce.cn"; //public static $domain = 'api.tscce.cn'; public $appid; // 开发者应用ID public $devkey; // 开发者Key public $businessid; // 商家ID public $sid; // 开发者SID public $scode; // 开发者SCODE public $market_key; // 门店Key public $appInfo; // 开发者应用信息 public $devInfo; // 开发者信息 public $marketInfo; // 商家信息 public $userInfo; // 全局用户信息 public $businessInfo; public function __construct() { } protected function getLocaleUrl($always_http = false) { $is_https = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') || (isset($_SERVER['REQUEST_SCHEME']) && $_SERVER['REQUEST_SCHEME'] == 'https'); $request_scheme = $is_https ? 'https://' : 'http://'; $hostname = $_SERVER['SERVER_NAME']; $hostport = (($is_https && '443' == $_SERVER['SERVER_PORT']) || (!$is_https && '80' == $_SERVER['SERVER_PORT'])) ? '' : ':' . intval($_SERVER['SERVER_PORT']); if ($always_http) return 'http://' . $hostname . $hostport; else return $request_scheme . $hostname . $hostport; } protected function getFullUrl($relatively_url, $always_http = false) { if (mb_strstr($relatively_url, '/', false, USEDCHARSET) == $relatively_url) return $this->getLocaleUrl($always_http) . $relatively_url; else return $this->getLocaleUrl($always_http) . '/' . $relatively_url; } public function init($appid = '', $devkey = '', $sid = '', $scode = '', $market_key = '') { $this->appid = $appid; $this->devkey = $devkey; $this->sid = $sid; $this->scode = $scode; $this->market_key = $market_key; } public function verifyMarketApi($devkey = '') { $this->devkey = $devkey; if (empty($this->devkey)) { return new returnObject(1, 10002, '未传入devkey参数'); } $devList = Sql::select('syweb_admin.*') ->from('syweb_admin') ->where('syweb_admin.type=2 and syweb_admin.admin_key=? and syweb_admin.status=1', $this->devkey) ->get($this->db, null); if (empty($devList) || count($devList) <= 0) { return new returnObject(1, 10003, 'devkey无效'); } $this->devInfo = $devList[0]; return new returnObject(0); } /******************************* * name: verify * note: 验证参数是否有效 *******************************/ public function verify() { if (empty($this->appid)) return new returnObject(1, 10001, '未传入appid参数'); if (empty($this->devkey)) return new returnObject(1, 10002, '未传入devkey参数'); $devList = Sql::select('a.*') ->from('syweb_admin a') ->where('a.type=2 and a.admin_key=? and a.status=1', $this->devkey) ->get($this->db, null); if (empty($devList) || count($devList) <= 0) return new returnObject(1, 10003, 'devkey无效'); $this->devInfo = $devList[0]; /* $appBaseList = Sql::select('a.*') ->from('syweb_app_base a') ->where('a.ref_key=? and a.dev_key=? and a.status=10', $this->appid, $this->devInfo['admin_key']) ->get($this->db, null); if (empty($appBaseList) || count($appBaseList) <= 0) { return new returnObject(1, 10004, '指定的应用不存在或未被审核'); } $appBaseKey = $appBaseList[0]["app_key"]; $appList = Sql::select('a.*') ->from('syweb_app a') ->where('a.ref_key=? and a.dev_key=? and a.status=10', $appBaseKey, $this->devInfo['admin_key']) ->get($this->db, null); if (empty($appList) || count($appList) <= 0) { return new returnObject(1, 10004, '指定的应用不存在或未被审核'); } $this->appInfo = $appList[0]; */ $appList = Sql::select('b.*') ->from('syweb_app_base a, syweb_app b') ->where('a.app_key = b.ref_key and a.status = b.status and a.dev_key = b.dev_key and a.ref_key = ? and a.dev_key = ? and a.status = 10', $this->appid, $this->devInfo['admin_key']) ->get($this->db, null); if (empty($appList) || count($appList) <= 0) return new returnObject(1, 10004, '指定的应用不存在或未被审核'); $this->appInfo = $appList[0]; if (empty($this->sid)) return new returnObject(1, 10005, '请传入sid'); if (empty($this->scode)) return new returnObject(1, 10006, '请传入scode'); // 当前时间戳,通过sid和scode获取用户信息,必须保障sid未过期 $nowTime = time(); // 根据sid 查询用户信息 $userList = Sql::select('a.*') ->from('syweb_users a') ->where('a.sid=? and a.scode=? and a.sid_expire_time>?', $this->sid, $this->scode, $nowTime) ->get($this->db, null); if (!empty($userList) && count($userList) > 0) { $this->userInfo = $userList[0]; // 延长SID过期时间 begin $updateData = array(); $sid_expire_time = time() + (2 * 24 * 60 * 60); $updateData['sid_expire_time'] = $sid_expire_time; $pdo = $this->db; $pdo->beginTransaction(); Sql::update('syweb_users')->setArgs($updateData)->where('id=?', $this->userInfo['id'])->exec($pdo); $pdo->commit(); // 延长SID过期时间 end // 判断SID对应的门店Key和传入的门店Key是否一致 if (!empty($market_key)) { if ($this->userInfo['market_key'] != $market_key) return new returnObject(1, 10011, '指定的SID和market_key不符'); } $marketList = Sql::select('a.*') ->from('syweb_market a') ->where('a.market_key=?', $this->userInfo['market_key']) ->get($this->db, null); if (empty($marketList) || count($marketList) <= 0) return new returnObject(1, 10007, '指定的门店Key不存在或未被审核'); $this->market_key = $this->userInfo['market_key']; $this->marketInfo = $marketList[0]; if (!empty($this->marketInfo) && !empty($this->marketInfo['templatemsg'])) $this->marketInfo['templatemsg'] = iunserializer($this->marketInfo['templatemsg']); switch ($this->userInfo['auth_type']) { case AUTHTYPE_WECHAT: { $weixin_user_list = Sql::select('syweb_users_weixin.*') ->from('syweb_users_weixin') ->where('syweb_users_weixin.uid=?', $this->userInfo["id"]) ->get($this->db, null); if (!empty($weixin_user_list) && count($weixin_user_list) > 0) { $this->userInfo['weixin'] = $weixin_user_list[0]; return new returnObject(0); } else return new returnObject(1, 10009, '未找到指定的微信用户信息'); break; } case AUTHTYPE_QQ: { $qq_user_list = Sql::select('syweb_users_qq.*') ->from('syweb_users_qq') ->where('syweb_users_qq.uid=?', $this->userInfo["id"]) ->get($this->db, null); if (!empty($qq_user_list) && count($qq_user_list) > 0) { $this->userInfo['qq'] = $qq_user_list[0]; return new returnObject(0); } else return new returnObject(1, 10010, '未找到指定的QQ用户信息'); break; } case AUTHTYPE_JKX: { $jkx_user_list = Sql::select('a.*') ->from('syweb_users_jkx a') ->where('a.uid=?', $this->userInfo["id"]) ->get($this->db, null); if (!empty($jkx_user_list) && count($jkx_user_list) > 0) { $this->userInfo['jkx'] = $jkx_user_list[0]; return new returnObject(0); } else return new returnObject(1, 10011, '未找到指定的聚开心用户信息'); break; } case AUTHTYPE_NIUNIUGAME: { $app_user_list = Sql::select('a.*') ->from('syweb_users_ylnn a') ->where('a.uid=?', $this->userInfo["id"]) ->get($this->db, null); if (!empty($app_user_list) && count($app_user_list) > 0) { $this->userInfo['app'] = $app_user_list[0]; return new returnObject(0); } else return new returnObject(1, 10011, '未找到指定的应用认证用户信息'); break; } default: { return new returnObject(1, 10012, '未知的用户认证方式' . $this->userInfo['auth_type']); break; } } } else { return new returnObject(1, 10008, '用户未登录或登录信息过期'); } } public function ToUrlParams($paramers) { $buff = ""; foreach ($paramers as $k => $v) { if ($k != "sign" && $v != "" && !is_array($v)) { $buff .= $k . "=" . $v . "&"; } } $buff = trim($buff, "&"); return $buff; } /** * @param string $market_key * @return array|null */ public function verify_admin($market_key) { if (empty($this->appid)) return new returnObject(1, 10001, '未传入appid参数'); if (empty($this->devkey)) return new returnObject(1, 10002, '未传入devkey参数'); if (empty($market_key)) return new returnObject(1, 10011, '未传入market_key参数'); $devList = Sql::select('a.*') ->from('syweb_admin a') ->where('a.type=2 and a.admin_key=? and a.status=1', $this->devkey) ->get($this->db, null); if (empty($devList) || count($devList) <= 0) return new returnObject(1, 10003, 'devkey无效'); $this->devInfo = $devList[0]; /* $appBaseList = Sql::select('a.*') ->from('syweb_app_base a') ->where('a.ref_key=? and a.dev_key=? and a.status=10', $this->appid, $this->devInfo['admin_key']) ->get($this->db, null); if (empty($appBaseList) || count($appBaseList) <= 0) { return new returnObject(1, 10004, '指定的应用不存在或未被审核'); } $appBaseKey = $appBaseList[0]["app_key"]; $appList = Sql::select('a.*') ->from('syweb_app a') ->where('a.ref_key=? and a.dev_key=? and a.status=10', $appBaseKey, $this->devInfo['admin_key']) ->get($this->db, null); if (empty($appList) || count($appList) <= 0) { return new returnObject(1, 10004, '指定的应用不存在或未被审核'); } $this->appInfo = $appList[0]; */ $appList = Sql::select('b.*') ->from('syweb_app_base a, syweb_app b') ->where('a.app_key = b.ref_key and a.status = b.status and a.dev_key = b.dev_key and a.ref_key = ? and a.dev_key = ? and a.status = 10', $this->appid, $this->devInfo['admin_key']) ->get($this->db, null); if (empty($appList) || count($appList) <= 0) return new returnObject(1, 10004, '指定的应用不存在或未被审核'); $this->appInfo = $appList[0]; $marketList = Sql::select('a.*') ->from('syweb_market a') ->where('a.market_key=?', $market_key) ->get($this->db, null); if (empty($marketList) || count($marketList) <= 0) return new returnObject(1, 10007, '指定的门店Key不存在或未被审核'); $this->market_key = $market_key; $this->marketInfo = $marketList[0]; if (!empty($this->marketInfo) && !empty($this->marketInfo['templatemsg'])) $this->marketInfo['templatemsg'] = iunserializer($this->marketInfo['templatemsg']); return new returnObject(0); } /** * @功能 带参数跳转到指定地址 * @param string $forwardUrl * @param mixed $paramers **/ public function forwardUrl($forwardUrl, $paramers) { $paramerStr = ""; if (!empty($paramers) && count($paramers) > 0) { foreach ($paramers as $key => $value) { if (empty($paramerStr)) { $paramerStr = $key . "=" . $value; } else { $paramerStr .= "&" . $key . "=" . $value; } } } if (!empty($paramerStr)) { if (strstr($forwardUrl, '?')) { if (strstr($forwardUrl, '&')) { $forwardUrl .= '&' . $paramerStr; } else { $forwardUrl .= $paramerStr; } } else { $forwardUrl .= '?' . $paramerStr; } } header('Location: ' . $forwardUrl); exit(); } /** @inject("ioc_factory") */ private $factory; /** * @property({"default":"@db"}) * @var PDO */ public $db; }