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


Posted in Javascript onFebruary 06, 2017

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

前台代码:

<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 
<script> 
url=location.href; 
 $.ajax({ 
 type : "get", 
 url : "http://xxxxxxxxx/jssdk.php?url="+url,//替换网址,xxx根据自己jssdk文件位置修改 
 dataType : "jsonp", 
 jsonp: "callback", 
 jsonpCallback:"success_jsonpCallback", 
 success : function(data){ 
  wx.config({ 
appId: data.appId, 
timestamp: data.timestamp, 
nonceStr: data.nonceStr, 
signature: data.signature, 
jsApiList: [ 
  "onMenuShareTimeline", //分享给好友 
  "onMenuShareAppMessage", //分享到朋友圈 
  "onMenuShareQQ", //分享到QQ 
  "onMenuShareWeibo" //分享到微博 
] 
}); 
}, 
    error:function(data){ 
     alert("连接失败!"); 
    } 
}); 
 wx.ready(function (){ 
 var shareData = { 
 title: '标题', 
 desc: '简介',//这里请特别注意是要去除html 
 link: '链接', 
 imgUrl: '题图' 
 }; 
 wx.onMenuShareAppMessage(shareData); 
 wx.onMenuShareTimeline(shareData); 
 wx.onMenuShareQQ(shareData); 
 wx.onMenuShareWeibo(shareData); 
 }); 
</script>

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

修改服务端文件jssdk.PHP

<?php 
$url = $_GET['url']; 
class JSSDK { 
 private $appId; 
 private $appSecret; 
 private $url; 
 public function __construct($appId, $appSecret,$url) { 
 $this->appId = $appId; 
 $this->appSecret = $appSecret; 
$this->url = $url; 
 } 
 public function getSignPackage() { 
 $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; 
 } 
 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() { 
 // 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; 
 } 
 private function getAccessToken() { 
 // 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; 
 } 
 private function httpGet($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 = new JSSDK("公众号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; 
?>

其它的按照动态页面设置即可。

以上所述是小编给大家介绍的JS中静态页面实现微信分享功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
理解Javascript_11_constructor实现原理
Oct 18 Javascript
精选的10款用于构建良好易用性网站的jQuery插件
Jan 23 Javascript
人人网javascript面试题 可以提前实现下
Jan 05 Javascript
使用jQuery实现的网页版的个人简历(可换肤)
Apr 19 Javascript
JavaScript获取路径设计源码
May 22 Javascript
JS逆序遍历实现代码
Dec 02 Javascript
jQuery插件pagination实现分页特效
Apr 12 Javascript
javaScript中push函数用法实例分析
Jun 08 Javascript
jquery使用ul模拟select实现表单美化的方法
Aug 18 Javascript
JavaScript实现url参数转成json形式
Sep 25 Javascript
如何处理JSON中的特殊字符
Nov 30 Javascript
JS实现点击按钮可实现编辑功能
Jul 03 Javascript
JS日程管理插件FullCalendar中文说明文档
Feb 06 #Javascript
Javascript之深入浅出prototype
Feb 06 #Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
Feb 06 #Javascript
canvas实现图像布局填充功能
Feb 06 #Javascript
canvas实现图像截取功能
Feb 06 #Javascript
JS跨域请求外部服务器的资源
Feb 06 #Javascript
canvas实现动态小球重叠效果
Feb 06 #Javascript
You might like
截获网站title标签之家内容的例子
2006/10/09 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
2014/09/10 PHP
php基于jquery的ajax技术传递json数据简单实例
2016/04/15 PHP
PHP中file_put_contents追加和换行的实现方法
2017/04/01 PHP
PHP chr()函数讲解
2019/02/11 PHP
javascript 页面划词搜索JS
2009/09/28 Javascript
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
javascript for循环从入门到偏门(效率优化+奇特用法)
2012/08/01 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
javascript与Python快速排序实例对比
2015/08/10 Javascript
jquery实现可点击伸缩与展开的菜单效果代码
2015/08/31 Javascript
Angular.js如何从PHP读取后台数据
2016/03/24 Javascript
jQuery增加和删除表格项目及实现表格项目排序的方法
2016/05/30 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
微信小程序表单验证功能完整实例
2017/12/01 Javascript
Vue组件之极简的地址选择器的实现
2018/05/31 Javascript
vue-router判断页面未登录自动跳转到登录页的方法示例
2018/11/04 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
JS字符串与二进制的相互转化实例代码详解
2019/06/28 Javascript
解决vue-cli输入命令vue ui没效果的问题
2020/11/17 Javascript
[01:02:30]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
Python简单进程锁代码实例
2015/04/27 Python
Python中django学习心得
2017/12/06 Python
python 实现倒排索引的方法
2018/12/25 Python
python实现的多任务版udp聊天器功能案例
2019/11/13 Python
pytorch 实现在预训练模型的 input上增减通道
2020/01/06 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
纽约海:Sea New York
2018/11/04 全球购物
夏季奶茶店创业计划书
2014/01/16 职场文书
企业贷款委托书格式
2014/09/12 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
HTML+CSS+JS实现图片的瀑布流布局的示例代码
2021/04/22 HTML / CSS
详解nodejs内置模块
2021/05/06 NodeJs