微信分享网页的时候,希望分享出来的链接是标题+描述+缩略图,微信开发代码示例里已提供了方法,但只适用于动态页面。由于dedecms是生成了静态文件,其实我想使用ajax获取jssdk参数也能也能实现微信分享功能了,在这里分享给大家。

前台HTML代码示例:

$.ajax({

type : "get",

url : "http://xxx/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);

});

修改服务端文件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&timestamp=$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;

?>

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

html页面在微信分享php,详解html静态页面实现微信分享思路的示例代码分析相关推荐

  1. 微信支付php详解 php,ThinkPHP框架整合微信支付之刷卡模式图文详解

    本文实例讲述了ThinkPHP框架整合微信支付之刷卡模式.分享给大家供大家参考,具体如下: 大家好,这篇文章是继微信支付之Native 扫码支付 模式二之后的微信支付系列教程第四篇:微信刷卡支付 本教 ...

  2. php下载文件代码详解,php将远超文件下载到本地的示例代码详解

    注:这个demo适用的是yii框架,如果您使用的不是yii框架,这个方法也适用您,简单的了解一下思路/** * 保存文件到本地 * @param 文件路径 $url * @param 保存本地路径 $ ...

  3. 马氏距离详解(数学原理、适用场景、应用示例代码)

    看了很多关于马氏距离(Mahalanobis Distance)的介绍,但是总感觉有一些地方不太清晰,所以结合数学公式.机器学习中的应用案例,从头梳理一下. 马氏距离实际上是欧氏距离在多变量下的&qu ...

  4. html5能调用手机陀螺仪么,详解html5如何获取手机陀螺仪角度信息的示例代码

    html5事件中,deviceorientation事件,此事件是检测设备方向变化时的事件.其常用属性为alpha(x).beta(y).gamma(z). 默认将手机垂直,且正面(90度)冲着自己 ...

  5. linux grud文件丢失,linux命令:grub 文件详解及grub修复,系统常见故障修复(示例代码)...

    首先模拟grub损坏,dd if=/dev/zero of=/dev/sda count=1 bs=400 grub引导破坏,但是此时并未重启,可以直接重新安装grub,从而达到恢复grub: 第一种 ...

  6. Java对接微信公众平台详解

    Java对接微信公众平台详解 1.公众平台概述 1.1 公众平台概述 1.2 入门指引 2.对接流程 2.1 接入概述 2.2 填写服务器配置 2.3 接口域名说明 2.4 获取Access toke ...

  7. 不懂第三方网站、App如何接入微信登录怎么办?这里我详解单点登录之第三方微信登录(建议收藏)

    2021/9/3 文章目录 一.前置准备 二.微信登录流程分析 第一步:请求code 第二步:通过code获取access_token 第三步:通过access_token调用获取用户信息 三.接口核 ...

  8. php 微信 群聊,vbot微信机器人微信聊天消息详解(18):群组变动

    <vbot微信机器人微信聊天消息详解(18):群组变动>要点: 本文介绍了vbot微信机器人微信聊天消息详解(18):群组变动,希望对您有用.如果有疑问,可以联系我们. 当微信群新增了成员 ...

  9. java前端长连接框架_Java中Spring Boot+Socket实现与html页面的长连接实例详解

    Spring Boot+Socket实现与html页面的长连接,客户端给服务器端发消息,服务器给客户端轮询发送消息,附案例源码 功能介绍 客户端给所有在线用户发送消息客户端给指定在线用户发送消息服务器 ...

最新文章

  1. 产品经理岗位职责说明_技术负责人岗位职责,五大方面,超越岗位抓住未来才是技术大牛...
  2. python:如何将字典值写入一个文本文件?
  3. 【Python之路Day17】Python Web框架之 Django
  4. 还在“葛优躺”?伤腰还容易脊椎变形!
  5. pytorch5:pytorch常用激活函数图像绘制
  6. ipv4地址是几位二进制数_知识点| ip地址详解,小学生都看的懂
  7. 通过命令行杀死某个进程或端口号
  8. 【算法】剑指 Offer 17. 打印从1到最大的n位数
  9. PHP文件上传类(页面和调用部分)
  10. python列表常用方法_python 列表常用方法
  11. Linux下Docker命令自动补全
  12. 问题贴 jQuery插件nicescroll问题
  13. cgi一键还原 linux分区,用一键恢复CGI工具备份还原分区和硬盘使用图文教程
  14. 360浏览器html5无法播放,win7系统360浏览器播放不了视频的解决方法
  15. ie 无人操作自动关闭_Win10系统下ie浏览器无响应白屏自动关闭如何修复
  16. 考华为云认证的注意事项、认证费用
  17. 图解:什么是最长递增子序列?
  18. 北上广等一线城市IT岗位已接近饱和?
  19. http authorization 基本认证
  20. postgresql windows下修改帐号密码 (图文)

热门文章

  1. ggtree美颜进化树-宏基因组扩增子
  2. Warning message:In a + b : longer object length is not a multiple of shorter object length
  3. R语言dataframe计算满足筛选条件的行的个数(筛选满足条件的数据行并计数):类似于excel的countif函数
  4. pandas生成新的累积连乘数据列(cumprod)、pandas生成新的累积连乘cumprod数据列(数据列中包含NaN的情况)、pandas计算整个dataframe的所有数据列的累积连乘
  5. R语言dplyr包和tidyr包创建交叉表(列联表、crosstab)实战
  6. Python使用pandas保存csv文件:如果文件存在则只添加内容(append),如果无表则同时写入表头和内容(write)
  7. R语言四格表、列联表秩和检验
  8. 降维的定义、维度诅咒、降维的意义
  9. go slice获取唯一值_Go语言引用传递与值传递
  10. 鸿合一体机触屏没反应怎么办_【干货】嵌入式工控一体机选择电容屏还是电阻屏?...