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

jssdk的步骤业务流程是这样滴:

1:在微信公众号后台配置js 安全域名,即需要引入jssdk的页面域名。 需要在域名根目录下放置微信的检测文件。

3:后台开发人员生成签名传递给前台

4:前端页面引入script方式 jssdk文件

5:通过ajax获取config 配置,完成config 配置后即可使用jssdk的各项功能了。

再补充啰嗦一句:

确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。

如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去‘#‘hash部分的链接(可用location.href.split(‘#‘)[0]获取,

而且需要encodeURIComponent,后台decodeURIComponent解码),

因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,

如果不是动态获取当前链接,将导致分享后的页面签名失败。

前台HTML代码示例:

var url=encodeURIComponent(window.location.href.split(‘#‘)[0]);//分享成功之后再次分享,微信会再url附带额外参数造成二次分享签名错误,这里处理下避免config:invalid signature签名失效

$.ajax({

type : "get",

url : "http://xxx/jssdk.php?url="+url,//替换网址,xxx根据自己jssdk文件位置修改

dataType : "jsonp",

jsonp: "callback",

jsonpCallback:"success_jsonpCallback",

success : function(data){

wx.config({

debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印

appId: data.appId,

timestamp: data.timestamp,

nonceStr: data.nonceStr,

signature: data.signature,

jsApiList: [

"onMenuShareTimeline", //分享给好友

"onMenuShareAppMessage", //分享到朋友圈

"onMenuShareQQ", //分享到QQ

"onMenuShareWeibo" //分享到微博

]

});

},

error:function(data){

alert(JSON.stringify(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

$url = urldecode($_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怎么实现微信分享,html静态页面实现微信分享思路相关推荐

  1. 微信公众号H5页面开发--微信JS-SDK引用

    微信公众号H5页面开发–微信JS-SDK引用 微信提供了微信公众号开发者手册,官方地址:https://mp.weixin.qq.com/ 公众号内许多复杂的业务场景,都是通过网页形式来提供服务,这时 ...

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

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

  3. 页面错误!请稍后再试_微信内嵌H5页面授权和分享

    近期新上线项目,用到了微信授权获取用户信息和分享,掉坑无数次,遂写此篇,为后人指路 项目情况 技术选型 项目语言:HTML.CSS.JavaScript 项目框架:Vue.js 项目搭建脚手架:vue ...

  4. html静态页面实现微信分享思路

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

  5. uni-app分享小程序页面给微信好友;小程序分享无效原因;小程序分享失败原因;

    我的只是在html代码部分 使用 <button open-type="share" >发送</button> 点击按钮就可以将当前页面分享到微信好友 且打 ...

  6. php微信分享带缩略图,静态页面实现微信分享带缩略图、标题和描述

    在前一篇文章<微信转发或分享朋友圈带缩略图.标题和描述的实现方法>中,余斗已经教大家如何实现在自有网站上实现微信分享后自带缩略图.标题和描述,这里是在动态php页面中实现,这里有很大的局限 ...

  7. 服务器静态页面分享微信,JS中静态页面如何实现微信分享功能

    JS中静态页面如何实现微信分享功能 发布时间:2021-07-06 11:09:02 来源:亿速云 阅读:65 作者:小新 这篇文章主要介绍了JS中静态页面如何实现微信分享功能,具有一定借鉴价值,感兴 ...

  8. RTFM:腾讯微信公众号H5页面使用微信支付爬坑记

    一. 微信公众号支付的流程 公众号的页面会在微信环境下打开,所以默认已经有登录态.openID.AppID.AppSecret 都能拿到,申请开通商家支付之后会有 PayKey 和 mch_id (商 ...

  9. h5在微信自定义分享php,h5页面自定义微信分享

    官方文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html 开发准备:公众号绑定好需要开发的服务器域名. ...

最新文章

  1. mysql创建数据库schooldb_MySQL 创建数据表
  2. iframe中父子窗口的调用
  3. python测试用例管理_Python测试框架Pytest的常用插件测试报告
  4. 电子计算机制作探测,如何自己制作一个简易的金属探测器
  5. 24点游戏c语言程序代码,C语言实现24点游戏源代码
  6. 快速突破算法之位运算
  7. 物联网(lot)特定场景最佳实践
  8. 化学专业与计算机的联系PPT,计算机在化学中的应用ppt
  9. SAS硬盘与SATA硬盘的功能对比-SATA硬盘
  10. cmake导入so库_使用CMake引入第三方so库及头文件
  11. Git 分支合并到主干
  12. 从南极之争谈软件架构十个技巧,及成功团队具备的气质
  13. miui资源全集K60 K50 k40 k30 K20 小米14 小米13 小米12 小米11-小米6
  14. Nodejs Promise 读书笔记
  15. 与老婆大人书之‘欧阳先生’
  16. 什么是SSL安全证书
  17. Typora使用方法简单总结
  18. 淘宝API接口,获取数据
  19. 再见 Docker,是时候拥抱下一代容器工具 Containerd 了!
  20. 用 Python制作解压缩软件,其实特简单

热门文章

  1. 红米NoteX和红米NoteXpro的区别
  2. security+考试的一些整理
  3. VMWare 文件格式详解 .VMX .VMSD .VMDK
  4. PC版微信加密图片解密思路与代码实现_Python
  5. 将学生信息按照总分排名然后分别保存较高的几位和较低的几位学生信息到两个不同的文件
  6. 计算机毕业设计java的驾校驾照在线考试系统
  7. Dynamics CRM: 表单(Form)中的显示字段变成只读的几种情况
  8. 关于自己配置电脑的一点心得
  9. matlab 通过矩阵变换使图像旋转平移_28. 图像扭曲
  10. The Innovation | Volume 3 Issue 3 Live Now