import {getBaseUrl} from './api'
const wxApi = {
/**
* [wxRegister 微信Api初始化]
* @param {Function} callback [ready回調函數]
*/
wxRegister (url,sys) {
if(sys == "ios"){
url = window.entryUrl;
}
getBaseUrl('/wechatshare?url='+url).then(res=>{
wx.config({
//在測試的時候必定要開啓這個 debug: true 只要有報錯就必定會彈出來,
debug: false, // 開啓調試模式
appId: res.appId, // 必填,公衆號的惟一標識
timestamp: res.timestamp, // 必填,生成簽名的時間戳
nonceStr: res.nonceStr, // 必填,生成簽名的隨機串
signature: res.signature, // 必填,簽名,見附錄1
jsApiList: [
'checkJsApi',//必填,檢測api是否有權限
//自定義「分享給朋友」及「分享到QQ」按鈕的分享內容
'updateAppMessageShareData',
//自定義「分享到朋友圈」及「分享到QQ空間」按鈕的分享內容
'updateTimelineShareData'
] // 必填,須要使用的JS接口列表,全部JS接口列表見附錄2
})
}),
wx.ready(() => {
//必定要保證分享的url和傳遞給後端url是一致的,若是路由發生了變化必定要獲取當前的路由
let links = location.href.split('#')[0];
let optionApp = {
title: '***', // 分享標題, 請自行替換
desc:'***',
link: links,
imgUrl: 'logo.png', // 分享圖標, 請自行替換,須要絕對路徑
}
let optionTimeline = {
title: '***', // 分享標題, 請自行替換
link: links, // 分享連接,根據自身項目決定是否須要split
imgUrl: 'logo.png', // 分享圖標, 請自行替換,須要絕對路徑
desc:'***'
}
// 微信分享給朋友
wx.updateAppMessageShareData({
title: optionApp.title, // 分享標題
link: optionApp.link, // 分享連接
imgUrl: optionApp.imgUrl, // 分享圖標
desc: optionApp.desc, // 分享圖標
success () {
},
cancel () {
// 用戶取消分享後執行的回調函數
},fail(){
// alert("分享失敗!"+JSON.stringify(s));
}
}),
// 微信分享到朋友圈
wx.updateTimelineShareData({
title: optionTimeline.title, // 分享標題
link: optionTimeline.link, // 分享連接
imgUrl: optionTimeline.imgUrl, // 分享圖標
desc:optionTimeline.desc,
success () {
// 用戶成功分享後執行的回調函數
},
cancel () {
// 用戶取消分享後執行的回調函數
},fail(){
// alert(JSON.stringify(msg));
}
})
})
wx.error(function(){
// alert(JSON.stringify(e)+'--------error')
// config信息驗證失敗會執行error函數,如簽名過時致使驗證失敗,具體錯誤信息能夠打開config的debug模式查看,也能夠在返回的res參數中查看,對於SPA能夠在這裏更新簽名。
});
},
}
export default wxApi
複製代碼
import wxapi from '../request/wxapi'
//在method定義一個方法裏進行驗證,在mounted裏面調用
methods: {
//分享前的驗證簽名,由於Android和IOS在進入微信後路由變化的邏輯是不一樣的,因此要判斷一下,IOS只能分享第一次進來時候的路由地址(IOS待驗證,後面來填坑)
checkSign(){
// window.__wxjs_is_wkwebview爲true 時 爲 IOS 設備 false時 爲 安卓 設備
if (window.__wxjs_is_wkwebview) { // IOS
if (window.entryUrl == '' || window.entryUrl == undefined) {
var url = location.href.split('#')[0]
window.entryUrl = url // 將後面的參數去除
}
wxapi.wxRegister(location.href.split('#')[0],'ios');
}else { // 安卓
setTimeout(function () {
wxapi.wxRegister(location.href.split('#')[0],'android');
}, 500);
}
},
},
mounted() {
//聽說Android手機端會有延時,就加了500的延時,看狀況大家加不加均可以
setTimeout(()=>{
this.checkSign();
},500)
}
複製代碼
其實到這裏基本就完事兒了,能夠根據微信提供的debug來進行跟蹤 我出現過兩種錯誤
(1) invaild singatrue,這個錯誤是因爲後端簽名的時候把noncestr 裏面的S寫成大寫了,通常invaild singatrue錯誤要不就是後端簽名錯誤,要不就是你給後端的url與你當前的路由不匹配
使用微信自帶的調試工具能夠很好的解決url與你當前的路由不匹配的問題
簽名錯誤可使用微信提供的在線簽名工具生成看跟後端返回的是否匹配
(2) config:ok 可是沒法調起微信的分享界面,其實最終提示config:ok的時候就說明你已經分享成功了,若是提示config:ok的話,你認爲還沒調起微信的分享界面的時候看下下面的話,但願對你有所幫助!php