$paramArr['app_id'], 'token' => $data['channel_token'], 'ts' => getMillisecond(), 'uin' => $data['user_id'], ]; $params['sign'] = md5($this->getLoginSign($params).$paramArr['app_key']); $result = $this->curl_post($this->check_url.'/payserver/account/check_login', $params); // trace($this->channel.' 登陆校验失败 - url:'.$this->check_url . ' - ' . json_encode($params) . ' - result:' . $result, 'Yehua@checkLogin.$result'); $res = json_decode($result, true); if ($res['code'] == 0) { return true; } else { return false; } } // 支付回调效验 public function paySign($data, $polyChannelGame = []) { if(!input('app') || !input('uid') || !input('sign')){ return ['code' => -710, 'msg' => '回调参数有误!', 'data' => []]; } if (!$paramArr = json_decode($polyChannelGame['param'], true)) { return false; } $newData = [ "app" => $data['app'], "at" => $data['at'], "cbi" => $data['cbi'], "cn" => $data['cn'], "fee" => $data['fee'], "kr" => $data['kr'], "pt" => $data['pt'], "res" => $data['res'], "st" => $data['st'], "tid" => $data['tid'], "ud" => $data['ud'], "uid" => $data['uid'], "ver" => $data['ver'], "sign" => $data['sign'], ]; $signStr = $this->getSignContent($newData) . $paramArr['app_secret']; if (md5($signStr) == $newData['sign']) { return true; } return false; } public function getData($data) { return [ 'orderid' => $data['ud'], //我方聚合订单 'amount' => formatFenToYuan($data['fee']), // 充值金额 'sub_orderid' => $data['ud'], //渠道订单 ]; } public function getFail($msg = '') { echo 'FAILURE'; exit(); } public function getSuccess($msg = '') { echo 'SUCCESS'; exit(); } /** * 登陆签名 * * 获取待签字符串 * 去除值为null和键为sign、sign_type的参数 * 按照键值字典排序[a-z] * 按照key=value&key=value的方式拼接成待签字符串 * @param $params * @return string */ private function getLoginSign($params) { ksort($params); $returnArr = []; foreach ($params as $k => $v) { $ks = trim(strtolower($k)); if ($ks == 'sign' || $ks == 'sign_type') { unset($params[$k]); continue; } $returnArr[] = "{$k}={$v}"; } $resStr = implode('&', $returnArr); return $resStr; } public function curl_post($url , $data=array()){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); // POST数据 curl_setopt($ch, CURLOPT_POST, 1); // 把post的变量加上 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); $output = curl_exec($ch); curl_close($ch); return $output; } public function getSpecialParam($data,$polyChannelGame = []){ if(!empty($data['user_id'])){ return $data['user_id']; } return false; } /** * 支付回调签名 * * 获取待签字符串 * 去除值为null和键为sign、sign_type的参数 * 按照键值字典排序[a-z] * 按照key=value&key=value的方式拼接成待签字符串 * @param $params * @return string */ private function getSignContent($params) { ksort($params); $returnArr = []; foreach ($params as $k => $v) { $ks = trim(strtolower($k)); if ($ks == 'sign' || $ks == 'sign_type') { unset($params[$k]); continue; } $returnArr[] = "{$k}={$v}"; } $resStr = implode('&', $returnArr); return $resStr; } }