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获取dom的下一个节点方法
Sep 05 Javascript
javascript html5 canvas实现可拖动省份的中国地图
Mar 11 Javascript
js创建jsonArray传输至后台及后台全面解析
Apr 11 Javascript
vue的props实现子组件随父组件一起变化
Oct 27 Javascript
JavaScript中的子窗口与父窗口的互相调用问题
Feb 08 Javascript
jQuery弹出窗口简单实现代码
Mar 09 Javascript
Vue.js 60分钟快速入门教程
Mar 28 Javascript
详解vue2.0脚手架的webpack 配置文件分析
May 27 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
Mar 05 Javascript
百度小程序自定义通用toast组件
Jul 17 Javascript
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
Sep 19 Javascript
基于javascript的无缝滚动动画1
Aug 07 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
ThinkPHP模型详解
2015/07/27 PHP
php的api数据接口书写实例(推荐)
2016/09/22 PHP
PHP保存Base64图片base64_decode的问题整理
2019/11/04 PHP
javascript qq右下角滑出窗口 sheyMsg
2010/03/21 Javascript
原生js实现shift/ctrl/alt按键的获取
2013/04/08 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
jQuery 选择符详细介绍及整理
2016/12/02 Javascript
Javascript计算二维数组重复值示例代码
2016/12/18 Javascript
es6学习笔记之Async函数的使用示例
2017/05/11 Javascript
webpack组织模块打包Library的原理及实现
2018/03/10 Javascript
vue 解决循环引用组件报错的问题
2018/09/06 Javascript
5分钟快速掌握JS中var、let和const的异同
2018/09/19 Javascript
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
[00:20]DOTA2荣耀之路7:-ah fu-抢盾
2018/05/31 DOTA
python实现决策树
2017/12/21 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
德国街头和运动文化高品质商店:BSTN Store
2017/08/26 全球购物
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
如何用SQL语句进行模糊查找
2015/09/25 面试题
关于.NET, HTML的五个问题
2012/08/29 面试题
求职信的要素有哪些呢
2013/12/26 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
2016继续教育培训学习心得体会
2016/01/19 职场文书
教学反思怎么写
2016/02/24 职场文书
Python爬取某拍短视频
2021/06/11 Python
Python中使用ipython的详细教程
2021/06/22 Python