導語
使用微信分享,可以獲得更好的傳播效果。那如何利用微信公眾號向好友進行資訊分享呢?
這裡以分享 微信紅包 為例,手把手教大家實現微信授權與分享。
步驟一. 使用者資訊獲取
1. 註冊測試公眾號
我們在 https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
可以申請一個測試賬號,在測試號管理的頁面中能夠看到我們appId等資訊,這裡有個介面配置資訊修改的選項需要我們去填寫
這裡就要麻煩後端的同學為我們提供URL和Token(URL是開發者用來接收微信訊息和事件的介面URL。Token可由開發者任意填寫,用作生成簽名) 該Token會和介面URL中包含的Token進行比對,從而驗證安全性。
2. 微信網頁授權
在專案中需要獲取使用者個人資訊,比如手機號和微信頭像等,這裡我們需要微信網頁授權才可以實現,首先在微信測試號管理中找到體驗介面許可權表
點選修改進入:
將你網頁的域名新增進去,配置完成後我們對這個路徑進行訪問https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
即可拿到code
值,從而拿到openid等個人資訊。
3. 配置後路徑的修改
① .appid
為我們測試號中的appid
② .redirect_uri為我們頁面路徑,訪問微信提供的路徑會獲取code值重定向到我們頁面路徑(這裡的url需要進行
urlEncode`處理)
③ . scope
的值有兩種:
snsapi_base
為靜默授權,使用者無感知,但是隻能獲取到openid
,拿不到其他資訊。snsapi_userinfo
是彈框詢問授權,確認授權後可以獲取到openid
進而拿到暱稱、頭像等資訊
這樣我們就可以授權得到使用者資訊:
可能遇到的問題
scope
引數錯誤或沒有scope
許可權,檢查scope
引數賦值snsapi_base
或snsapi_userinfo
redirect_uri
引數錯誤,檢查網頁授權頁面域名配置問題,複製的時候空格也要注意response_type
引數錯誤,檢查url路徑是否進行了urlEncode
處理
步驟二. 微信JS-SDK使用
微信JS-SDK是微信公眾平臺 面向網頁開發者提供的基於微信內的網頁開發工具包,通過JS-SDK可以使用微信分享、支付、掃一掃等功能,這裡我們使用到了微信分享。
1. js安全域名配置
使用JS-SDK首先找到測試號的JS介面安全域名,配置上頁面使用的域名
2. 引入JS-SDK
在專案中我們引入JS-SDk的資源,可通過
http://res.wx.qq.com/open/js/jweixin-1.4.0.js
(支援https)
或者通過模組化載入引入
import wx from 'weixin-js-sdk'
3. 獲取簽名配置config
在這一步還需要RD的同學給我們支援,提供一個微信簽名的介面,詳情見下圖
拿到簽名後我們對config進行設定,config設定完成後會呼叫ready方法,我們在ready方法裡可以進行業務邏輯處理。
步驟三. 分享介面
getSignature (){ //獲取微信簽名
return new Promise((resolve, reject)=>{
Axios.get(API.getWechatSign,{
params:{
appid: appId,
url: window.location.href.split('#')[0]
}
}).then( res => {
resolve(res.data)
}).catch((err)=>{
reject(err)
})
})
},
async setWx(){
let res = await this.getSignature()
let {timestamp, nonceStr, appId, signature} = res
wx.config({
debug: true, // 開啟除錯模式,呼叫的所有api的返回值會在客戶端alert出來,若要檢視傳入的引數,可以在pc端開啟,引數資訊會通過log打出,僅在pc端時才會列印。
appId: appId, // 必填,公眾號的唯一標識
timestamp: timestamp, // 必填,生成簽名的時間戳
nonceStr: nonceStr, // 必填,生成簽名的隨機串
signature: signature, // 必填,簽名
jsApiList: ["onMenuShareTimeline", "onMenuShareAppMessage"] // 必填,需要使用的JS介面列表
});
wx.ready(() => {
wx.onMenuShareTimeline({
title: '測試分享', // 分享標題
link: window.location.href,// 分享連結,該連結域名或路徑必須與當前頁面對應的公眾號JS安全域名一致
imgUrl: 'http://icon.mobanwang.com/UploadFiles_8971/200910/20091011134333685.png',// 分享圖示
success: function() {
// 使用者點選了分享後執行的回撥函式
}
});
wx.onMenuShareAppMessage({
title: '測試分享', // 分享標題
desc: '一個測試的分享!!!', // 分享描述
link: window.location.href, // 分享連結,該連結域名或路徑必須與當前頁面對應的公眾號JS安全域名一致
imgUrl: 'http://icon.mobanwang.com/UploadFiles_8971/200910/20091011134333685.png', // 分享圖示
type: "", // 分享型別,music、video或link,不填預設為link
dataUrl: "", // 如果type是music或video,則要提供資料連結,預設為空
success: function() {
// 使用者點選了分享後執行的回撥函式
}
})
})
}
複製程式碼
這樣我們就實現一個微信分享,效果如下圖: 分享給好友
分享到朋友圈
常見問題
invalid url domain
檢查js安全域名是否正確invalid signature
這個問題範圍比較大:- 檢查簽名介面是否正確,微信提供了校驗工具
http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
config
中寫法問題,注意大小寫nonceStr
- 簽名入參的時候
url
路徑不能含有'#'hash
部分 - 分享出去的連結域名必須與公眾號js安全域名保持一致
debug
顯示config:ok
卻分享出去沒效果,檢視分享的方法和js-sdk
版本
- 檢查簽名介面是否正確,微信提供了校驗工具
寫在最後
微信網頁開發時候最主要的就是環境配置問題,細心配置避免坑點。公眾號中js的安全域名可配置三個,網頁授權域名為兩個,開發專案需要提前留意這些點。還有要關注測試號裡的公眾號。這樣一個紅包專案所需要的功能基本完成。
還想說
整個專案開發涉及到很多端支援,以快狗叫車為例,有司機端、使用者端、支付等。將微信分享功能抽離成一個獨立的服務,實現統一化、標準化,以便支援各個業務線使用,這也是我們快狗叫車的實戰之一。