微信公众号网页开发js配置服务端签名

微信公众号网页开发js配置服务端签名

本程序适用于thinkphp,原生php自己适当改下代码。S('wx_token')是thinkphp中的缓存函数。


		$appid="###";
		$secret="#";
		
	
		$token = S('wx_token');
		if (!$token) {
			$url='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret;
			$res = file_get_contents($url);
			$res = json_decode($res, true);
			$token = $res['access_token'];
			// 注意:这里需要将获取到的token缓存起来(或写到数据库中)
			// 不能频繁的访问https://api.weixin.qq.com/cgi-bin/token,每日有次数限制
			// 通过此接口返回的token的有效期目前为2小时。令牌失效后,JS-SDK也就不能用了。
			// 因此,这里将token值缓存1小时,比2小时小。缓存失效后,再从接口获取新的token,这样
			// 就可以避免token失效。
			// S()是ThinkPhp的缓存函数,如果使用的是不ThinkPhp框架,可以使用你的缓存函数,或使用数据库来保存。
			S('wx_token', $token, 3600);
		}
		
		
		$ticket = S('wx_ticket');
		if(!$ticket){
			$url2 = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=$token&type=jsapi";
			$res = file_get_contents($url2);
			$res = json_decode($res, true);
			$ticket = $res['ticket'];
			// 注意:这里需要将获取到的ticket缓存起来(或写到数据库中)
			// ticket和token一样,不能频繁的访问接口来获取,在每次获取后,我们把它保存起来。
			S('wx_ticket', $ticket, 3600);
		
		}
		
		// 注意 URL 一定要动态获取,不能 hardcode.
		$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
		$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

		
		$timestamp = time();
		
		$wxticket = $ticket;
		
		
		
		$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
		$nonceStr = "";
		for ($i = 0; $i < 16; $i++) {
		  $nonceStr .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
		}
		
		  // 这里参数的顺序要按照 key 值 ASCII 码升序排序
		$string = "jsapi_ticket=$wxticket&noncestr=$nonceStr×tamp=$timestamp&url=$url";

		$signature = sha1($string);

		
		$data['token']=$token;
		$data['ticket']=$ticket;
		$data['url']=$url;
		$data['timestamp']=$timestamp;
		$data['nonceStr']=$nonceStr;
		$data['signature']=$signature;
		$data['wx']=$string;
		
		
		//api("100","成功",$data);
		echo '
		
		
		';


你可能感兴趣的:(PHP)