公众号静默获取用户微信基本资料
- 后台redirct访问 https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=回调地址&response_type=code&scope=snsapi_base&state=STATE
- 回调地址=回调地址?goalUrl=业务上需要访问的目标地址。回调地址需要先encode,然后与回调地址拼装后再encode
goalUrl = URLEncoder.encode(goalUrl,"utf-8");
sb.append(URLEncoder.encode(wxPayConfig.getDomain()+callbackUrl + (callbackUrl.indexOf("?") != -1 ? "&" : "?") +"goalUrl=" + goalUrl,"utf-8"));
- 微信回调callbackUrl,回调时会传入code和state
- 根据code获取openid。https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSECRET&code=回调的code&grant_type=authorization_code
- 获取access_token。https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
- 根据access_token、openid获取用户信息,https://api.weixin.qq.com/cgi-bin/user/info?access_token=前面的access_token&openid=前面的openid&lang=zh_CN
用户主动授权获取基本信息
- 获取微信的授权地址,前端页面访问。https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=回调地址&response_type=code&scope=snsapi_base&state=需要透传的值&connect_redirect=1#wechat_redirect
- 回调地址=回调地址?goalUrl=业务上需要访问的目标地址。与静默方式一样
- 微信回调,回调时会传入code、state、goalUrl
- 同时获取access_token和openid:https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSECRECT&code=回调的code&grant_type=authorization_code
- 根据access_token、openid获取用户信息。https://api.weixin.qq.com/sns/userinfo?access_token=获取的access_token&openid=获取的openid
- 在微信回调的方法中redirct回调时传回的goalUrl
微信自定义分享步骤:
- 获取全局通用的access_token:[https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=自己的appid&secret=自己的appsecrect])
- 获取jsapi_ticket([https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=前面获取的全局token&type=jsapi])
- 获取签名(见微信demo中的sign方法)
- 前端页面增加wx.config,wx.ready等函数,样例代码:
// 微信配置
$.ajax({
type: 'get',
url: '/ordershare',
data: {
shareUrl: window.location.href.split('#')[0]
},
success: function (config) {
initWechat(config.result);
},
dataType: 'json'
})
function initWechat(config) {
/*
* 注意:
* 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。
* 2. 如果发现在 Android 不能分享自定义内容,请到官网下载最新的包覆盖安装,Android 自定义分享接口需升级至 6.0.2.58 版本及以上。
* 3. 常见问题及完整 JS-SDK 文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html
*
* 开发中遇到问题详见文档“附录5-常见错误及解决办法”解决,如仍未能解决可通过以下渠道反馈:
* 邮箱地址:weixin-open@qq.com
* 邮件主题:【微信JS-SDK反馈】具体问题
* 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。
*/
wx.config({
debug: true,
appId: config.appid,
timestamp: config.timestamp,
nonceStr: config.nonceStr,
signature: config.signature,
jsApiList: [
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage',
'onMenuShareQQ',
'onMenuShareWeibo',
'onMenuShareQZone'
]
})
wx.ready(function () {
// 监听“分享给朋友”,按钮点击、自定义分享内容及分享结果接口
document.querySelector('#onMenuShareAppMessage').onclick = function () {
wx.onMenuShareAppMessage({
title: '我生平最佩服四种人', // 分享标题
desc: '看黄片不快进的人,看黄片不打飞机的人,看完黄片还没打出来的人,打完了还能把黄片看完的人。 因为这代表了人类最珍贵的四种品质:踏实,正直,坚持,执着', // 分享描述
link: location.href.split("#")[0], // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: location.href.split("#")[0] + '/file/huaji.png', // 分享图标
type: 'link', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
trigger: function (res) {
// 不要尝试在trigger中使用ajax异步请求修改本次分享的内容,因为客户端分享操作是一个同步操作,这时候使用ajax的回包会还没有返回
alert('用户点击发送给朋友')
},
success: function (res) {
// 用户确认分享后执行的回调函数
alert('已分享')
},
cancel: function (res) {
// 用户取消分享后执行的回调函数
alert('已取消')
},
fail: function (res) {
// 分享失败时执行的回调函数
alert(JSON.stringify(res))
}
})
alert('已注册获取“发送给朋友”状态事件')
}
})
wx.error(function (res) {
alert(res.errMsg)
})
}