前言

开发微信小程序时,基本上都要接入微信的SDK,而微信也提供了非常多的接口供我们去完成我们想要的功能。微信分享功能常常是我们在开发中常见的需求之一,本文将围绕微信分享接口使用展开,给自己以后碰到需求是查阅的同时,也希望对需要的朋友提供帮组。

封装微信分享接口

开始之前大家可以先读一读官方微信公众号的接入文档,毕竟官方的才是最权威的。

安装

npm install weixin-js-sdk --save

引入

一般我会在src/common/js目录下新建weixinSDK.js(可凭个人习惯自行创建到相应位置)。weixinSDK.js用来封装我们的分享接口。

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";引入工具函数

权限验证

接入微信接口的最主要也是最重要一步步就是填写下面这些信息,填完这些信息之后,基本就好了。

/**

* @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接口列表

})

...

}

上面这些信息通常是通过后端接口来获取的,向后端请求数据的方法如下。

注意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。

/**

* @param {data} 后端返回的基本配置数据

* @param {param} 页面传过来的数据

*/

function initAPIs(data,param) {

...

wx.ready(function () {

if (commFunc.isNotEmpty(param.callback)) {

share(param.callback)

}

})

}

上面代码中commFunc.isNotEmpty()方法主要用来判断前台页面参数param.callback是否为空,如果部位空,则将参数传进使用share()方法封装的分享模板中。

判断指定JS接口

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方法给页面调用分享功能。

页面调用方法

...

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: ''

}

})

上面代码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

}

})

}

结语

希望这篇文章可以让你少踩点坑,码字不易,如果喜欢,就给个❤❤吧。感谢你的支持。

vue 分享微信传参_vue 中使用微信分享接口(简单实用)相关推荐

  1. vue 事件调用 传参_vue如何在父组件指定点击事件后向子组件传递参数并调用子组件的事件?...

    可以给父组件写一个ref属性,父组件可以通过ref拿到子组件中的数据和方法(即例子中子组件的say方法),这样在父组件中就可以触发子组件的事件了.而父组件向子组件传参可以通过prop属性(即例子中的f ...

  2. vue 事件调用 传参_Vue 事件如何传递参数?

    Vue 事件如何传递参数? 事件函数参数传递: 普通参数和事件对象传递格式如下: 调用函数传参 点秋香 vue事件绑定-参数传递实例如下: vue事件绑定-参数传递 xinbiancheng.cn { ...

  3. vue 分享微信传参_vue实现微信分享链接添加动态参数的方法

    微信分享时 分享链接携带参数可能不是固定的 需要在分享的前一刻才知道 这里就是动态设置分享链接的基本写法 代码不是那么详尽 但大致流程如下 1.安装引用jssdk npm install --save ...

  4. vue单应用在ios系统中实现微信分享功能

    表示是第一次使用vue做单应用显目,也是在逐渐的摸索中~更是各种踩坑,各种填坑,打算写博客么?是因为不想写笔记了,嗯嗯 就是这么简单 进入正题. 刚开始做微信分享的这个功能的时候,脑补了官方文档微信J ...

  5. Vue过滤器的传参使用及案例

    Vue过滤器的传参使用及案例 过滤器用于一些常见的文本格式化 过滤器的第二个参数为可选 使用位置 过滤器可以用在两个地方:双花括号插值{{ }}和 v-bind 表达式** 使用方法 {{ 变量 | ...

  6. 【Vue】路由传参方式

    在使用params传递参数时,需要使用name来指定目标,否则会出现数据传输失败 vue的路由传参共有三种方式 1.query传参:不管使用path还是name来匹配路由都可以,然后通过query来传 ...

  7. Vue动态路由传参和监听路由

    Vue动态路由传参 query传参 params传参 //定义Detail路由 {path: '/detail/:id',name: 'Detail'component: () => impor ...

  8. esp和ebp在传参过程中的变化和作用

    栈帧 esp和ebp在传参过程中的作用和连续:(12条消息) 函数调用过程中的栈帧结构及其变化_AC-NEWBIE的博客-CSDN博客_函数调用栈帧结构 从汇编角度深刻理解函数调用过程 (参数如何传递 ...

  9. Android中MaterialSearchView(搜索框)的简单实用

    Android中MaterialSearchView(搜索框)的简单实用 收搜框架有好多,动画效果满炫酷的就是代码太多,没发抽取他的搜索功能,而这个却比较好用些,直接从代码里面抠出来一个简单实现搜索功 ...

最新文章

  1. C# QRCode 二维码
  2. 1996黄金一代NBA选秀
  3. 【转】电脑GPS导航软件下载,教你把笔记本做成GPS
  4. 上下定高 中间自适应_上下固定中间自适应布局
  5. Hystrix面试 - 深入 Hystrix 线程池隔离与接口限流
  6. C语言单元测试框架-cmocka示例
  7. error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCRTStartup 中被引用
  8. 微信公众号排版方法及相关素材网站
  9. 如何采用SMW0存储模板和OLED操作Excel的方式生成Excel单据
  10. 华为服务器串号官网查询系统,查询服务器序列号
  11. Cannot forward after response has been committe
  12. 《乐者为王——自由软件Linux之父李纳斯·托沃兹自述》
  13. 关于Bmob的后端云的使用---傻瓜式数据库操作
  14. 转《MCU低功耗设计》
  15. shell脚本部署俄罗斯方块
  16. excel去除小数点后面的数据,将数字取整
  17. Java8新特性----Lambda表达式详细探讨
  18. 百度知道怎样引流?如何把有共同需求的人精准地引导给我们?
  19. 通过超链接(a标签)和js代码打开链接
  20. Java、JSP网上服装店

热门文章

  1. CentOS 7.3 源码安装 OpenVAS 9
  2. SecureCRT如何与Linux虚拟机进行关联
  3. 自定义栈-pop-push-min-时间复杂度都为O(1)
  4. MATLAB遍历子文件夹及其下文件
  5. Spring Boot + BeetlSQL + H2数据库项目整合
  6. python移动窗口函数
  7. 提取指定的PDF表格保存到Excel
  8. 软件开发管理的十大工作任务(FROM 栾跃)
  9. ELK 使用4-Kafka + zookpeer
  10. 对不队—— Alpha冲刺