首页 > 编程语言 >关于微信分享自定义标题,说明,图标基于PHP的功能实现

关于微信分享自定义标题,说明,图标基于PHP的功能实现

时间:2024-10-17 17:23:09浏览次数:8  
标签:自定义 url 微信 token json timestamp ticket PHP data

1.首先先从微信公众平台获取AppId和AppSecret。不会的自行查询。

比如要访问的服务器目录是www.xxxx.com。那么在这个目录下可以创建一个目录WeChat,在WeChat下分别创建文件access_token.json、config.php、jsapi_ticket.json、weChatShare.js。

2.access_token.json和jsapi_ticket.json为空文件就行,里面不要放任何东西,用来存获取到的内容。

3.config.php文件代码如下

<?php
$appId = "xxxxxxxxxxxx";//替换为你的公众号appId
$appSecret = "xxxxxxxxxxxxxxxxxxxxxxxxx";//替换为你的公众号appSecret
 
// 文件路径
$tokenFilePath = "accessToken.json";
$ticketFilePath = "jsapi_ticket.json";
 
function getFromServer($url) {
    $response = file_get_contents($url);
    return json_decode($response, true);
}
 
function getAccessToken($appId, $appSecret, $tokenFilePath) {
    if (file_exists($tokenFilePath)) {
        $data = json_decode(file_get_contents($tokenFilePath), true);
        if ($data['expire_time'] > time()) {
            return $data['access_token'];
        }
    }
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$appSecret";
    $res = getFromServer($url);
    if ($res['access_token']) {
        $data = ['access_token' => $res['access_token'], 'expire_time' => time() + 7000];
        file_put_contents($tokenFilePath, json_encode($data));
        return $res['access_token'];
    }
    return null;
}
 
function getJsApiTicket($accessToken, $ticketFilePath) {
    if (file_exists($ticketFilePath)) {
        $data = json_decode(file_get_contents($ticketFilePath), true);
        if ($data['expire_time'] > time()) {
            return $data['ticket'];
        }
    }
    $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
    $res = getFromServer($url);
    if ($res['ticket']) {
        $data = ['ticket' => $res['ticket'], 'expire_time' => time() + 7000];
        file_put_contents($ticketFilePath, json_encode($data));
        return $res['ticket'];
    }
    return null;
}
 
function generateNonceStr($length = 16) {
    return bin2hex(random_bytes($length / 2));
}
 
function getSignature($ticket, $nonceStr, $timestamp, $url) {
    $string = "jsapi_ticket=$ticket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
    return sha1($string);
}
 
// 主逻辑
$accessToken = getAccessToken($appId, $appSecret, $tokenFilePath);
$ticket = getJsApiTicket($accessToken, $ticketFilePath);
$nonceStr = generateNonceStr();
$timestamp = time();
$url = $_GET['url'] ?? 'https://www.wechat.com/404/';//替换为你的引导页面,自动获取url失败时显示此链接,建议设置为引导页
 
$signature = getSignature($ticket, $nonceStr, $timestamp, $url);
 
// 返回配置信息给前端
header('Content-Type: application/json');
echo json_encode([
    'appId' => $appId,
    'timestamp' => $timestamp,
    'noncestr' => $nonceStr,
    'signature' => $signature,
    'url' => $url
]);
?>

4.weChatShare.js代码如下:

function setupWeChatShare(shareData) {
    document.addEventListener('DOMContentLoaded', function() {
        var url = window.location.href.split('#')[0];
        fetch(`/weChat/config.php?url=${encodeURIComponent(url)}`) //路径修改
            .then(response => response.json())
            .then(data => {
                wx.config({
                    debug: false,
                    appId: data.appId,
                    timestamp: data.timestamp,
                    nonceStr: data.noncestr,
                    signature: data.signature,
                    jsApiList: [
                        'updateAppMessageShareData',
                        'updateTimelineShareData',
                        'hideMenuItems',
                        'showMenuItems'
                    ]
                });
 shareData
                wx.ready(function() {
                    wx.hideMenuItems({
                        menuList: [
                            'menuItem:copyUrl',
                            'menuItem:share:weiboApp',
                            'menuItem:share:qq',
                            'menuItem:share:QZone',
                            'menuItem:openWithQQBrowser',
                            'menuItem:openWithSafari'
                        ]
                    });
                    wx.showMenuItems({
                        menuList: [
                            'menuItem:addContact',
                            'menuItem:profile'
                        ]
                    });
 
                    // 使用传入的shareData设置分享信息
                    wx.updateAppMessageShareData(shareData);
                    wx.updateTimelineShareData(shareData);
 
                    document.getElementById('closeWechatBtn').onclick = function() {
                        wx.closeWindow();
                    };
                });
            });
    });
}

5.比如在www.xxx.com的目录下有index.html,要想实现在微信内分享这个网页时出现自定义的内容。

5.1 index.html内容如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
        <title>XX</title>
        
        <link rel="stylesheet" href="./css/weuix.css">
        <link rel="bookmark" href="./img/favicon.ico" type="image/x-icon" />
        <link rel="stylesheet" href="css/foundation.css">
        <!--<link rel="stylesheet" href="css/app.css">-->
        <script src="https://hmoob.sweet20.top/zepto.min.js"></script>
        <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
        <script src="./../weChat/weChatShare.js"></script> <!--微信分享-->
    </head>
    <body>
         <script>
        // 定义分享数据
           var shareData = {
               title: '苗语基础语法拼读',
               desc: '苗语语法、读法、写法全面详细的拼读方式,点击即可听读音,让学习更简单。',
               link: window.location.href,
               imgUrl: 'https://image.sweet20.top/logo/hmoob1.png',
               success: function() {
                   // 分享成功的回调
               }
           }; 
        // 调用分享设置函数
        setupWeChatShare(shareData);
      </script>
     <!---下面这里就是网页的内容-->
    </body>
</html>

上面其中这两个是必须引用的,<script></script>中的内容就是你网页分享时想自定义的内容。

<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
 <script src="./../weChat/weChatShare.js"></script> <!--微信分享-->
 <script>
        // 定义分享数据
           var shareData = {
               title: '苗语基础语法拼读',
               desc: '苗语语法、读法、写法全面详细的拼读方式,点击即可听读音,让学习更简单。',
               link: window.location.href,
               imgUrl: 'https://image.sweet20.top/logo/hmoob1.png',
               success: function() {
                   // 分享成功的回调
               }
           }; 
        // 调用分享设置函数
        setupWeChatShare(shareData);
      </script>

 

 

 

 

 

 

 

 

 

  存网盘

标签:自定义,url,微信,token,json,timestamp,ticket,PHP,data
From: https://www.cnblogs.com/tianming18/p/18472730

相关文章

  • [1426]基于JAVA的微信公众号运营智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的微信公众号运营智慧管理系统的设计与实现指导老师(一)选题的背景和意义选题背景与意义:在当前信息化、数字化的社会环境下,微信公众号已经成为企事业单位、商家和个体进行品牌推广、客户服务、产品营销以及用户管理......
  • UI范式:创建自定义组件
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • UI范式:页面和自定义组件生命周期
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......
  • 新建next.js项目,customize the default import alias是否要自定义默认导入别名(@/*)的选
    使用命令npxcreate-next-app@latest新建项目时,会自定义一些选项,如下图:其中自定义导入别名的选项,选择Yes或No有何区别?Wouldyouliketocustomizethedefaultimportalias(@/*)?...No/Yes一、选择"Yes"jsconfig.js文件的内容是:{"compilerOptions":{......
  • uniapp精仿微信源码,基于SumerUI和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值高,视
    uniapp精仿微信源码,基于SumerUI和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值高,视频商城小工具等,朋友圈视频号即时聊天用于视频,商城,直播,聊天,等等场景,源码分享sumer-weixin介绍uniapp精仿微信,基于SumerUI3.0和Uniapp前端框架的一款仿微信APP应用,界面漂亮颜值高,视频......
  • 毕业设计——基于微信平台的居民出行调查小程序(附源码)
    摘 要随着微信的普及,基于微信平台的居民出行调查小程序系统可以为居民调查提供方便。首先调查研究问卷调查、调查活动服务的需求和系统所包含的各种功能。接着研究该系统的架构、数据库的结构、系统运行流程等以及微信平台的接入技术和功能实现相关技术,最后对系统进行测试......
  • el-table自定义表头新
    <el-table-columnprop="address"label="333333"min-width="180":show-overflow-tooltip="true"><templateslot......
  • python+flask框架的大学校园宿舍微信报修小程序小程序 38(开题+程序+论文) 计算机毕业
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着信息技术的飞速发展和智能手机的普及,微信作为国内最大的社交平台之一,其小程序功能已成为连接线上与线下的重要桥梁。在大学校园中,宿舍......
  • 怎样才能建立一个新的微信群?这样操作方便快捷
    微信,作为中国最受欢迎的社交媒体平台之一,不仅用于个人之间的通讯,还广泛应用于工作、学习等各类场景。微信群则是一个非常实用的功能,它允许用户将一组人聚集在一起,进行便捷的交流和分享。本文将详细介绍如何在微信中创建群聊,让你轻松享受群聊的便利。一、创建微信群的准备工......
  • 2024 最新 jetbrains PhpStorm 2024.1.6 激活(亲测可用)
    注意:接下来本文分享免费激活 PhpStorm等Jetbrains全家桶工具,一直支持到最新版本2024.1.6。 1.下载安装IDEA (mac、window、linux都支持)大家直接在官网下载最新版本,登陆官网,下载最新版本2024.1.4。一步一步确定安装,然后打开这里提示输入激活码,先关闭应用!!!2.下载激活工具......