前言
今天做了个分享功能,反正挺诡异的,下面就来说一说步骤
后端使用egg.js,代码如下:
'use strict'; const Subscription = require('egg').Subscription; class AccessToken extends Subscription { static get schedule() { return { interval: '2h',//2小时获取一次 type: 'all', }; } async subscribe() { const config = this.ctx.app.config.wechat_config; const url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET'.replace('APPID', config.appId) .replace('APPSECRET', config.appSecret); const res = await this.ctx.curl(url, { dataType: 'json', }); console.log(res);//accesstoken if (res.data.errcode) { return; } console.log('token ' + res.data.access_token); const jsUrl = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi'.replace('ACCESS_TOKEN', res.data.access_token); const jsRes = await this.ctx.curl(jsUrl, { dataType: 'json', }); console.log('ticket ' + jsRes.data.ticket);//ticket this.ctx.app.ticket = jsRes.data.ticket; this.ctx.app.access_token = res.data.access_token; } } module.exports = AccessToken;
async getJSsdk() { const appId = this.ctx.app.config.wechat_config.appId;//appid const ticket = this.ctx.app.ticket;//初始化时获得的ticket const nonceStr = Math.random() .toString(36) .substr(2, 15); const timestamp = parseInt(new Date().getTime() / 1000);//秒为单位的时间戳 let url = this.ctx.query.link; //前端的页面地址 url = decodeURIComponent(url);//解码 const string = 'jsapi_ticket=' + ticket + '&noncestr=' + nonceStr + '×tamp=' + timestamp + '&url=' + url; const hash = crypto.createHash('sha1'); hash.update(string); const signature = hash.digest('hex');//生成签名 this.ctx.body = { status: true, message: '获取成功', data }; };
步骤
1.在vue项目中public目录下的index.html中引入
<script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
2.在想分享的组件的mounted中加入如下代码:
//如果不创建meta标签分享出去的就会没有描述 var oMeta = document.createElement('meta'); oMeta.content = '随意的内容';//这里随便写 oMeta.name = 'keywords'; document.getElementsByTagName('head')[0].appendChild(oMeta); var oMeta1 = document.createElement('meta'); oMeta1.content = '随意的内容';//这里随便写 oMeta1.name = 'description'; document.getElementsByTagName('head')[0].appendChild(oMeta1);
3.initJSSDK方法体:
function initJSSDK() { let wechaturl = window.location.href.split('#')[0];//单页应用就获取#前面的东西 let link = encodeURIComponent(wechaturl); const jssdk = await getJSSDK(link); //给后端接口传过去当前页面的地址,注意这个地址要配置在js安全域名里 wx.ready(() => { let shareData = { title: this.detail.title, desc: this.detail.summary, link: location.href, //必须是js安全域名下的地址(分享出去的没有图片显示请检查这里的link参数) imgUrl: window.wechatImg,//随意地址的图片都行,最好是jpg的,经测试无图片大小约束 success: function () { console.log(1); }, cancel: function () { console.log(2); } }; wx.onMenuShareAppMessage(shareData);//分享给好友 wx.onMenuShareQQ(shareData);//分享给手机QQ wx.onMenuShareQZone(shareData);//分享到QQ空间 wx.onMenuShareTimeline(shareData);//分享到朋友圈 }); wx.error(function (res) { console.log(res); }); wx.config({ debug: true, appId: jssdk.appId, // 必填,公众号的唯一标识 timestamp: jssdk.timestamp, // 必填,生成签名的时间戳,精确到秒(后端返回) nonceStr: jssdk.nonceStr, // 必填,生成签名的随机串(后端返回) signature: jssdk.signature, // 必填,签名(后端返回) jsApiList: ['onMenuShareAppMessage', 'onMenuShareTimeline', 'onMenuShareQQ', 'onMenuShareQZone'] }); }
常见问题
无效的签名:可能是前端encode地址过去后,后端忘记解码了,也有可能是因为前端地址传错了或者没有encode就传过去了,后端签名算法出错的机率比较小.
还有可能是后端的ticket失效了(这个在开发过程中机率比较小)
无效的domain:前端给后端传的地址可能没有配置在js安全域名中
jssdk版本就用上面的1.4版本,同样的代码用了新版的就直接不行了,也没有任何报错。
暂时没有发现网上所说的苹果会出现问题。经测试都是好的
到此这篇关于Vue微信公众号网页分享的示例代码的文章就介绍到这了,更多相关Vue公众号网页分享内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
方案1:将公众号授权给智齿 接入效果 授权过程 授权微信公众号给智齿需要智齿客服管理员和微信公众号管理员共同参与,具体步骤如下: 第一步:智齿客服管理员进入智齿管理后台「设置-支持渠道-微信」,点击「绑定公众号」进入授权页,可见微信授权二维码 <微信公众号授权扫码页-电脑端> 第二步:由企业微信公众号管理员在微信端扫码、确认勾选授权哪些权限集给智齿并点击确认授权,完成授权后即算部署完成 <
微信公众号 微信公众号扫码授权以后,用户发往公众号的消息会转发给机器人,机器人会自动回复消息给公众号用户,同一个微信公众号同时只能绑定一个机器人,如果绑定了新的机器人,之前绑定的机器人会解除绑定。 注:微信公众号渠道接入后,仅支持微信文字,语音两种方式问答,用户在微信聊天框输入语音后,客服系统自动识别语音成文字进行答复。 只需三步接入微信公众号,自动回答公众号上的用户问题 1. 创建机器人 注册登
本文向大家介绍java微信公众号支付示例详解,包括了java微信公众号支付示例详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java微信公众号支付示例代码,供大家参考,具体内容如下 开始之前,先准备好:appid、商家号、商户密匙。 工具类: MD5Util.java SapUtils.java UnifiedOrderRequest.java UnifiedOrderResp
本文向大家介绍C#微信公众号与订阅号接口开发示例代码,包括了C#微信公众号与订阅号接口开发示例代码的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#微信公众号与订阅号接口开发示例代码。分享给大家供大家参考,具体如下: 更多关于C#相关内容感兴趣的读者可查看本站专题:《C#常见控件用法教程》、《WinForm控件用法总结》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C
本章将介绍如何在您认证的微信公众号、订阅号中集成小能在线咨询功能 微信对接准备 微信对接模式介绍 微信授权模式 微信极速模式 微信开发模式-真Token方案 微信开发模式-假Token方案
配置微信公众号有什么用? 便于通过微信接收平台的消息,并且可以在用户中心自定义接收事件类型,方便即时接收消息 配置说明 1.登录基本配置" target="_blank">https://mp.weixin.qq.com/,开发->基本配置 2.配置文件 [app.cfg] ; ;[wechat] ; ;app_id: 微信公众号的应用ID ; ;access_token: 微信公众号的应用acc