首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

微信 JSSDK 分享配置全攻略:從 Access Token 到自定義分享卡片與回調處理

     編輯:PHP 相關知識

前言:為什麼要配置 JSSDK 分享?

在微信內置瀏覽器中,網頁默認分享到「朋友圈」或「發送給好友」時,標題、圖片、描述往往是隨機抓取的(首圖 + URL),極大降低點擊率。通過微信 JSSDK 的 wx.config 授權與 wx.onMenuShareTimeline/wx.onMenuShareAppMessage 接口,開發者可精確控制分享卡片內容,並監聽成功/取消回調實現營銷邏輯(如分享後解鎖內容、統計傳播)。

完整配置流程圖解

[公眾號後台] → [JS 接口安全域名] → [獲取 AppID/AppSecret]
       ↓
[服務端] → access_token (2h 有效,全局緩存)
       ↓
[服務端] → jsapi_ticket (2h 有效,全局緩存)
       ↓
[服務端] → 簽名算法 (noncestr + timestamp + url + ticket → sha1)
       ↓
[前端頁面] → wx.config({appId, timestamp, nonceStr, signature, jsApiList})
       ↓
[前端頁面] → wx.ready(() => { onMenuShareTimeline/AppMessage 設置分享內容 + 回調 })

服務端核心代碼

1. 獲取 access_token(建議 Redis 緩存,key: wx_access_token)

function getAccessToken($appid, $secret) {
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$secret";
    $res = json_decode(file_get_contents($url), true);
    if (isset($res['errcode'])) throw new Exception($res['errmsg']);
    return $res['access_token'];
}

2. 獲取 jsapi_ticket(建議 Redis 緩存,key: wx_jsapi_ticket)

function getJsapiTicket($accessToken) {
    $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=$accessToken&type=jsapi";
    $res = json_decode(file_get_contents($url), true);
    if (isset($res['errcode'])) throw new Exception($res['errmsg']);
    return $res['ticket'];
}

3. 生成簽名(嚴格按參數名 ASCII 字典序拼接)

function generateSignature($ticket, $url) {
    $nonceStr = substr(str_shuffle('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'), 0, 16);
    $timestamp = time();
    $params = [
        'noncestr' => $nonceStr,
        'jsapi_ticket' => $ticket,
        'timestamp' => $timestamp,
        'url' => $url // 必須為當前頁面完整 URL(不含 # 及其後),動態獲取 $_SERVER['REQUEST_URI']
    ];
    ksort($params, SORT_STRING);
    $string1 = http_build_query($params, '', '&'); // 自動按 key 排序並拼接
    $signature = sha1($string1);
    return compact('nonceStr', 'timestamp', 'signature');
}

前端頁面接入

<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script>
wx.config({
    debug: false, // 開發期可設 true,PC 端 console 打印參數
    appId: '<?php echo $appId; ?>',
    timestamp: <?php echo $timestamp; ?>,
    nonceStr: '<?php echo $nonceStr; ?>',
    signature: '<?php echo $signature; ?>',
    jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage', 'updateAppMessageShareData', 'updateTimelineShareData'] // 新版推薦用 update* 接口
});

wx.ready(function() {
    var shareData = {
        title: '自定義分享標題',
        desc: '自定義分享描述,吸引用戶點擊',
        link: location.href.split('#')[0], // 分享鏈接,建議去 hash
        imgUrl: 'https://example.com/share-logo.png', // 300x300px 以上,< 300KB
        success: function() {
            // 分享成功回調:統計、解鎖獎勵、彈窗提示
            console.log('分享成功');
            // fetch('/api/share-success', {method: 'POST'});
        },
        cancel: function() {
            console.log('用戶取消分享');
        }
    };

    // 兼容舊版接口(逐漸棄用)
    wx.onMenuShareTimeline(shareData);
    wx.onMenuShareAppMessage(shareData);

    // 新版接口(推薦,iOS 14+ 必須)
    wx.updateAppMessageShareData(shareData);
    wx.updateTimelineShareData(shareData);
});

wx.error(function(res) {
    console.error('wx.config 失敗:', res.errMsg); // 簽名錯誤、域名未綁定等
});
</script>

常見坑與避雷指南

現象原因解決方案
簽名驗證失敗 (invalid signature)URL 不一致(含 #、端口、http/https)、ticket 過期、參數排序錯動態獲取當前頁完整 URL(去 #);Redis 緩存 ticket 並提前刷新;用 ksort + http_build_query
分享出去無圖/標題錯imgUrl 域名不在安全域名、圖片過大/無法訪問、HTTPS 證書問題圖片放 CDN 配置 HTTPS;尺寸 < 300KB、300x300+;公眾號後台綁定圖片域名
success 回調不觸發用戶分享到「聊天」不觸發、微信版本差異、頁面未授權僅作輔助統計,核心業務不可強依賴回調;引導用戶分享到朋友圈/好友
Android 正常 iOS 失效iOS WKWebView 對 JSSDK 權限更嚴格、需配置 WKUIDelegate使用新版 updateAppMessageShareData 接口;確保頁面 HTTPS

進階:分享統計與營銷閉環

// 後端記錄分享事件
public function recordShare($userId, $type, $targetUrl) {
    // type: timeline / appmessage
    // 寫入統計表,支持「分享 N 次解鎖」等邏輯
    // 注意:微信不保證 100% 回調,建議結合「用戶主動點擊確認」按鈕雙重保險
}

結語

微信 JSSDK 分享配置看似步驟繁瑣,實則邏輯清晰:雙 Token 緩存 → 簽名算法標準化 → 前端按需注入配置 → 新舊接口兼容 → 回調輔助業務。掌握核心簽名生成與 URL 一致性原則,配合完善的錯誤日志與監控,即可穩定實現高轉化的分享傳播功能。建議封裝為通用 SDK/Composer 包,項目間復用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved