你所误解的微信公众号开发、以及微信公众号网页授权、接收url跳转参数等问题
前言:有一星期没跟新博客了,最近太忙、项目赶进度就没把时间花在博客上;今天来说说所谓的微信公众号开发和填坑记录;
微信公众号:运行在微信终端的应用 (对于开发者来说比较爽的你只需考虑兼容微信浏览器,因为它是在微信内置浏览器环境下运行的)
微信公众号开发分为两部分:
一、传统开发(前后端分离) 推荐 页面量大的时候优点就尤其突出了
1. 微信首页 (即首页菜单、跳转链接、扫二维码、消息推送回复等功能) 不要慌 这些百分之90%都是后台来配置的,他们调用下微信公众平台提供的接口就ok了;为什么是后台配置呢因为交互方式是 web用户 --> 微信服务器 --> 后台服务器;
2. H5部分 就是通过菜单跳转其他的页面皆为H5的 (说白了 开发微信公众号前端主要负责的就是H5部分(就是和平常时开发移动端一模一样没区别))
二、node.js/H5 或者 php/h5 的话 那就不好意思了 以上全部都是自己搞
这里介绍的是第一种开发模式: 所谓的微信公众号开发前端就是负责移动端而已 没什么不同的
个人觉得新项目开发选好技术栈(框架、ui框架、适配、css预编译等)重中之重,能节省很多的开发时间,
小提示:个人觉得移动端适配来说选用 px2rem 是最爽的适配,没有之一; 对于传统适配 怎么转换之类统统说白白, 插件自己会帮你转换,那叫一个爽;不懂得小伙伴可以去百度百度或者留言
遇到的坑如下: (主要说和微信相关的,移动端常见的坑这里就不多说了;若开发中遇到了可以留言)
坑1、获取用户信息(openid、UnionID、昵称、头像、性别、所在城市、语言和关注时间等等)
其中除UnionID外 其他的主要通过网页授权均可获取 (网页授权具体操作将由下面的坑解释)
开发的时候获取用户信息什么都获取到了,但就差一个UnionID 怎么试都获取不了,原因在于微信公众号一定要到微信公众开发平台绑定开放才能获取到UnionID 这个坑因为没想到这个方向所以坑了蛮久的时间
坑2、通过网页授权获取 code 再通过 code 获取用户openid、UnionID
web网页端要获取这两个信息只能通过 code 获取,后台获取的话就不同
获取code 就要通过web网页授权了 : 具体流程是 在web页面通过调用 微信提供的接口 发起授权;微信在把code已回调链接的形式返回给你,这时你解析url的参数就能拿到code 再传给后台
部分代码如下:
1、不携带参数的情况
mounted () {
// 获取路劲参数 静默授权不提示用户 scope=snsapi_base 非静默scope=snsapi_userinfo 询问操作 http 即官方提供的回调链接
// AppId 为微信公众号的 id httpUrl 为微信所配置的网页授权回调 网页授权回调域名即发布服务器后的项目 配置/查看步骤 最下面的接触权限 --> 网页授权获取用户信息 --> 点击修改 跳转到页面最下面即可看到网页授权域名设置
let http = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${window.AppID}&redirect_uri=${httpUrl}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect`
window.location.href = http
},
2、携带参数即从别的地方跳转要携带参数在页面显示 (主要思路是解析出要的参数在网页授权时传给微信,微信会和code一起在传回给你)
mounted () {
// 获取路劲参数 静默授权不提示用户 scope=snsapi_base 询问操作 scope=snsapi_userinfo
this.getUrlParams(decodeURI(window.location.href))
},
methods: {
// 切割处理参数
getUrlParams (url) {
let webpageUrl = window.webpageUrl
let params = {}
let arr = {}
if (url.split('?')) {
arr = url.split('?')
}
if (arr.length <= ) {
// 微信公众号首页进入
let httpUrl = encodeURIComponent(webpageUrl)
let http = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${window.AppID}&redirect_uri=${httpUrl}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect`
window.location.href = http
} else {
// 扫描pc端二维码进入携带参数的情况
arr = arr[].split('&')
for (let i = , l = arr.length; i < l; i++) {
let a = arr[i].split('=')
params[a[]] = a[]
}
// 有参数
if (params && params.cityId) {
webpageUrl += '?'
Object.keys(params).forEach(function (key) {
webpageUrl += `${key}=` + `${params[key]}&`
})
webpageUrl = webpageUrl.substring(, webpageUrl.length - )
}
// 通过PC端扫码跳过来的情况下保存城市和小区信息
let httpUrl = encodeURIComponent(webpageUrl)
let http = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${window.AppID}&redirect_uri=${httpUrl}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect`
window.location.href = http
}
}
}
通过上述回调最终微信端会回调上面httpUrl 页面 code 一参数形式传过来 只需解析出 code 保存下来就行
mounted () {
// 切割 url 封装参数
let params = {}
let arr = url.split('?')
if (arr.length <= ) {
return params
}
arr.forEach(ls => {
ls = ls.split('&')
if (ls.length > ) {
for (let i = , l = ls.length; i < l; i++) {
let a = ls[i].split('=')
params[a[]] = a[]
}
}
})
console.log(params) // 参数对象 params.code 就是该用户的code 在传给后台 获取用户其他信息就行了
}
坑3、初次静默授权返回的code 去获取用户的 UnionID 会获取不到, 改为非静默授权 即询问用户是否登录 即可获取用户一切信息
坑4、关闭H5页面回到公众号首页 若你开启了eslint则会报错 WeixinJSBridgeReady undefind 因为这个方法只在微信浏览器中有 这时加上 eslint-disable-line 避免语法检查就行 项目在微信浏览器中没问题
methods: {
// 返回首页
goBack () {
if (typeof WeixinJSBridge === 'undefined') {
if (document.addEventListener) {
document.addEventListener('WeixinJSBridgeReady', this.onBridgeReady, false)
} else if (document.attachEvent) {
document.attachEvent('WeixinJSBridgeReady', this.onBridgeReady)
document.attachEvent('onWeixinJSBridgeReady', this.onBridgeReady)
}
} else {
WeixinJSBridge.call('closeWindow') // eslint-disable-line
}
},
onBridgeReady () {
WeixinJSBridge.call('hideOptionMenu') // eslint-disable-line
}
}
结语: 有问题欢迎留言
你所误解的微信公众号开发、以及微信公众号网页授权、接收url跳转参数等问题的更多相关文章
- 【微信公众号开发】【8】网页授权获取用户基本信息(OAuth 2.0)
前言: 1,在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名. 请注意,这 ...
- 微信公众平台开发,模板消息,网页授权,微信JS-SDK,二维码生成(4)
微信公众平台开发,模板消息,什么是模板消息,模板消息接口指的是向用户发送重要的服务通知,只能用于符合场景的要求中去,如信用卡刷卡通知,购物成功通知等等.不支持广告营销,打扰用户的消息,模板消息类有固定 ...
- php 微信公众平台开发之微信群发信息
这篇文章主要为大家详细介绍了php微信公众平台开发之微信群发信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.目的 完成在微信公众号中群发消息.这里只是完成简单的文字发送.也可以发送语音图片 ...
- .NET微信公众号开发-4.0公众号消息处理
一.前言 微信公众平台的消息处理还是比较完善的,有最基本的文本消息,到图文消息,到图片消息,语音消息,视频消息,音乐消息其基本原理都是一样的,只不过所post的xml数据有所差别,在处理消息之前,我们 ...
- 微信公众号开发C#系列-7、消息管理-接收事件推送
1.概述 在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息.其中,某些事件推送在发生后,是允许 ...
- 微信公众号开发 [05] 微信支付功能开发(网页JSAPI调用)
1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...
- 基于.net5 wtm框架、uni-app微信公众号开发一、公众号授权
前端公众号授权 公众号设置 0.首先用IIS创建一个空目录的网站用于公众号域名验证,接着把该网站内网穿透出去,推荐用utools工具,官网:https://u.tools/ 下载安装好后搜索内网穿透并 ...
- 微信公众账号开发之微信登陆Oauth授权-第一篇
我曾经在2012年的时候开始研究微信,那时微信的版本还是处于1.0,当时给朋友帮忙做一个基于微信端的web应用,官方的文档是相当少的,百度搜索出来的东西基本也没有多少实用价值,不过是在官网的基础上作了 ...
- 微信公众平台开发(110) 微信连Wi-Fi
关键字:微信公众平台 微信连Wi-Fi 微信 WiFi 硬件鉴权作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/p/weixin-wifi.html 微信连Wi- ...
随机推荐
- 帮助Bsny(乱搞做法)
帮助Bsny 题目描述 Bsny的书架乱成一团了,帮他一下吧! 他的书架上一共有n本书,我们定义混乱值是连续相同高度书本的段数.例如,如果书的高度是30,30,31,31,32,那么混乱值为3:30, ...
- 用Java实现图片验证码功能
一.什么是图片验证码? 可以参考下面这张图: 我们在一些网站注册的时候,经常需要填写以上图片的信息. 1.图片生成实体类: package com.hexianwei.graphic; import ...
- JDBC中常用的接口
JDBC常用的接口DriverManager 驱动管理器获得数据库链接 Connection 数据库链接接口 Statement 语句接口,用来静态操作SQL语句 PreparedStatement ...
- js的常见的三种密码加密方式-MD5加密、Base64加密和解密和sha1加密详解总结
写前端的时候,很多的时候是避免不了注册这一关的,但是一般的注册是没有任何的难度的,无非就是一些简单的获取用户输入的数据,然后进行简单的校验以后调用接口,将数据发送到后端,完成一个简单的注册的流程,那么 ...
- 读取控制器PHP代码文件,并分析数据存到数据库,再重新读出生成PHP文件
<?php namespace app\publicSport\controller\verify; /** * 引入基类 */ use app\publicSport\controller ...
- asp.net处理机制管道事件
自定义的托管模块HTTP模块可以向System.Web.HttpApplication对象注册下面一系列事件: AcquireRequestState 当ASP.NET运行时准备好接收当前HTTP请求 ...
- 针对多条件查询,应对 url 无用 null 值现象处理
多条件查询 应对 url 无用 null 值现象 处理例如:http://xxoo.b2b.com/orders?city_id=5&repertory_id=7&area_id=39 ...
- 1.5:Unity Render Pipeline
文章著作权归作者所有.转载请联系作者,并在文中注明出处,给出原文链接. 本系列原更新于作者的github博客,这里给出链接. 这一节主要是为上一节中没有提到的一些概念作补充. 上一节提到了Unity中 ...
- ELK学习笔记之ELK搜集OpenStack节点日志
模板来自网络,模板请不要直接复制,先放到notepad++内调整好格式,注意缩进 部署架构 控制节点作为日志服务器,存储所有 OpenStack 及其相关日志.Logstash 部署于所有节点,收集本 ...
- 清华源和中科大源都停止对Anaconda的支持之后,换腾讯云镜像的方法
直接下载下面的文件解压后放在用户文件夹下即可,windows为"C:\用户\你的用户名\",Linux为"/home/你的用户名/"即用户主目录下. 点我下载 ...