JS中静态页面实现微信分享功能

作者:简简单单 2017-03-16

微信分享网页的时候,希望分享出来的链接是标题+描述+缩略图,微信开发代码示例里已提供了方法,但只适用于动态页面。我使用phpcms把页面生成了静态文件,示例代码就起不到作用了。在网上找了下,有大神使用ajax实现静态页面也能实现微信分享功能,在这里分享给大家。

前台代码:

 代码如下 复制代码

记得把jquery的库也加上去,否则ajax不会运行

修改服务端文件jssdk.PHP

 代码如下 复制代码

$url=$_GET['url'];

classJSSDK {

 private$appId;

 private$appSecret;

 private$url;

 publicfunction__construct($appId,$appSecret,$url) {

 $this->appId =$appId;

 $this->appSecret =$appSecret;

$this->url =$url;

 }

 publicfunctiongetSignPackage() {

 $jsapiTicket=$this->getJsApiTicket();

 $protocol= (!empty($_SERVER['HTTPS']) &&$_SERVER['HTTPS'] !=='off'||$_SERVER['SERVER_PORT'] == 443) ?"https://":"http://";

 // $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

$url=$this->url;

 $timestamp= time();

 $nonceStr=$this->createNonceStr();

 // 这里参数的顺序要按照 key 值 ASCII 码升序排序

 $string="jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";

 $signature= sha1($string);

 $signPackage=array(

  "appId" =>$this->appId,

  "nonceStr"=>$nonceStr,

  "timestamp"=>$timestamp,

  "url" =>$url,

  "signature"=>$signature,

  "rawString"=>$string

 );

 return$signPackage;

 }

 privatefunctioncreateNonceStr($length= 16) {

 $chars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

 $str="";

 for($i= 0;$i<$length;$i++) {

  $str.=substr($chars, mt_rand(0,strlen($chars) - 1), 1);

 }

 return$str;

 }

 privatefunctiongetJsApiTicket() {

 // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例

 $data= json_decode(file_get_contents("jsapi_ticket.json"));

 if($data->expire_time < time()) {

  $accessToken=$this->getAccessToken();

  // 如果是企业号用以下 URL 获取 ticket

  // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";

  $url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";

  $res= json_decode($this->httpGet($url));

  $ticket=$res->ticket;

  if($ticket) {

  $data->expire_time = time() + 7000;

  $data->jsapi_ticket =$ticket;

  $fp=fopen("jsapi_ticket.json","w");

  fwrite($fp, json_encode($data));

  fclose($fp);

  }

 }else{

  $ticket=$data->jsapi_ticket;

 }

 return$ticket;

 }

 privatefunctiongetAccessToken() {

 // access_token 应该全局存储与更新,以下代码以写入到文件中做示例

 $data= json_decode(file_get_contents("access_token.json"));

 if($data->expire_time < time()) {

  // 如果是企业号用以下URL获取access_token

  // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";

  $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";

  $res= json_decode($this->httpGet($url));

  $access_token=$res->access_token;

  if($access_token) {

  $data->expire_time = time() + 7000;

  $data->access_token =$access_token;

  $fp=fopen("access_token.json","w");

  fwrite($fp, json_encode($data));

  fclose($fp);

  }

 }else{

  $access_token=$data->access_token;

 }

 return$access_token;

 }

 privatefunctionhttpGet($url) {

 $curl= curl_init();

 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

 curl_setopt($curl, CURLOPT_TIMEOUT, 500);

 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

 curl_setopt($curl, CURLOPT_URL,$url);

 $res= curl_exec($curl);

 curl_close($curl);

 return$res;

 }

}

$jssdk=newJSSDK("公众号ID","公众号密钥",$url);//按照自己的公众号填写

$signPackage=$jssdk->GetSignPackage();

$tmp=json_encode(array('appId'=>$signPackage["appId"],'timestamp'=>$signPackage["timestamp"],'nonceStr'=>$signPackage["nonceStr"],'signature'=>$signPackage["signature"],'url'=>$signPackage["url"]));

$callback=$_GET['callback'];

echo$callback.'('.$tmp.')';

exit;

?>

相关文章

精彩推荐