使用微信分享,能够得到更好的传播效果。那如何利用微信公众号向好友进行信息分享呢?javascript
这里以分享 微信红包 为例,手把手教你们实现微信受权与分享。java
咱们在 https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
能够申请一个测试帐号,在测试号管理的页面中可以看到咱们appId等信息,这里有个接口配置信息修改的选项须要咱们去填写ios
这里就要麻烦后端的同窗为咱们提供URL和Token(URL是开发者用来接收微信消息和事件的接口URL。Token可由开发者任意填写,用做生成签名) 该Token会和接口URL中包含的Token进行比对,从而验证安全性。后端
在项目中须要获取用户我的信息,好比手机号和微信头像等,这里咱们须要微信网页受权才能够实现,首先在微信测试号管理中找到体验接口权限表api
点击修改进入:安全
将你网页的域名添加进去,配置完成后咱们对这个路径进行访问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等我的信息。微信
① .appid
为咱们测试号中的appid
markdown
② .redirect_uri为咱们页面路径,访问微信提供的路径会获取code值重定向到咱们页面路径(这里的url须要进行
urlEncode`处理)app
③ . 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首先找到测试号的JS接口安全域名,配置上页面使用的域名
在项目中咱们引入JS-SDk的资源,可经过 http://res.wx.qq.com/open/js/jweixin-1.4.0.js
(支持https) 或者经过模块化加载引入 import wx from 'weixin-js-sdk'
在这一步还须要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
部分debug
显示config:ok
却分享出去没效果,查看分享的方法和js-sdk
版本微信网页开发时候最主要的就是环境配置问题,细心配置避免坑点。公众号中js的安全域名可配置三个,网页受权域名为两个,开发项目须要提早留意这些点。还有要关注测试号里的公众号。这样一个红包项目所须要的功能基本完成。
整个项目开发涉及到不少端支持,以快狗打车为例,有司机端、用户端、支付等。将微信分享功能抽离成一个独立的服务,实现统一化、标准化,以便支持各个业务线使用,这也是咱们快狗打车的实战之一。