搜尋
首頁微信小程式微信開發H5頁面自訂標題、連結、描述、圖片分享到微信朋友、朋友圈、QQ和QQ空間

最近在工作中遇到了一個功能,需要將我們手機端的H5頁面自訂分享到微信朋友、朋友圈、QQ和QQ空間。

下面是我自己百度,然後自己親身測試得到的一個方法;下面分享給大家,互相學習。

實現原理:H5的自訂分享需要用到微信公眾平台的分享接口,也就是微信網頁開發中的JSSDK,【具體的說明文檔:https://developers.weixin. qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html】使用微信的SDK中的分享接口,如下圖所示:

H5頁面自訂標題、連結、描述、圖片分享到微信朋友、朋友圈、QQ和QQ空間

注意:下面的自訂分享功能,只能是在微信的內建瀏覽器裡面進行分享操作;在其他瀏覽器中是不可以的。

# 一、註冊微信公眾號

#首先我們需要開通一個微信公眾號,公眾號類型必須是訂閱號,個人號是沒有分享介面的功能。

# 二、開通權限

當我們公眾號註冊完成之後,我們需登入微信公眾平台,去開發-》介面權限,去開通分享介面的權限【開通權限需認證企業且繳費認證】,下圖是已經認證過的情況:

H5頁面自訂標題、連結、描述、圖片分享到微信朋友、朋友圈、QQ和QQ空間

# 三、當介面權限開通之後,我們需要為公眾號碼設定一個JS介面安全域名

登入微信公眾平台,進入設定-》公眾號設定-》功能設置,填寫有效的JS介面安全網域【你的專案存取網域】,如下圖所示:

H5頁面自訂標題、連結、描述、圖片分享到微信朋友、朋友圈、QQ和QQ空間

## 四、當安全網域填寫成功之後,需要設定一個IP白名單

在點擊開發-》基本設定-》IP白名單,去填寫一個伺服器IP【你專案所在伺服器的IP位址】,具體原因下面會說到,如下圖所示:

H5頁面自訂標題、連結、描述、圖片分享到微信朋友、朋友圈、QQ和QQ空間

# 五、以上功能需要在公眾號裡面配置的步驟就全部完成了,以下開始將介面放入特定專案中

##(1)引入JS文件

在需要呼叫JS介面的頁面引入如下JS文件, (支援https):http://res.wx.qq.com/open/js/jweixin-1.4.0.js

如需進一步提升服務穩定性,當上述資源無法存取時,可改訪問:http://res2.wx.qq.com/open/js/jweixin-1.4.0.js (支援https)

##(2)透過config介面注入權限驗證配置

所有需要使用JS-SDK的頁面必須先註入組態訊息,否則將無法呼叫

wx.config({
  debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  appId: '', // 必填,公众号的唯一标识
  timestamp: , // 必填,生成签名的时间戳
  nonceStr: '', // 必填,生成签名的随机串
  signature: '',// 必填,签名
  jsApiList: [] // 必填,需要使用的JS接口列表
});

上面權限驗證的參數中,

##1. "appId",是公眾號的唯一標識,可在微信公眾平台獲得

H5頁面自訂標題、連結、描述、圖片分享到微信朋友、朋友圈、QQ和QQ空間

#2.“timestamp”,時間戳

3.“nonceStr ”,隨機字串,【長度不要超過32位元】

##4.”signature“,簽名(需要拼接參數,然後加密得到)

5.jsApiList是JS介面列表,如下圖:【連結:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#62】

H5頁面自訂標題、連結、描述、圖片分享到微信朋友、朋友圈、QQ和QQ空間

(3)產生簽名“signature”【比較複雜的一個地方】

#a.產生簽名,需要我們用到幾個參數,然後將參數拼接成字串,然後用sha1()方式進行加密。

參數有:noncestr:隨機字串【這個需要和權限驗證中的隨機字串一致】

jsapi_ticket:jsapi_ticket是公眾號用於呼叫微信JS介面的臨時票據,正常情況下,jsapi_ticket的有效期限為7200秒,透過access_token來取得。

timestamp:時間戳記【這個時間戳記同樣需要和權限驗證中的時間戳一致,單位是秒】

url:目前網頁的URL,不包含#及其後面部

#然後將所有參數拼接成一個字串,例如:

jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW×tamp=1414587457&url=http://mp.weixin.qq.com?params=value

然后对上面的字符串进行加密【sha1()函数进行加密】,得到signature。

b.现在来说说怎样获得调用微信调用JS接口的临时票据jsapi_ticke

因为jsapi_ticket的有效期为7200秒,并且需要通过access_token来获取到,所以我们先获取access_token;access_token公众号的一天获取次数有限,2000次,且有效时间为7200秒,所以我们可以考虑每次获取到的access_token放入缓存或者让数据表中,在有效期内反复调用【我是存储到数据表中的】。

下面是我自己写的一个简单类和数据表结构

H5頁面自訂標題、連結、描述、圖片分享到微信朋友、朋友圈、QQ和QQ空間

class Wxapi{
    protected $appid;
    protected $appsecret;
 
    /**
     * 构造函数
     * 2019-12-10
     */
    public function __construct($appid,$appsecret){
        $this->appid=$appid;
        $this->appsecret=$appsecret;
        $this->sessionKey_url="https://api.weixin.qq.com/sns/jscode2session";
        $this->accessToken_url="https://api.weixin.qq.com/cgi-bin/token";
        $this->jsapi_ticket_url="https://api.weixin.qq.com/cgi-bin/ticket/getticket";
        $this->qrcodeUrl="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode";
    }
 
    /**
     * 获取access_token
     * 2019-12-10
     *
     * @param string  appid         appid
     * @param string  appsecret     appsecret
     * @param string  tableName     表名(wx_account)
     * @return string token         token
     */
    public function getToken($appid,$appsecret,$tableName){
        $accountInfo = DB::table($tableName)->where('appid',$appid)->where('appsecret',$appsecret)->first();
        $now_time = time();//当前时间戳
        if(empty($accountInfo)){
            return false;
        }
        if($now_time-$accountInfo->access_token_time<7000){
            $token = $accountInfo->access_token;
            return $token;
        }else{
            $get_token_url = $this->accessToken_url."?grant_type=client_credential&appid=".$appid.&#39;&secret=&#39;.$appsecret;
            $getToken_json = curl_get($get_token_url);
            $getToken_arr = json_decode($getToken_json[&#39;output&#39;],true);
            $token = $getToken_arr[&#39;access_token&#39;];
            $arr = [
                &#39;access_token_time&#39;=>time(),
                &#39;access_token&#39;=>$token,
                &#39;updated_at&#39;=>date(&#39;Y-m-d H:i:s&#39;,time())
            ];
            $res = DB::table($tableName)->where(&#39;appid&#39;,$appid)->where(&#39;appsecret&#39;,$appsecret)->update($arr);
            if($res){
                return $token;
            }else{
                return false;
            }
        }
    }
 
    /**
     * 获取jssdk-ticket
     * 2019-12-10
     *
     * @param string  appid         appid
     * @param string  appsecret     appsecret
     * @param string  tableName     表名(wx_account)
     * @return string token         token
     */
    public function getJssdkTicket($appid,$appsecret,$tableName){
        $accountInfo = DB::table($tableName)->where(&#39;appid&#39;,$appid)->where(&#39;appsecret&#39;,$appsecret)->first();
        if(empty($accountInfo)){
            return false;
        }
        $now_time = time();//当前时间戳
        if($now_time-$accountInfo->jsapi_ticket_time<7000){
            $jsapi_ticket = $accountInfo->jsapi_ticket;
            return $jsapi_ticket;
        }else{
            $access_token=$this->getToken($appid,$appsecret,$tableName);
            if(!$access_token){
                return false;
            }
            $get_jsapi_ticket_url = $this->jsapi_ticket_url."?access_token=".$access_token."&type=jsapi";
            $getJssdkTicket_json = curl_get($get_jsapi_ticket_url);
            $getJssdkTicket_arr = json_decode($getJssdkTicket_json[&#39;output&#39;],true);
            $jsapi_ticket = $getJssdkTicket_arr[&#39;ticket&#39;];
            $arr = [
                &#39;jsapi_ticket_time&#39;=>time(),
                &#39;jsapi_ticket&#39;=>$jsapi_ticket,
                &#39;updated_at&#39;=>date(&#39;Y-m-d H:i:s&#39;,time())
            ];
            $res = DB::table($tableName)->where(&#39;appid&#39;,$appid)->where(&#39;appsecret&#39;,$appsecret)->update($arr);
            if($res){
                return $jsapi_ticket;
            }else{
                return false;
            }
        }
    }
}

这边我们的操作是,我们后端获取jsapi_ticket返回给前端,然后前端进行权限验证。

为了方便调试,我们可以在微信开发者工具中进行调试。下载链接:https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html

当页面去调用微信的JSSDK接口时,成功可以看到对应的微信返回数据。

H5頁面自訂標題、連結、描述、圖片分享到微信朋友、朋友圈、QQ和QQ空間

如果出现错误,请根据开发文档进行修改:

11H5頁面自訂標題、連結、描述、圖片分享到微信朋友、朋友圈、QQ和QQ空間

然后在手机上进行分享,测试是否成功;下面是我成功的操作。

朋友圈分享:

H5頁面自訂標題、連結、描述、圖片分享到微信朋友、朋友圈、QQ和QQ空間

微信群组分享:

H5頁面自訂標題、連結、描述、圖片分享到微信朋友、朋友圈、QQ和QQ空間

QQ分享:

1H5頁面自訂標題、連結、描述、圖片分享到微信朋友、朋友圈、QQ和QQ空間

以上是H5頁面自訂標題、連結、描述、圖片分享到微信朋友、朋友圈、QQ和QQ空間的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
h5是指什么h5是指什么Aug 02, 2023 pm 01:52 PM

H5是指HTML5,是HTML的最新版本,H5是一个功能强大的标记语言,为开发者提供了更多的选择和创造空间,它的出现推动了Web技术的发展,使得网页的交互和效果更加出色,随着H5技术的逐渐成熟和普及,相信它将会在互联网的世界中发挥越来越重要的作用。

如何区分H5,WEB前端,大前端,WEB全栈?如何区分H5,WEB前端,大前端,WEB全栈?Aug 03, 2022 pm 04:00 PM

本文带你快速区分H5、WEB前端、大前端、WEB全栈,希望对需要的朋友有所帮助!

h5如何使用positionh5如何使用positionDec 26, 2023 pm 01:39 PM

在H5中使用position属性可以通过CSS来控制元素的定位方式:1、相对定位relative,语法为“style="position: relative;”;2、绝对定位absolute,语法为“style="position: absolute;”;3、固定定位fixed,语法为“style="position: fixed;”等等。

h5怎么实现web端向上滑动加载下一页h5怎么实现web端向上滑动加载下一页Mar 11, 2024 am 10:26 AM

实现步骤:1、监听页面的滚动事件;2、判断滚动到页面底部;3、加载下一页数据;4、更新页面滚动位置即可。

总结介绍H5新晋级标签(附示例)总结介绍H5新晋级标签(附示例)Aug 03, 2022 pm 05:10 PM

​本文给大家整理介绍H5新晋级标签有哪些,希望对需要的朋友有所帮助!

vue3怎么实现H5表单验证组件vue3怎么实现H5表单验证组件Jun 03, 2023 pm 02:09 PM

效果图描述基于vue.js,不依赖其他插件或库实现;基础功能使用保持和element-ui一致,内部实现做了一些移动端差异的调整。当前构建平台使用uni-app官方脚手架构建,因为当下移动端大多情况就h6和微信小程序两种,所以一套代码跑多端十分适合技术选型。实现思路核心api:使用provide和inject,对应和。在组件中,内部用一个变量(数组)去将所有实例储存起来,同时把要传递的数据通过provide暴露出去;组件则在内部用inject去接收父组件提供过来的数据,最后把自身的属性和方法提交

页面h5和php是什么意思?(相关知识探讨)页面h5和php是什么意思?(相关知识探讨)Mar 20, 2023 pm 02:23 PM

HTML5和PHP是Web开发中常用的两种技术,前者用于构建页面布局、样式和交互,后者用于处理服务器端的业务逻辑和数据存储。下面我们来深入探讨HTML5和PHP的相关知识。

h5有哪些缓存机制h5有哪些缓存机制Nov 16, 2023 pm 01:27 PM

H5没有直接的缓存机制,但是通过结合使用Web Storage API、IndexedDB、Service Workers、Cache API和Application Cache等技术,可以实现强大的缓存功能,提高应用程序的性能、可用性和可扩展性,这些缓存机制可以根据不同的需求和应用场景进行选择和使用。详细介绍:1、Web Storage API是H5提供的一种简单等等。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能