一个PHP文件实现JS-SDK新版微信分享朋友圈,分享给好友功能

微信分享功能实现(PHP版) 该SDK提供了一些API,用于配置分享的标题、描述、链接和缩略图等信息,并通过微信自带的分享界面将内容分享到微信平台。在PHP中,我们需要先获取微信JS-SDK的签名,用于验证我们的网站身份。在分享页面的HTML代码中,我们需要引入微信JS-SDK,并将步骤 1 中获取的签名信息传递给微信JS-SDK。至此,我们已经完成了微信分享功能的实现。用户在访问分享页面时,将会看到分享的内容,并可以通过微信自带的分享界面将内容分享到微信朋友圈或好友。在上面的代码中,我们首先引入了微信JS-SDK的脚本文件,并在。 阅读详情

前言

现在网上很多关于js-sdk的文章,一搜到处都是,并且有很多不同的实现方法,解决方案,但是均已失效,因为以前的1.0版、1.4版接口都已经丢弃了。

现在已经进入1.6版接口,我们除了要引用jweixin-1.6.0.js之外,还要使用最新的API。

之前的版本是有分享成功、取消分享、分享失败的回调函数的,现在为了防止这个接口的滥用,已经取消了回调,无法检测是否已经分享成功了。

新版的分享朋友圈、分享给好友的API是:

'updateAppMessageShareData', //分享到朋友圈
'updateTimelineShareData',//分享给朋友

实现流程

1、先通过后端获取几个参数:jsapi_ticket、noncestr、timestamp、url,获取这几个参数的目的就是为了签名获得signature。
2、前端要引入官方的1.6版js文件jweixin-1.6.0.js

http://res.wx.qq.com/open/js/jweixin-1.6.0.js

3、前端初始化配置,即将后端获取到的参数都用到前端上去,并且在jsApiList这个数组当中添加你要使用的API。

 // 初始化配置
 wx.config({
    debug: true, // 正式上线后成false不在弹出调试信息
    appId: '<?php echo $appid;?>',
    timestamp: '<?php echo $timestamp;?>',
    nonceStr: '<?php echo $nonceStr;?>',
    signature: '<?php echo $signature;?>',
    jsApiList: [
      // 所有要调用的 API 都要加到这个列表中
      'updateAppMessageShareData', //分享到朋友圈
      'updateTimelineShareData',//分享给朋友
    ]
  });

4、然后调用ready函数来验证是否配置成功

wx.ready(function () {
    //实例化API
    }
})

信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看。

wx.error(function(res){    
    // config    
    alert(res);
}); 

5、实例化API

//分享到朋友圈
wx.updateTimelineShareData({
    title: '', // 分享标题
    link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
    imgUrl: '', // 分享图标
    success: function (res) {
        //分享成功
    }
})

wx.updateAppMessageShareData({ 
    title: '', // 分享标题
    desc: '', // 分享描述
    link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
    imgUrl: '', // 分享图标
    success: function (res) {
      //分享成功
    }
})

代码

<?php
// 声明页面header
header("Content-type:charset=utf-8");

// 声明APPID、APPSECRET
$appid = "填写你的APPID";
$appsecret = "填写你的APPSECRET";

// 获取access_token和jsapi_ticket
function getToken(){
   $file = file_get_contents("access_token.json",true);//读取access_token.json里面的数据
   $result = json_decode($file,true);

//判断access_token是否在有效期内,如果在有效期则获取缓存的access_token
//如果过期了则请求接口生成新的access_token并且缓存access_token.json
if (time() > $result['expires']){
       $data = array();
       $data['access_token'] = getNewToken();
       $data['expires'] = time()+7000;
       $jsonStr =  json_encode($data);
       $fp = fopen("access_token.json", "w");
       fwrite($fp, $jsonStr);
       fclose($fp);
       return $data['access_token'];
   }else{
       return $result['access_token'];
   }
}

//获取新的access_token
function getNewToken($appid,$appsecret){
   global $appid;
   global $appsecret;
   $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret."";
   $access_token_Arr =  file_get_contents($url);
   $token_jsonarr = json_decode($access_token_Arr, true);
   return $token_jsonarr["access_token"];
}

$access_token = getToken();

//缓存jsapi_ticket
function getTicket(){
   $file = file_get_contents("jsapi_ticket.json",true);//读取jsapi_ticket.json里面的数据
   $result = json_decode($file,true);

//判断jsapi_ticket是否在有效期内,如果在有效期则获取缓存的jsapi_ticket
//如果过期了则请求接口生成新的jsapi_ticket并且缓存jsapi_ticket.json
if (time() > $result['expires']){
       $data = array();
       $data['jsapi_ticket'] = getNewTicket();
       $data['expires'] = time()+7000;
       $jsonStr =  json_encode($data);
       $fp = fopen("jsapi_ticket.json", "w");
       fwrite($fp, $jsonStr);
       fclose($fp);
       return $data['jsapi_ticket'];
   }else{
       return $result['jsapi_ticket'];
   }
}

//获取新的access_token
function getNewTicket($appid,$appsecret){
   global $appid;
   global $appsecret;
   $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=".getToken()."";
   $jsapi_ticket_Arr =  file_get_contents($url);
   $ticket_jsonarr = json_decode($jsapi_ticket_Arr, true);
   return $ticket_jsonarr["ticket"];
}

$jsapiTicket = getTicket();

// 动态获取URL
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

// 生成时间戳
$timestamp = time();

// 生成nonceStr
$createNonceStr = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
str_shuffle($createNonceStr);
$nonceStr = substr(str_shuffle($createNonceStr),0,16);

// 按照 key 值 ASCII 码升序排序
$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";

// 按顺序排列按sha1加密生成字符串
$signature = sha1($string);

?>
<!DOCTYPE html>
<html lang="zh_cn">
   <head>
       <meta charset="UTF-8">
       <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
       <title>要分享的index模板页面</title>  

   </head>
   <body>
       <h3>已获得updateAppMessageShareData</h3>
       <h3>已获得updateTimelineShareData</h3>
       <h3>这两个API权限</h3>
       <h3>请点击右上角[···]体验</h3>
   </body>
</html>
   <!-- 引入微信分享js-->
   <script src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
   <script type="text/javascript">
    // 初始化配置
    wx.config({
       debug: true, // 正式上线后改成false不在弹出调试信息
       appId: '<?php echo $appid;?>',
       timestamp: '<?php echo $timestamp;?>',
       nonceStr: '<?php echo $nonceStr;?>',
       signature: '<?php echo $signature;?>',
       jsApiList: [
         // 所有要调用的 API 都要加到这个列表中
         'updateAppMessageShareData', //分享到朋友圈
         'updateTimelineShareData',//分享给朋友
       ]
     });

    // 配置完成后会调用ready函数
    wx.ready(function (res) {

     //分享到朋友圈
     wx.updateTimelineShareData({
       title: '调用成功!分享到朋友圈!', // 分享标题
       link: 'http://www.liketube.cn/res/share.php', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
       imgUrl: 'http://www.liketube.cn/res/1.jpg', // 分享图标
       success: function (res) {
         // 分享成功
       }
     })

     wx.updateAppMessageShareData({ 
       title: '调用成功!分享给好友!', // 分享标题
       desc: '微信JSSDK1.6新版分享接口成功调用!', // 分享描述
       link: 'http://www.liketube.cn/res/share.php', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
       imgUrl: 'http://www.liketube.cn/res/1.jpg', // 分享图标
       success: function (res) {
         // 分享成功
       }
     })

   });

   //错误返回信息
   wx.error(function(res){    
   // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。    
       alert(res);
   });    
   
</script>

代码说明

1、在使用这个代码之前,请把您的域名添加到已认证的公众号的JS安全域名当中,具体到文件夹,例如你的程序代码在page文件夹,那么JS安全域名为www.xxx.com/page

2、wx.config,debug: true打开可以看到调试信息,如果返回config:ok则代表成功。如果返回其他的,请在开发者工具根据错误码进行调试。看下图,三连弹。

意思是我们的配置信息OK、分享朋友圈API也OK、分享给好友API也OK。

这是在开发的时候应该开启的dubug,如果都OK,到时候上线使用,直接debug: false就不会弹出来了!

3、因为涉及到生成access_token和jsapi_ticket,并且这两个东西每天请求量有限,并且这两个东西有效期为2小时,所以这两个东西我都是缓存到服务器的,所以会在服务器生成access_token.json、jsapi_ticket.json这两个文件,每次访问页面,都会访问这两个文件,判断是否超时,如果超时,则重新获取并且缓存,如果还没超时,那就直接调用缓存。

分享朋友圈

分享给好友

体验Demo

应用

如果你的博客、论坛、以及自建页面、网站、活动页面等没有自带这方面的功能,你只需要把上面代码配置到你网站的页面上,就能轻松实现微信分享了!高档很多呢!

应用体验

请用微信扫码体验。

作者

Author:TANKING
Date:2020-2-15
Web:www.likeyunba.com
WeChat:face6009

作者:TANKING

微信分享脚本:前端开发者实现社交分享的指南 本文还有配套的精品资源,点击获取 简介:微信分享脚本是一种工具,可帮助前端开发者轻松实现微信社交分享功能。它利用微信的JS-SDK,通过两个文件(index.html和index.php)来实现。index.html负责引入JS-SDK和配置分享参数,而index.php(通常需要后端支持)用于生成安全签名。本指南将详细解释这些文件的作用,并提供配置和调用分享接口的示例代码... 阅读详情

相关推荐

jssdk实现微信分享

jssdk+php实现微信分享到到朋友圈,分享给好友,自定义标题,图像,描述。

【PHP+微信开发系列】之微信分享

【代码】微信开发之微信分享 + php。

qq_25285531的博客 762

thinkPHP微信分享接口JSSDK用法实例

本文实例讲述了thinkPHP微信分享接口JSSDK用法。分享给大家供大家参考,具体如下: 首先在数据库中添加access_token表: SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for access_token -- ---------------------------- DROP TABLE IF EXISTS `access_token`; CREATE TABLE `access_token` ( `id` int(11) NOT NULL AUTO_INCREMEN

微信开发相关:使用微信 JS-SDK 接口

通过微信 JS-SDK 接口,可以在自己写的 JS 程序中使用很多微信的功能。例如微信里的卡片式链接、拍照上传下载图片、录制播放上传下载音频、获取地理位置、使用摇一摇、扫一扫、微信支付等功能。

runsong911的博客 8717

Vitis Model Composer闪退?手把手教你用命令行启动Vivado 2021后的System Generator

本文详细解析了Vitis Model Composer闪退问题的根本原因,并提供了命令行启动Vivado 2021后System Generator的完整解决方案。从环境变量配置、组件缺失排查到权限问题处理,手把手教你通过命令行深度排错,并分享高级自动化脚本和系统优化技巧,帮助开发者高效使用Vitis Model Composer与System Generator进行HDL开发。

weixin_26905487的博客 343

经典蓝牙中的Sniff、Hold与Park模式

若主设备在Sniff Attempt窗口外发送数据,从设备无法接收,需依赖重传机制。移动时立即传输数据。:Sniff Interval=20ms,Attempt=1时隙。:传感器每2秒唤醒一次同步信标,主设备按需唤醒特定传感器采集数据。Slave进入Sniff模式:每20ms唤醒1个时隙监听数据。:设备需要短暂执行高优先级任务(如扫描其他蓝牙设备)。:无数据传输超时后,设备可能自动进入Sniff模式。:主设备通过信标唤醒从设备,或从设备主动请求退出(:平衡功耗与响应速度,适合间歇性数据传输设备。

shishuangquan111的博客 1668

php文件分享到微信朋友圈,一个PHP文件实现JS-SDK新版微信分享朋友圈,分享给好友功能...

前言现在网上很多关于js-sdk的文章,一搜到处都是,并且有很多不同的实现方法,解决方案,但是均已失效,因为以前的1.0版、1.4版接口都已经丢弃了。现在已经进入1.6版接口,我们除了要引用jweixin-1.6.0.js之外,还要使用最新的API。之前的版本是有分享成功、取消分享、分享失败的回调函数的,现在为了防止这个接口的滥用,已经取消了回调,无法检测是否已经分享成功了。新版的分享朋友圈、分享...

weixin_39647458的博客 518

保姆级教程:手把手教你下载和配置Waymo自动驾驶数据集(附百度网盘链接)

本文提供了一份详细的Waymo自动驾驶数据集下载和配置指南,特别针对国内研究者优化了数据获取方案,包括百度网盘链接和Google Cloud CLI配置。文章还涵盖了环境配置、数据处理实战、可视化分析以及进阶技巧,帮助开发者高效利用这一业界黄金标准数据集进行自动驾驶研究。

weixin_42651281的博客 349

vue分享至qq空间,新浪微博,微信朋友圈及微信好友

vue分享至qq空间,新浪微博,微信朋友圈及微信好友 本博客主要针对pc网页版分享,移动端相似之处不做参考 关于分享,对于分享到qq空间、好友及新浪微博比较简单,给一个点击事件调用一下官方接口就可以了,自己绑定一些标题、链接、图片内容就可以了 分享到qq空间及好友 qq空间: https://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?u...

weixin_44868881的博客 5536

深入理解 DDR5 Bank Group 与并行调度机制

Bank Group架构和并行调度机制,是DDR5性能跃升的核心秘密!理解它们才能写出高效调度程序,设计出性能强劲又稳定的DDR5系统。🎯记住:Bank Group不是简单的分组,而是高速并行的“魔法钥匙”,巧用它,你的DDR5设计将爆发惊人性能!

weixin_43199439的博客 298

OpenClaw赚钱实录:从“养龙虾“到可持续变现的实践指南

OpenClaw已经开源3个月有余,作为深耕AI Agent领域的博主,我亲身探索了各种基于OpenClaw的赚钱方法,也踩过坑、付出了时间与精力。现在,我将这些真金白银砸出来的实战经验,毫无保留地总结成这个专栏,分享给不想从零开始摸索的你。博主在CSDN已有7万+粉丝和1100万+阅读量,但这却是我的第一个付费专栏。正因如此,我比任何人都更珍惜这个“第一次”。我会像一个手艺人打磨作品一样,死磕每一篇文章的质量,并持续根据订阅者的反馈优化内容。也许你的疑问就是当篇文章的优化点。

冯·诺依曼 2410

微信分享源码PHP版JS-SDK接口_微信JSSDK分享功能图文实例详解

本文实例讲述了微信JSSDK分享功能。分享给大家供大家参考,具体如下:这里以微信分享到朋友圈,分享给微信好友为例为参考,进行调用测试,想添加其他的功能,自行查看开发人员文档即可工欲善其事,必先利其器,好好利用下边的帮助工具,都是腾讯给开发人员的工具1.微信开发者说明文档:点击查看2.微信WEB开发者工具:Windows 64位版本:下载地址Windows 32位版本:下载地址Mac版本:下载地址3...

weixin_36079936的博客 1387

Linux内核4.14版本——drm框架分析(1)——drm简介

本文介绍了DRM架构的发展历史、驱动框架以及简单示例,旨在帮助读者了解DRM架构的形成、功能流程实现。

phmatthaus的专栏 2536

【微信 JS-SDK开发实战】好友分享开发

纪录一个微信页面好友分享的开发过程,从 API 文档开始,到后端签名算法的实现,再到最终的效果呈现,开发过程中遇到的 BUG,做一次完整的纪录。以上就是实现微信好友分享的全过程,欢迎大家查漏补缺。

hj1043的博客 2454

【腾讯小龙虾 WorkBuddy 专栏 03】技能(Skills)制作全教程!自定义技能编写、导出分享、导入使用一步到位

🔥腾讯AI智能体WorkBuddy自定义技能全攻略 本文为零基础用户提供WorkBuddy自定义技能的完整教程,涵盖技能概念、编写规范到实操全流程。核心内容包括: 技能本质:标准化任务指令模板,可固化重复操作流程 三大价值:一键执行重复任务/跨设备共享/降低使用门槛 实操演示:以"桌面文档自动分类"为例,分步讲解编写、测试、导出 共享方案:支持单技能/批量导出,通过任意渠道传输分享 导入指南:3秒完成他人技能加载,并提供常见问题解决方案 高阶优化:增加异常处理、版本管理等提升技能普适性

AI人人懂 2878

WinCC 7.5 读取 SQL server2016 中的表格数据

环境 win10 SQL Server 2016 WinCC V7.5 SP2 1 安装SQL Server 2016 2 选择服务器名称 .\WINCC 3 建数据库

skr? 7134

微信分享朋友圈PHP+HTML代码

微信分享朋友圈php+html代码 全部下载:http://www.blowsea.com/yuanma.html php部分 tickit.php 需要自行填写: $AppId=“你的公众号id”;//填写你的公众号ID $AppSecret=“你的公众号秘钥”;//填写你的公众秘钥; <?php class sure{ public function curl_get_https($url){ $curl = curl_init(); // 启动一个CURL会话 curl_seto

qq_33265514的博客 1426

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

微信小程序分享朋友圈功能:基于EasyWeChat的带参数分享实现

你是否还在为微信小程序分享朋友圈时无法追踪用户来源而烦恼?是否希望通过分享参数精准统计不同渠道的转化效果?本文将带你使用EasyWeChat框架快速实现带参数的朋友圈分享功能,让用户分享不再盲目,数据追踪一目了然。 读完本文你将学到: - 如何配置EasyWeChat实现小程序分享签名 - 带参数分享链接的生成方法 - 分享数据的后端接收与解析 - 完整的分享效果追踪方案 ## 开发环境准备 ...

gitblog_00042的博客 1225

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【微信分享】 微信分享集成 使用weixin js sdk 兼容 旧版本 2

之前有写过一份 微信分享集成 的文章, 这次进行了重新的整理, 具体的功能有: 1、分享到朋友圈(图+一句话) 2、分享到朋友(图+标题+一句话) 3、强制显示or隐藏 右上角更多按钮 4、强制关闭当前页面 这些功能在旧版weixin(民间版,所谓微信漏洞),和新版微信sdk中都有, 所以这里针对这些功能做了一下集成和整理 由于后端环境用的是php,所以首先引用微

snow_finland的专栏 2520

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

实现H5连接分享给好友或朋友圈自定义分享内容(标题、图片、简介)的方法代码

实现H5连接分享给好友或朋友圈自定义分享内容方法首先配置公众号JS接口安全域名设置ip白名单其次配置接口配置JSSDK最后html分享页面联调常见错误invalid credential, access_token is invalid or not latest hint 首先配置公众号 JS接口安全域名 接入jssdk时,就需要配置JS接口安全域名,因此需要登录微信公众平台,在公众号设置→功能...

徊忆羽菲 6738

微信分享我的好友,分享朋友圈需要注意的问题

首先我明确的一点是,要实现微信分享我的好友,分享朋友圈需要两个步骤(1)前端js调用(2)后台参数等设置。 第一部分:前端js调用     第一部分十分简单,按照微信公众平台的手册去做,就没有问题。

dyfc3sfd3s的博客 1129

PHP实现微信分享功能

<?php //微信分享 require('../config.php'); require('./jssdk.php'); $customer_id=113; $link = mysqli_connect(DB_HOST,DB_USER, DB_PWD); mysqli_select_db($link,DB_NAME) or die('Could not select database'); $query = 'SELECT id,appid,appsecret,access_token F.

冷静 1967

php微信h5分享到朋友圈,H5页面在微信端的分享(分享到朋友圈,好友)

一、获取基本信息找到已有公众号的appid,根据这个appid和url向后端发起请求,拿到配置所需要的参数:timestamp、noncestr和signature。二、实现1、页面引入JS-SDK文件通过script标签,引入微信官网的JS-SDK文件2、基本配置wx.config({debug:false,//是否开启调试模式appId:appid,//appidtimestamp:times...

weixin_31765677的博客 952

实现微信转发朋友圈和微信好友

实现微信转发朋友圈和微信好友 <script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script> <script> //微信分享 $.ajax({ type:'GET', ...

xin的博客 468

微信好友,朋友圈分享所遇到的坑

微信分享,我们后台用的是PHP,并且再拿config时需要用当前网址来请求,但是微信在从朋友圈点过来的链接和从好友分享过来的链接时,会在后面自带参数,所以需要使用正则去去掉这些参数。$(function () { //微信分享 try { if(window.location.href.toString().matc...

少吃点肉的博客 480

微信分享朋友圈功能开发流程详解

最近做了一个微信分享朋友圈的功能记录一下流程: 第一:设置微信公众账号 登陆微信公众平台,在微信平台设置里面添加js安全接口 按照上面的说明需要下载验证文件到指定的域名根目录或者指定的文件夹下 第二:设置ip白名单 设置---公众号设置---IP白名单里设置,多个ip用回车间隔。 第三:获取保存appId和appSecret,后面会用到! 第四:开始进行开发阶段 ===...

滴水石穿 5605
上一篇: xshell连接服务器响应慢,Xshell 连接虚拟机很慢
下一篇: C#开发的自定义提示和对话框窗体 - 开源研究系列文章
守正出奇才
博客等级 码龄8年 62粉丝 65原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值