開發微信小程序時,基本上都要接入微信的SDK,而微信也提供了很是多的接口供咱們去完成咱們想要的功能。微信分享功能經常是咱們在開發中常見的需求之一,本文將圍繞微信分享接口使用展開,給本身之後碰到需求是查閱的同時,也但願對須要的朋友提供幫組。html
開始以前你們能夠先讀一讀官方微信公衆號的接入文檔,畢竟官方的纔是最權威的。vue
npm install weixin-js-sdk --save
複製代碼
通常我會在src/common/js
目錄下新建weixinSDK.js
(可憑我的習慣自行建立到相應位置)。weixinSDK.js
用來封裝咱們的分享接口。ios
import {httpGet} from 'api/api' // 引入axios的http請求
import address from '../../api/apiAdd.js' // 引入請求的url路徑
import wx from 'weixin-js-sdk' // 引入微信SDK
import {commFunc} from "./util";引入工具函數
複製代碼
接入微信接口的最主要也是最重要一步步就是填寫下面這些信息,填完這些信息以後,基本就行了。npm
/**
* @param {data} 後端返回的基本配置數據
* @param {param} 頁面傳過來的數據
*/
function initAPIs(data,param) {
wx.config({
debug: false, // 開啓調試模式,調用的全部api的返回值會在客戶端alert出來,若要查看傳入的參數,能夠在pc端打開,參數信息會經過log打出,僅在pc端時纔會打印。
appId: data.appId, // 必填,公衆號的惟一標識
timestamp: data.timestamp, // 必填,生成簽名的時間戳
nonceStr: data.nonceStr, // 必填,生成簽名的隨機串
signature: data.signature,// 必填,簽名
jsApiList: param.APIs // 必填,須要使用的JS接口列表
})
...
}
複製代碼
上面這些信息一般是經過後端接口來獲取的,向後端請求數據的方法以下。axios
注意address.weChatSignCheck是封裝在apiAdd.js中的url, httpGet是api.js中的axios封裝。
小程序
/**
* @param {param} 頁面傳過來的數據
*/
function sign(param) {
var pageUrl = window.location.href
httpGet(address.weChatSignCheck + '?pageUrl=' +pageUrl).then((res) => {
param.downloadUrl = res.data.downloadUrl
initAPIs(res.data,param)
})
}
複製代碼
這裏要注意的就是url
的問題,若是url
沒有正確傳遞,後端也會返回信息,可是簽名信息會是錯誤的。完整url
指的是:'http(s)://
'部分,以及'?
'後面的GET
參數部分,但不包括'#
'hash
後面的部分。能夠經過location.href
來獲取。後端
注意: 若是你的vue
項目,路由沒有開啓history
模式,也就是你的url上面包含「#」,這個時候要從後端正確獲取簽名,就須要去掉url
上#
後面的字符。(url
去掉'#
'hash
部分,可用location.href.split('#')[0]
)微信小程序
這裏經過ready
接口處理成功驗證。固然error
接口是處理失敗驗證,這裏能夠不作處理,由於我在配置時候將debug
設爲false
。api
/**
* @param {data} 後端返回的基本配置數據
* @param {param} 頁面傳過來的數據
*/
function initAPIs(data,param) {
...
wx.ready(function () {
if (commFunc.isNotEmpty(param.callback)) {
share(param.callback)
}
})
}
複製代碼
上面代碼中commFunc.isNotEmpty()
方法主要用來判斷前臺頁面參數param.callback
是否爲空,若是部位空,則將參數傳進使用share()
方法封裝的分享模板中。bash
checkJsApi
接口是客戶端6.0.2新引入的一個預留接口,主要同來判斷當前客戶端版本是否支持指定JS
接口。
/**
* @param {data} 後端返回的基本配置數據
* @param {param} 頁面傳過來的數據
*/
function initAPIs(data,param) {
...
wx.checkJsApi({
jsApiList:param.APIs,
success: function (res) {
return res
}
})
}
複製代碼
將要分享的內容分裝成tempParam
對象,而後傳入分享方法裏。
/**
* @param {param} 頁面傳過來的數據
*/
export function share(param) {
var title = param.title
var imgUrl = param.imgUrl
var description =param.description
var url=param.url
var successMethod = param.successMethod
var tempParam = {
'title': title, // 分享標題
'desc': description, // 分享描述
'link': url, // 分享連接
'imgUrl': imgUrl, // 分享圖標
success: successMethod // 設置成功信息
};
複製代碼
根據要分享到具體哪裏,調用不一樣的方法。
//分享給朋友
wx.onMenuShareAppMessage(tempParam);
//分享給朋友圈
wx.onMenuShareTimeline(tempParam);
複製代碼
須要注意的是,原有的 wx.onMenuShareTimeline
、wx.onMenuShareAppMessage
接口,即將廢棄。請儘快遷移使用客戶端6.7.2
及JSSDK 1.4.0
以上版本支持的 wx.updateAppMessageShareData
、wx.updateTimelineShareData
接口。
//分享給朋友
wx.updateAppMessageShareData(tempParam);
//分享給朋友圈
wx.updateTimelineShareData(tempParam);
複製代碼
/**
* @param {param} 頁面傳過來的數據
*/
export function init(param) {
if (!param) {
return
}
sign(param)
}
複製代碼
這裏使用init
方法給頁面調用分享功能。
<template>
...
</template>
<script>
import { init } from 'common/js/weiXinSDK'
import wx from 'weixin-js-sdk'
let origin = window.location.origin
export default {
mode: 'history',
data() {
return {
imgUrl: '../../common/image/axa-logo.png'
}
},
created() {
init({
APIs: ['hideOptionMenu', 'hideAllNonBaseMenuItem', 'showMenuItems', 'hideMenuItems', 'onMenuShareTimeline', 'onMenuShareAppMessage'],
callback: {
'title': '微信分享',
'imgUrl': this.imgUrl,
'description': '分享',
'url': origin + '/#/produtList?isShare=1&openId=' + this.$store.state.openId,
successMethod: ''
}
})
<script>
複製代碼
上面代碼APIs
根據本身的實際場景自行配置。
weixinSDK.js完整代碼奉上:
import {httpGet} from 'api/api'
import address from '../../api/apiAdd.js'
import wx from 'weixin-js-sdk'
import {commFunc} from "./util";
// 分享內容填充和調用分享方法
export function share(param) {
var title = param.title
var imgUrl = param.imgUrl
var description =param.description
var url=param.url
var successMethod = param.successMethod
var tempParam = {
'title': title,
'desc': description,
'link': url,
'imgUrl': imgUrl,
success: successMethod
};
//分享給朋友
wx.onMenuShareAppMessage(tempParam);
//分享給朋友圈
wx.onMenuShareTimeline(tempParam);
}
// 頁面調用分享功能的方法
export function init(param) {
if (!param) {
return
}
sign(param)
}
// 向後端請求權限驗證配置的基本數據
function sign(param) {
var pageUrl = window.location.href
httpGet(address.weChatSignCheck + '?pageUrl=' +pageUrl).then((res) => {
param.downloadUrl = res.data.downloadUrl
initAPIs(res.data,param)
})
}
// 權限驗證數據填充
function initAPIs(data,param) {
wx.config({
debug: false, // 開啓調試模式,調用的全部api的返回值會在客戶端alert出來,若要查看傳入的參數,能夠在pc端打開,參數信息會經過log打出,僅在pc端時纔會打印。
appId: data.appId,
timestamp: data.timestamp,
nonceStr: data.nonceStr,
signature: data.signature,
jsApiList: param.APIs
})
// 驗證成功後執行的方法
wx.ready(function () {
if (commFunc.isNotEmpty(param.callback)) {
console.log(param.callback)
share(param.callback)
}
})
// 判斷客戶端是否支持指定js的接口
wx.checkJsApi({
jsApiList:param.APIs,
success: function (res) {
return res
}
})
}
複製代碼
但願這篇文章可讓你少踩點坑,碼字不易,若是喜歡,就給個❤❤吧。感謝你的支持。