微信公眾號(靜默授權和分享)


微信網頁授權

'https://open.weixin.qq.com/connect/oauth2/authorize?appid='+ appId +'&redirect_uri=' + redirectUri + '&response_type=code&scope=snsapi_base#wechat_redirect'

以snsapi_base為scope發起的網頁授權,是用來獲取進入頁面的用戶的openid的,並且是靜默授權並自動跳轉到回調頁的。用戶感知的就是直接進入了回調頁

授權回調域名:在微信公眾號請求用戶網頁授權之前,開發者需要先到公眾平台官網中的配置選項中,修改授權回調域名。用戶在網頁授權頁同意授權給公眾號后,微信會將授權數據傳給一個回調頁面,回調頁面需在此域名下,以確保安全可靠。沙盒號回調地址支持域名和ip,正式公眾號回調地址只支持域名

第一步:用戶同意授權,獲取code
1)靜默授權
https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=https://xxx/%23%2FtimelineIndex?posterId=1&response_type=code&scope=snsapi_base#wechat_redirect
2)授權后重定向的回調鏈接地址
https://xxx/?code=0719FpQV14xO2W0FHAPV12AqQV19FpQj&state=#/timelineIndex?posterId=1
code說明:code作為換取access_token的票據,每次用戶授權帶上的code將不一樣,code只能使用一次,5分鍾未被使用自動過期。

第二步:通過code換取網頁授權access_token
  公眾號可通過接口來獲取網頁授權access_token。如果網頁授權的作用域為snsapi_base,則本步驟中獲取到網頁授權access_token的同時,也獲取到了openid,snsapi_base式的網頁授權流程即到此為止。
  尤其注意:由於公眾號的secret和獲取到的access_token安全級別都非常高,必須只保存在服務器,不允許傳給客戶端。后續刷新access_token、通過access_token獲取用戶信息等步驟,也必須從服務器發起。

 

微信JS-SDK使用步驟
步驟一:綁定域名
步驟二:引入JS文件
步驟三:通過config接口注入權限驗證配置
簽名生成規則如下:參與簽名的字段包括noncestr(隨機字符串), 有效的jsapi_ticket, timestamp(時間戳), url(當前網頁的URL,不包含#及其后面部分)

const currentUrl=location.href.split('#')[0]
sdkSign({ Url:currentUrl }).then(response => {
  wx.config({
    debug: false, // 關閉調試模式,調用的所有api的返回值不會在客戶端alert出來
    appId: appId, // 必填,公眾號的唯一標識
    timestamp: response.Timestamp, // 必填,生成簽名的時間戳
    nonceStr: response.Noncestr, // 必填,生成簽名的隨機串
    signature: response.Signature,// 必填,簽名
    jsApiList: [
      'showMenuItems',
      'hideAllNonBaseMenuItem',
      'onMenuShareTimeline',
      'onMenuShareAppMessage'
    ] // 必填,需要使用的JS接口列表
  })
}).catch(error => {
  
})

步驟四:通過ready接口處理成功驗證
wx.ready(function(){
// config信息驗證后會執行ready方法,所有接口調用都必須在config接口獲得結果之后,config是一個客戶端的異步操作,所以如果需要在頁面加載時就調用相關接口,則須把相關接口放在ready函數中調用來確保正確執行。對於用戶觸發時才調用的接口,則可以直接調用,不需要放在ready函數中
});

 

微信接口-分享等

// 1、路由跳轉處理
router.beforeEach((to, from, next) => {
    wx.ready(function(){
        wx.hideAllNonBaseMenuItem(); //隱藏所有非基礎按鈕(包含分享),只有部分頁面能分享
    });
})
// 2、頁面分享
const shareData = {
  title: 'xxx',// 分享標題
  desc: 'xxx',// 分享描述(分享到朋友圈無該配置項)
  link: location.href,// 分享鏈接,該鏈接域名或路徑必須與當前頁面對應的公眾號JS安全域名一致
  imgUrl: 'xxx'// 分享圖標
}
this.$root.setShareInfo(shareData)
// 3、分享公共配置(分享朋友、朋友圈)
setShareInfo(shareData) {
  shareData.success = () => {// 用戶確認分享后執行的回調函數
    this.$toast('分享成功')
  }
  wx.ready(function(){
    wx.showMenuItems({
        menuList: ['menuItem:share:appMessage','menuItem:share:timeline'] // 要顯示的菜單項
    });
    wx.onMenuShareAppMessage(shareData);//分享給朋友
    wx.onMenuShareTimeline(shareData);//分享到朋友圈
  })
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM