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 相关文章推荐
jquery $.ajax()取xml数据的小问题解决方法
Nov 20 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
Dec 26 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
May 14 Javascript
javascript中call apply 与 bind方法详解
Mar 10 Javascript
canvas绘制七巧板
Feb 03 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
Jul 17 Javascript
mui 打开新窗口的方式总结及注意事项
Aug 20 Javascript
JS函数节流和函数防抖问题分析
Dec 18 Javascript
vue 使用eventBus实现同级组件的通讯
Mar 02 Javascript
JS实现图片转换成base64的各种应用场景实例分析
Jun 22 Javascript
vscode 开发Vue项目的方法步骤
Nov 25 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
Apr 08 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
第二节 对象模型 [2]
2006/10/09 PHP
php 函数中使用static的说明
2012/06/01 PHP
PHP COOKIE及时生效的方法介绍
2014/02/14 PHP
php利用cookie实现自动登录的方法
2014/12/10 PHP
PHP屏蔽关键字实现方法
2016/11/17 PHP
PHP常用函数之获取汉字首字母功能示例
2019/10/21 PHP
javascript异步编程的4种方法
2014/02/19 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
用javascript对一个json数组深度赋值示例
2014/07/27 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
基于jquery实现简单的手风琴特效
2015/11/24 Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
2016/07/18 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
2016/12/25 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
解决给dom元素绑定click等事件无效问题的方法
2017/02/17 Javascript
nodejs实现邮件发送服务实例分享
2017/03/29 NodeJs
JavaScript生成图形验证码
2020/08/24 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
python列表的常用操作方法小结
2016/05/21 Python
Python3实战之爬虫抓取网易云音乐的热门评论
2017/10/09 Python
python cx_Oracle的基础使用方法(连接和增删改查)
2017/11/19 Python
使用matplotlib中scatter方法画散点图
2019/03/19 Python
利用python3 的pygame模块实现塔防游戏
2019/12/30 Python
Python文件操作方法详解
2020/02/09 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
2014/06/23 HTML / CSS
印度首选时尚目的地:Reliance Trends
2018/01/17 全球购物
数学专业毕业生自荐信
2013/11/10 职场文书
财务会计大学生自我评价
2014/04/09 职场文书
小学运动会报道稿
2014/10/04 职场文书
合作合同协议书范本
2015/01/27 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers