getJsApiTicket($merchant); $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; $timestamp = time(); $nonceStr = $this->createNonceStr(); $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";// 这里参数的顺序要按照 key 值 ASCII 码升序排序 $signature = sha1($string); $appId = $merchant['miniAppId']; $signPackage = array( "appId" => $appId, "nonceStr" => $nonceStr, "timestamp" => $timestamp, "url" => $url, "signature" => $signature, "rawString" => $string ); return $signPackage; } public function getSignPackage($merchant, $url) { $jsapiTicket = $this->getJsApiTicket($merchant); //$url 当前网页的URL,不包含#及其后面部分 $pos = strpos($url, '#'); if ($pos !== false) { $url = substr($url, 0, $pos); } $timestamp = time(); $nonceStr = $this->createNonceStr(); $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";// 这里参数的顺序要按照 key 值 ASCII 码升序排序 $signature = sha1($string); $appId = !empty($merchant) && !empty($merchant['wxAppId']) ? $merchant['wxAppId'] : ''; $signPackage = array( "appId" => $appId, "nonceStr" => $nonceStr, "timestamp" => $timestamp, "url" => $url, "signature" => $signature, "rawString" => $string ); return $signPackage; } private function createNonceStr($length = 16) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i < $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return $str; } private function getJsApiTicket($merchant) { $now = time(); $sjId = $merchant['id']; if (!empty($merchant) && !empty($merchant['wxJsApiTicket']) && ($now < strtotime($merchant['wxJsApiTicketExpire']))) { return $merchant['wxJsApiTicket']; } else { $accessToken = wxUtil::getAuthorizerAccessToken($merchant); $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken"; $curl = new curl\Curl(); $result = $curl->get($url); $res = Json::decode($result); if (isset($res['ticket'])) { $expireTime = (int)($now + $res['expires_in']); $uData['wxJsApiTicket'] = $res['ticket']; $uData['wxJsApiTicketExpire'] = date("Y-m-d H:i:s", $expireTime); xhMerchantService::updateById($sjId, $uData); return $res['ticket']; } return ''; } } }