微信公眾號網(wǎng)頁開發(fā)

公眾號

為識別用戶,每個用戶對每個公眾號有一個唯一的OpenID澎语,如果要在多個公眾號途事、移動應(yīng)用之間做用戶互通验懊,則需前往開放平臺,將它們綁定到同一開放平臺賬號下尸变,綁定后义图,一個用戶雖然對多個公眾號和應(yīng)用有多個不同的OpenID,但是只有一個唯一的UnionID召烂,可以通過獲取 用戶信息 中的 UnionID 來區(qū)分用戶的唯一性碱工。

公眾號主要通過 公眾號消息會話公眾號內(nèi)網(wǎng)頁 來為用戶提供服務(wù)。

公眾號分為 訂閱號奏夫、服務(wù)號企業(yè)號怕篷。

訂閱號服務(wù)號 的區(qū)別:

  1. 功能使用:服務(wù)號比訂閱號可使用的更多的功能,訂閱號只能使用大部分功能酗昼,已認(rèn)證的服務(wù)號可使用全部功能廊谓;
  2. 群發(fā)消息的能力:訂閱號每天可以發(fā)送一條群發(fā)消息,服務(wù)號為每月4次麻削;
  3. 適用群體:訂閱號適用于個人和媒體蒸痹,服務(wù)號適用于企業(yè)、政府或其他組織呛哟;

獲取access_token

access_token是公眾號的全局唯一接口調(diào)用憑據(jù)电抚,公眾號調(diào)用各接口時都需使用access_token。
這里access_token的獲取只需服務(wù)端調(diào)用微信接口獲取并存儲即可竖共,無需前端通過接口調(diào)用蝙叛。

網(wǎng)頁授權(quán)

網(wǎng)頁授權(quán)流程(詳細(xì)流程可查看 微信公眾號開發(fā)文檔),以Vue項目為例:

  1. 初次進(jìn)入頁面時先訪問微信授權(quán)頁面進(jìn)行授權(quán)公给,獲取code借帘;
<!-- App.vue -->
<script>
import { weChatConfig } from "utils/weChatConfig";

export default {
    async created() {
        // 獲取url上的參數(shù)
        const params = getUrlParams(window.location.href);

        // 通過是否已經(jīng)獲取到用戶openid,或者是url上是否攜帶了code參數(shù)來判斷是否需要進(jìn)行授權(quán)操作
        // 授權(quán)成功頁面回調(diào)時redirect_uri/?code=CODE&state=STATE會在url上攜帶相關(guān)的參數(shù)
        if (!getSessionItem(process.env.VUE_APP_STORAGE_OPENID) && !params.code) {
            // 授權(quán)回調(diào)地址需要進(jìn)行 urlEncode 處理
            const backUrl = encodeURIComponent(`${window.location.protocol}//${window.location.host}`);
            // 授權(quán)成功后可在回調(diào)地址中通過state添加參數(shù)淌铐,最多128字符
            const backParmas = JSON.stringify(params);
            
            // process.env.VUE_APP_AUTH_URL = https://open.weixin.qq.com/connect/oauth2/authorize
            // 如果無需獲取用戶信息肺然,此處使用靜默授權(quán)scope=snapi_base即可
            window.location.href = `${process.env.VUE_APP_AUTH_URL}?appid=${process.env.VUE_APP_APPID}&redirect_uri=${backUrl}&response_type=code&scope=snsapi_base&state=${backParmas}#wechat_redirect`;
            return;
        }
        /* 授權(quán)完成后可調(diào)用服務(wù)端接口獲取用戶openid */
        if (params.code) {
            // 將授權(quán)回調(diào)回來的code傳給服務(wù)端進(jìn)行openid的獲取
            const result = await Api.getOpenid({
                code: params.code
            });
            
            setSessionItem(process.env.VUE_APP_STORAGE_OPENID, result.openid); // 緩存openid
            // 調(diào)用服務(wù)端接口獲取簽名,進(jìn)行JS-SDK的初始化
            Api.getWechatConfig({
                url: window.location.host
            }).then(res=> {
                const { timestamp, nonceStr, signature } = res.data;

                weChatConfig({
                    timestamp: parseInt(timestamp),
                    nonceStr,
                    signature
                });
            });
        }
        
    }
};
</script>

<!-- wechatConig.js -->
export function weChatConfig({
  timestamp,
  nonceStr,
  signature
}) {
  wx.config({
    debug: false, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會在客戶端alert出來腿准,若要查看傳入的參數(shù)际起,可以在pc端打開,參數(shù)信息會通過log打出吐葱,僅在pc端時才會打印街望。
    appId: process.env.VUE_APP_APPID, // 必填,公眾號的唯一標(biāo)識
    timestamp, // 必填弟跑,生成簽名的時間
    nonceStr, // 必填灾前,生成簽名的隨機(jī)串
    signature, // 必填,簽名
    jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData', 'chooseWXPay'], // 必填孟辑,需要使用的JS接口列表
  });
}

注意:

  • 由于同一個開放平臺可綁定多個移動應(yīng)用哎甲,一個用戶對多個公眾號或移動應(yīng)用有多個openid蔫敲,因此openId建議使用sessionStorage進(jìn)行存儲,而不使用localStorage炭玫;
  • 測試帳號只能對關(guān)注者網(wǎng)頁授權(quán)奈嘿,因此在使用測試賬號掃碼直接進(jìn)入網(wǎng)頁進(jìn)行授權(quán)時,會出現(xiàn)未關(guān)注測試號微信登錄失敗的彈窗提示吞加,正式帳號可以對未關(guān)注者授權(quán)指么,因此可以忽略此問題;
    image.png
  1. 授權(quán)成功榴鼎,通過code換取網(wǎng)頁授權(quán)access_token和openid:
    這里通過code換取的是一個特殊的網(wǎng)頁授權(quán)access_token,與基礎(chǔ)支持的access_token不同(該access_token用于調(diào)用其他接口晚唇,區(qū)別可查看獲取基礎(chǔ)access_token)巫财,如果網(wǎng)頁授權(quán)的作用域為snsapi_base,則本步驟中獲取到網(wǎng)頁授權(quán)access_token的同時哩陕,也獲取到了openid平项。
    由于公眾號的secret和獲取到的access_token安全級別都非常高,必須只保存在服務(wù)器悍及,不允許傳給客戶端闽瓢。后續(xù)刷新access_token、通過access_token獲取用戶信息等步驟心赶,也必須從服務(wù)器發(fā)起扣讼。

測試號申請

掃碼 公眾平臺測試號申請,填寫相應(yīng)的配置:

image.png

注意:

  1. 這里的URL缨叫,需要服務(wù)端提供一個完整的接口路徑椭符;
  2. 為方便調(diào)試,JS接口安全域名支持配置本地IP地址耻姥,但訪問頁面時的端口號必須是80端口销钝,否則在頁面進(jìn)行授權(quán)時會報redirect_uri參數(shù)錯誤;
<!-- vue.config.js -->
module.exports = {
    devServer: {
        port: 80 // 指定端口號為80端口
    }
};
  1. 配置授權(quán)回調(diào)頁面域名:


    image.png

    此處同樣支持配置本地IP地址琐簇,但端口號也只能是80端口

微信公眾平臺接口調(diào)試工具

利用 微信公眾平臺接口調(diào)試工具 進(jìn)行相關(guān)的配置蒸健。

image.png

access_token由服務(wù)端提供。
image.png

微信瀏覽器緩存清理

微信瀏覽器是在webview的上層做的緩存:如果請求過了這個地址婉商,就會存在本地似忧,之后不取線上了。因此在做公眾號網(wǎng)頁開發(fā)時經(jīng)常要做瀏覽器緩存的清理:

  1. 用微信內(nèi)置瀏覽器打開這個網(wǎng)頁debugx5.qq.comhttp://debugtbs.qq.com/丈秩;
  2. 勾選相應(yīng)的緩存清理


    image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末橡娄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子癣籽,更是在濱河造成了極大的恐慌挽唉,老刑警劉巖滤祖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瓶籽,居然都是意外死亡匠童,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門塑顺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汤求,“玉大人,你說我怎么就攤上這事严拒⊙镄鳎” “怎么了?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵裤唠,是天一觀的道長挤牛。 經(jīng)常有香客問我,道長种蘸,這世上最難降的妖魔是什么墓赴? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮航瞭,結(jié)果婚禮上诫硕,老公的妹妹穿的比我還像新娘。我一直安慰自己刊侯,他們只是感情好章办,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滨彻,像睡著了一般纲菌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疮绷,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天翰舌,我揣著相機(jī)與錄音,去河邊找鬼冬骚。 笑死椅贱,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的只冻。 我是一名探鬼主播庇麦,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼喜德!你這毒婦竟也來了山橄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤舍悯,失蹤者是張志新(化名)和其女友劉穎航棱,沒想到半個月后睡雇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饮醇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年它抱,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片朴艰。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡观蓄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出祠墅,到底是詐尸還是另有隱情侮穿,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布毁嗦,位于F島的核電站亲茅,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏金矛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一勺届、第九天 我趴在偏房一處隱蔽的房頂上張望驶俊。 院中可真熱鬧,春花似錦免姿、人聲如沸饼酿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽故俐。三九已至,卻和暖如春紊婉,著一層夾襖步出監(jiān)牢的瞬間药版,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工喻犁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留槽片,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓肢础,卻偏偏與公主長得像还栓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子传轰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容