// 分享 public function getApiTicketAction() { $url = Request::param('url'); try { $jsapiTicket = $this->getJsapiTicket(); $timestamp = time(); $nonceStr = $this->createNonceStr(); // 构造一个随机数,用来生成签名的一部分 $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url"; // 签名算法先按照ascII码排序 $signature = sha1($string); // 对排序好的字符串加密 $signPackage = array( 'appId' => UserLogic::$wxAppid, 'nonceStr' => $nonceStr, 'timestamp' => $timestamp, 'signature' => $signature ); return ReturnCode::showReturnCode(ReturnCode::SUCCESS_CODE, '操作成功', $signPackage); } catch (\Exception $e) { Log::write('会员登录失败: ' . $e->getMessage(), 'error'); return [ 'code' => ReturnCode::ERROR_CODE, 'msg' => '失败' . $e->getMessage() ]; } } // 构造一个随机数,用来生成签名的一部分 public function createNonceStr($length = 16) { // 生成随机16个字符的字符串 $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i find(); if ($access_token_list['ticket_expires_time'] > time()) { $ticket = $access_token_list['ticket']; return $ticket; } else { if ($access_token_list['expires_time'] > time()) { $token = $access_token_list['access_token']; } else { $res = file_get_contents('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $appid . '&secret=' . $secret); $res = json_decode($res, true); if (isset($res['errcode']) && ! empty($res['errcode'])) { throw new \Exception($res['errmsg']); } $token = $res['access_token']; } $res2 = file_get_contents("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" . $token . "&type=jsapi"); $res2 = json_decode($res, true); if (isset($res2['errcode']) && ! empty($res2['errcode'])) { throw new \Exception($res2['errmsg']); } $ticket = $res2['ticket']; // ticket 不能频繁的访问接口来获取,在每次获取后,我们把它保存到数据库中。 if ($ticket) { $data = array( 'access_token' => $token, 'expires_time' => $time, 'expires_in' => '7000', 'ticket' => $ticket, 'ticket_expires_time' => $time ); AccessTokenModel::where('id', 1)->update($data); // 把获得的token存储到数据库中 } return $ticket; } }