'json', 'game_id' => $paramArr['app_id'], 'user_id' => $data['user_id'], ]; $param['sign'] = md5("format=json&game_id={$param['game_id']}&user_id={$param['user_id']}&key={$paramArr['app_key']}"); $result = get_http_response("https://api.sy12306.com/oauth/check_mgmem_login", $param); $res = json_decode($result, true); if ($res['code'] == 200) { return ['user_id' => $param['user_id']]; } else { return false; } } // ## H5 ## // 渠道效验 public function getSpecialParamH5($data, $polyChannelGame = []){ // 参数: user_id=user_id if(!empty($data['user_id'])){ return $data['user_id']; } return false; } // 登陆效验 public function checkLoginH5($data, $polyChannelGame = []) { // 参数:user_id = user_id, extparam = {"username":"", "server_id":"", "time":"", "sign":""} if (empty($data['user_id']) || empty($data['extparam'])) { return ['code' => -610, 'msg' => '对接参数有误', 'data' => []]; } $extparam = json_decode($data['extparam'], true); if (empty($extparam)) { return ['code' => -611, 'msg' => '对接参数异常', 'data' => []]; } // if( ($extparam['time'] + 300) < time() ) { //避免链接被人盗用 // // return ['code' => -613, 'msg' => '渠道登录已失效', 'data' => []]; // } if (!$paramArr = json_decode($polyChannelGame['param'], true)) { return ['code' => -660, 'msg' => '渠道缺少参数配置', 'data' => []]; } // ## 官方范例 // game_id=479&server_id=0&time=1570872971&user_id=1521&username=test1&sign=c2e3ec97b6307b7f4c6a593a098b5065 // $data['user_id'] = '1521'; // $extparam['username'] = 'test1'; // $extparam['server_id'] = 0; // $extparam['time'] = 1570872971; // $extparam['sign'] = 'c2e3ec97b6307b7f4c6a593a098b5065'; // $paramArr['app_id'] = '479'; // $paramArr['app_key'] = '3525af8dcc69899c324079bb5daadbed'; $param = [ 'user_id' => intval($data['user_id']), 'username' => urldecode($extparam['username']), 'game_id' => intval($paramArr['app_id']), 'server_id' => intval($extparam['server_id']), 'time' => intval($extparam['time']), ]; ksort($param); $sign = md5(implode('', $param).$paramArr['app_key']); if (strcmp($extparam['sign'], $sign) === 0) { return ['user_id' => $param['user_id']]; } else { return ['code' => -600, 'msg' => '渠道登录效验失败', 'data' => []]; } } // 下单参数 public function getData($data) { return [ 'orderid' => $data['cp_order'],//我方聚合订单 'amount' => $data['money'], // 充值金额 'sub_orderid' => $data['pay_id'],//渠道订单 ]; } // 双端-回调效验 public function paySign($data, $polyChannelGame = []) { if (!$paramArr = json_decode($polyChannelGame['param'], true)) { return "渠道缺少参数配置!"; } $param = Request::instance()->only(['user_id', 'username', 'role_id', 'to_uid', 'to_user', 'pay_id', 'money', 'game_id', 'server_id', 'cp_order', 'time', 'extra', 'sign']); if(count($param) <= 0){ return "回调参数异常!"; } $sign = $this->paySignHandle($param, $paramArr['app_key']); if ($data['sign'] == $sign) { return true; } return "回调处理异常!"; } // H5-回调效验 public function paySignH5($data, $polyChannelGame = []) { if (!$paramArr = json_decode($polyChannelGame['param'], true)) { return "渠道缺少参数配置!"; } $param = Request::instance()->only(['user_id', 'username', 'role_id', 'to_uid', 'to_user', 'pay_id', 'money', 'game_id', 'server_id', 'cp_order', 'time', 'extra', 'sign']); if(count($param) <= 0){ return "回调参数异常!"; } $sign = $this->paySignHandle($param, $paramArr['app_key']); if ($data['sign'] == $sign) { return true; } return "回调处理异常!"; } private function paySignHandle($param, $key) { $param = array_filter($param, function ($v, $k) { if ($k !== 'sign' && $v !== '') { return true; } }, ARRAY_FILTER_USE_BOTH); ksort($param); reset($param); $signStr = implode('', $param); return md5($signStr . $key); } public function getSuccess($msg = '') { echo 'SUCCESS'; exit(); } public function getFail($msg = '') { echo 'FAIL:'.$msg; exit(); } }