目錄
# 一、註冊微信公眾號" ># 一、註冊微信公眾號
# 二、開通權限
# 三、當介面權限開通之後,我們需要為公眾號碼設定一個JS介面安全域名
## 四、當安全網域填寫成功之後,需要設定一個IP白名單
# 五、以上功能需要在公眾號裡面配置的步驟就全部完成了,以下開始將介面放入特定專案中
首頁 微信小程式 微信開發 H5頁面自訂標題、連結、描述、圖片分享到微信朋友、朋友圈、QQ和QQ空間

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

May 07, 2020 pm 02:52 PM
h5

最近在工作中遇到了一個功能,需要將我們手機端的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

熱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.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

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如何使用position h5如何使用position Dec 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、更新頁面捲動位置即可。

vue3怎麼實作H5表單驗證元件 vue3怎麼實作H5表單驗證元件 Jun 03, 2023 pm 02:09 PM

效果圖描述基於vue.js,不依賴其他外掛程式或函式庫實作;基礎功能使用保持和element-ui一致,內部實作做了一些行動裝置差異的調整。目前建置平台使用uni-app官方腳手架構建,因為當下行動端大多情況就h6和微信小程式兩種,所以一套程式碼跑多端十分適合技術選型。實作思路核心api:使用provide和inject,對應和。在元件中,內部用一個變數(陣列)去將所有實例儲存起來,同時把要傳遞的資料透過provide暴露出去;元件則在內部用inject去接收父元件提供過來的數據,最後把自身的屬性和方法提交

總結介紹H5新晉級標籤(附範例) 總結介紹H5新晉級標籤(附範例) Aug 03, 2022 pm 05:10 PM

本文為大家整理介紹H5新晉級標籤有哪些,希望對需要的朋友有幫助!

頁面h5和php是什麼意思? (相關知識探討) 頁面h5和php是什麼意思? (相關知識探討) Mar 20, 2023 pm 02:23 PM

HTML5和PHP是Web開發中常用的兩種技術,前者用於建立頁面佈局、樣式和交互,後者用於處理伺服器端的業務邏輯和資料儲存。下面我們來深入探討HTML5和PHP的相關知識。

H5代碼:可訪問性和語義HTML H5代碼:可訪問性和語義HTML Apr 09, 2025 am 12:05 AM

H5通過語義化元素和ARIA屬性提升網頁的可訪問性和SEO效果。 1.使用、、等元素組織內容結構,提高SEO。 2.ARIA屬性如aria-label增強可訪問性,輔助技術用戶可順利使用網頁。

See all articles