html 微信发送给朋友,H5链接分享给微信好友,显示标题、描述、缩略图

效果展示

a32f78fc945e

image.png

1.公众号设置

1.1公众号需要经过认证,具有分享接口功能

a32f78fc945e

image.png

1.2填写正确的域名(域名需要经过备案)

a32f78fc945e

image.png

1.3 保存好AppID、AppSecret、设置好ip白名单(非常重要)

a32f78fc945e

image.png

2.php代码(需要有php环境下,放到域名目录下)

2.1展示下目录结构-wxDemo

a32f78fc945e

image.png

a32f78fc945e

image.png

2.2index.html

wxDome

document.write("

/*填写路径是公众号上的安全域名*/

var baseUrl = "http://xxxxx.cn/wxDemo/index.html";

var wxData = {

"imgUrl" : 'http://xxxxx.cn/wxDemo/wx300.jpg',

"link" : baseUrl,

"title" : 'wxDemo-标题',

"desc" : 'wxDemo-描述信息!'

};

wx.config({

debug: false,

appId: signPackage.appId,

timestamp: parseInt(signPackage.timestamp),

nonceStr: signPackage.nonceStr,

signature: signPackage.signature,

jsApiList: [

'onMenuShareAppMessage',

'onMenuShareTimeline',

'updateAppMessageShareData',

'updateTimelineShareData'

]

});

wx.ready(function () {

wx.onMenuShareAppMessage({

title: wxData.title,

desc: wxData.desc,

link: wxData.link,

imgUrl: wxData.imgUrl,

type: 'link',

dataUrl: '',

success: function () {

}

});

wx.onMenuShareTimeline({

title: wxData.title,

desc: wxData.desc,

link: wxData.link,

imgUrl: wxData.imgUrl,

type: 'link',

dataUrl: '',

success: function () {

}

});

wx.updateAppMessageShareData({

title: wxData.title,

desc: wxData.desc,

link: wxData.link,

imgUrl: wxData.imgUrl,

type: 'link',

dataUrl: '',

success: function () {

}

});

wx.updateTimelineShareData({

title: wxData.title,

desc: wxData.desc,

link: wxData.link,

imgUrl: wxData.imgUrl,

type: 'link',

dataUrl: '',

success: function () {

}

});

});

2.3 signPackage.php

// 实现微信分享功能

// 通过script标签引入该文件,通过url参数传递原网页的完整url

error_reporting(0);

$queryString = $_SERVER["QUERY_STRING"];// 获取PHP后的网址参数,格式为:originUrl=...

$url = substr($queryString,10); // 截取原网页的完整url

require_once "jssdk.php";

$jssdk = new JSSDK("xxxxxx", "xxxxxx", $url);// 改为自己公众号的AppID、AppSecret

$signPackage = $jssdk->GetSignPackage();

echo "var signPackage=";

die(json_encode($signPackage));// 返回微信分享所需参数

?>

2.4 jssdk.php

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();

// 注意 URL 一定要动态获取,不能 hardcode.

$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.php"));

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.php", "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.php"));

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.php", "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;

}

}

2.5 jsapi_ticket.php

{"expire_time":1588134786,"jsapi_ticket":"kgt8ON7yVITDhtdwci0qeUFZYyjmx63aUn0jr944H7-QrUdILt6kff8cY3ujO0GNYP4dewtFw5od1LVZl2u9-g"}

2.6 access_token.php

获取access_token expires_in值为7200表示成功

将获取到的access_token写到access_token.php里

a32f78fc945e

image.png

a32f78fc945e

image.png

{"expire_time":1588134785,"access_token":"32_4MgWOCPonWbReM49JBL7VNN3RFLDFF6-7Vx04S3Pv3lIglbAvr9RNrDT14F5jKXbtNdPBee8C9QJuDql2oI5dqnn1JzTLt2a_3G3-u1DwzRmW47AHU22P1v73goT16-CKRxAOcc6wHtPwq1ZJGPaAJAOLU"}

3. 服务器

我的服务器是远程服务器(window serve 2012 r2)

服务器一定要保证可以完全写入文件(这就是我在那坑待了很久的原因)

a32f78fc945e

image.png

文件下载地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431251.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python怎么创建变量_python怎么创建变量

变量(variable)是学习python初始时&#xff0c;就会接触到的一个新的知识点&#xff0c;也是一个需要熟知的概念。python是一种动态类型语言&#xff0c;在赋值的执行中可以绑定不同类型的值&#xff0c;这个过程叫做变量赋值操作&#xff0c;赋值同时确定了变量类型。在python…

nginx 学习笔记【持续更新...】

1.如果在安装过程中出现以下错误 需要安装pcre库 解决方案&#xff1a;yum install pcre 2.如果nginx启动提示端口被占用,则停止该端口的服务再启动nginx,一般为httpd服务 解决方案&#xff1a;service httpd stop 3.nginx下php编译 ./configure --prefix/usr/local/fastphp …

python怎么放音乐_python怎么播放音乐

Python播放音乐要使用pygame模块 首先安装pygame模块&#xff1a;pip install pygame 方法实现&#xff1a;def play_music(self): filepath r"E:\music\消愁.mp3"; pygame.mixer.init() # 加载音乐 pygame.mixer.music.load(filepath) pygame.mixer.music.play(sta…

怎么用计算机打分数,电脑excel中分数怎么打出来(图解excel分数输入法)

在日常工作中&#xff0c;我们经常需要在excel中输入分数&#xff0c;默认情况下&#xff0c;当我们直接输入分数&#xff0c;比如输入“9/16” 回车后&#xff0c;会发现系统显示的却是日期数据&#xff0c;如下图所示&#xff0c;那么分数该怎么输入呢&#xff1f;今天就来和…

word 7桌面上的计算机图标是,怎么设置win7系统桌面图标都变成word图标的处理办法...

随着电脑的使用率越来越高&#xff0c;我们有时候可能会遇到win7系统桌面图标都变成word图标问题&#xff0c;如果我们遇到了win7系统桌面图标都变成word图标的问题&#xff0c;要怎么处理win7系统桌面图标都变成word图标呢&#xff1f;我们只用  双击打开桌面上的计算机文件…

python3文件的编码类型是什么_python3.x - 怎么查看某个文件的编码方式?python

问 题 python的确很赞&#xff0c;但是编码这个问题真的太尿性了。。。 现在我有一个文件&#xff0c;不论他的编码方式是什么&#xff0c;我都想把它转化成utf-8的格式。我的想法是先读取文件内容&#xff0c;保存到data变量中去&#xff0c;然后再以utf-8的格式写入文件。 但…

python源码剖析_Python源码剖析 - 对象初探

01 前言 对象是 python 中最核心的一个概念&#xff0c;在python的世界中&#xff0c;一切都是对象&#xff0c;整数、字符串、甚至类型、整数类型、字符串类型&#xff0c;都是对象。 02 什么是PyObject Python 中凡事皆对象&#xff0c;而其中 PyObject 又是所有对象的基础&a…

html点线面制作,利用HTML5绘制点线面组成的3D图形的示例

玩Canvas玩了有两三个礼拜了&#xff0c;平面的东西玩来玩去也就那样&#xff0c;所以就开始折腾3D了。因为Canvas画布终究还是平面的&#xff0c;所以要有3D就得抽象出一个Z轴。然后再把3D坐标转换成2D坐标&#xff0c;画到画布上&#xff0c;再通过旋转等变换效果来产生3D感。…

javapanel根据内部组件_[译]避免在unmounted组件上调用setState

[译]避免在unmounted组件上调用setState原文 : https://www.robinwieruch.de/react-warning-cant-call-setstate-on-an-unmounted-component很多人在开发 React 的过程中&#xff0c;会遇到下面这些警告。github上很多issue都和这些警告相关。因此&#xff0c;我想在这篇文章里…

如何写一个脚本语言_零基础小白如何学会写文案?文案写作技巧之一:如何写一个吸引读者的文案开头...

我文笔不好怎样才能够写出优质的文案&#xff1f;很多人都有这个疑问&#xff0c;包括我自己在学习新媒体运营之前&#xff0c;这也是我最大的困惑。现在是内容为王的时代&#xff0c;你的文章质量决定了你的KPI。后来我学习了文章的写作结构和技巧后&#xff0c;就能够写出一篇…

计算机硬件的维护知识,电脑放了一年开不了机 电脑硬件维护常识要点有哪些...

随着经济的发展&#xff0c;人们走到哪里都是拿着手机&#xff0c;对于家里已有电脑的&#xff0c;完全不会去用下&#xff0c;很多人都觉得手机更加方便&#xff0c;但长时间不用电脑就会导致电脑当中的一些设备出现问题&#xff0c;都知道电脑它主要就会由一些硬件与软件进行…

计算机学院寝室文明风景线活动,小猿关注 | 营造良好学风 打造和谐宿舍 ——计算机学院开展学风主题教育暨文明宿舍评选活动...

原标题&#xff1a;小猿关注 | 营造良好学风 打造和谐宿舍 ——计算机学院开展学风主题教育暨文明宿舍评选活动计算机学院记者团讯(通讯员 苏婉静 编辑 王鸿宇)12月15日晚&#xff0c;计算机学院于九号楼9201教室开展“ 营造良好学风&#xff0c;打造和谐宿舍”主题教育活动&am…

c++ 结构体初始化_STM32入门系列-使用库函数点亮LED,LED初始化函数

要点亮LED&#xff0c;需要完成LED的驱动&#xff0c; 在工程模板上新建一个led.c和led.h文件&#xff0c;将其存放在led文件夹内。这两个文件需要我们自己编写。 通常xxx.c文件用于存放编写的驱动程序&#xff0c;xxx.h文件用于存放xxx.c内的stm32头文件、管脚定义、全局变量声…

swift-UITextfield控件的基本属性设置

//1.初始化UITextField let userNameUITextField(frame: CGRectMake(0, 100, 100, 100)); //2.将文本框userName添加到当前视图中 self.view.addSubview(userName); //3.文本框默认显示文字 userName.placeholder"请输入手机号"; //4.设置字体大小 userName.fontUIFo…

vue openlayer单击地图事件循环多次执行_12道vue高频原理面试题,你能答出几道?

前言本文分享 12 道 vue 高频原理面试题,覆盖了 vue 核心实现原理,其实一个框架的实现原理一篇文章是不可能说完的,希望通过这 12 道问题,让读者对自己的 Vue 掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握 Vue ❤️1. Vue 响应式原理vue-reactive核心实现类:Obse…

大型网站架构演化发展历程

前面已经描述了大型网站系统的特点&#xff0c;而对一个大型网站系统&#xff0c;其架构也是重要的一个环节。 大型网站技术主要的挑战来自于庞大的用户、高并发以及海量的数据这三个方面。大型网站的形成就像一颗大树的成长&#xff0c;历尽长时间的磨练&#xff0c;最后枝繁叶…

dts数据库迁移工具_传统数据库迁移上云利器-ADAM

自1970年关系型数据库被提出以来&#xff0c;至今已有50年历史。但在关系型数据库领域正在发生着巨大的变化&#xff0c;首先是互联网的发展&#xff0c;使得开源数据库越来越受欢迎&#xff0c;可扩展性成为支撑业务发展的重要特性&#xff0c;比如WebScaleSQL就是几个互联网公…

python解zuobiaoxi方程_吴恩达《Machine Learning》精炼笔记 2:梯度下降与正规方程

作者&#xff1a;Peter红色石头的个人网站&#xff1a;红色石头的个人博客-机器学习、深度学习之路​www.redstonewill.com今天带来第二周课程的笔记&#xff1a;梯度下降与正规方程。主要内容&#xff1a;多维特征多变量梯度下降梯度下降法实践正规方程多维特征Multiple Featu…

计算机房按几类防雷,计算机机房防雷方案

常见问题计算机机房防雷方案2461一键分享这些微电子网络设备的普遍应用&#xff0c;使得防雷的问题显得越来越重要。由于微电子设备具有高密度、高速度、低电压、和低功耗等特性&#xff0c;这就使其对各种诸如雷电过电压、电力系统操作过电压、静电放电、电磁辐射等电磁干扰非…

webpack最新版本_webpack小结-开发环境构建优化

刚刚对我们前端项目做了一顿分析优化操作&#xff0c;因为接手时每次构建要花两分钟左右的时间&#xff0c;实在忍受不了&#xff0c;只能动手了。通过这次优化&#xff0c;重新温习了下 webpack 的一些知识。接下来会关于 webpack 展开写几篇心得&#xff1a;构建分析开发环境…