前言:有一星期没跟新博客了,最近太忙、项目赶进度就没把时间花在博客上;今天来说说所谓的微信公众号开发和填坑记录;

微信公众号:运行在微信终端的应用 (对于开发者来说比较爽的你只需考虑兼容微信浏览器,因为它是在微信内置浏览器环境下运行的)

微信公众号开发分为两部分:

  一、传统开发(前后端分离) 推荐  页面量大的时候优点就尤其突出了

  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跳转参数等问题的更多相关文章

  1. 【微信公众号开发】【8】网页授权获取用户基本信息(OAuth 2.0)

    前言: 1,在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 - 接口权限 - 网页服务 - 网页帐号 - 网页授权获取用户基本信息”的配置选项中,修改授权回调域名. 请注意,这 ...

  2. 微信公众平台开发,模板消息,网页授权,微信JS-SDK,二维码生成(4)

    微信公众平台开发,模板消息,什么是模板消息,模板消息接口指的是向用户发送重要的服务通知,只能用于符合场景的要求中去,如信用卡刷卡通知,购物成功通知等等.不支持广告营销,打扰用户的消息,模板消息类有固定 ...

  3. php 微信公众平台开发之微信群发信息

    这篇文章主要为大家详细介绍了php微信公众平台开发之微信群发信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.目的 完成在微信公众号中群发消息.这里只是完成简单的文字发送.也可以发送语音图片 ...

  4. .NET微信公众号开发-4.0公众号消息处理

    一.前言 微信公众平台的消息处理还是比较完善的,有最基本的文本消息,到图文消息,到图片消息,语音消息,视频消息,音乐消息其基本原理都是一样的,只不过所post的xml数据有所差别,在处理消息之前,我们 ...

  5. 微信公众号开发C#系列-7、消息管理-接收事件推送

    1.概述 在微信用户和公众号产生交互的过程中,用户的某些操作会使得微信服务器通过事件推送的形式通知到开发者在开发者中心处设置的服务器地址,从而开发者可以获取到该信息.其中,某些事件推送在发生后,是允许 ...

  6. 微信公众号开发 [05] 微信支付功能开发(网页JSAPI调用)

    1.微信支付的流程 如下三张手机截图,我们在微信网页端看到的支付,表面上看到的是 "点击支付按钮 - 弹出支付框 - 支付成功后出现提示页面",实际上的核心处理过程是: 点击支付按 ...

  7. 基于.net5 wtm框架、uni-app微信公众号开发一、公众号授权

    前端公众号授权 公众号设置 0.首先用IIS创建一个空目录的网站用于公众号域名验证,接着把该网站内网穿透出去,推荐用utools工具,官网:https://u.tools/ 下载安装好后搜索内网穿透并 ...

  8. 微信公众账号开发之微信登陆Oauth授权-第一篇

    我曾经在2012年的时候开始研究微信,那时微信的版本还是处于1.0,当时给朋友帮忙做一个基于微信端的web应用,官方的文档是相当少的,百度搜索出来的东西基本也没有多少实用价值,不过是在官网的基础上作了 ...

  9. 微信公众平台开发(110) 微信连Wi-Fi

    关键字:微信公众平台 微信连Wi-Fi 微信 WiFi 硬件鉴权作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/p/weixin-wifi.html 微信连Wi- ...

随机推荐

  1. 记录ok6410 jlink 命令行调试uboot

    1\启动ok6410 进入uboot命令行 2\启动JLinkGDBServer -device ARM11 3\arm-none-eabi-gdb u-boot 初始化脚本 # Connect to ...

  2. linux单项目发布流程

    1.安装python #1.安装python3.7所需要的依赖包yum -y groupinstall "Development tools"yum -y install zlib ...

  3. js 对url进行某个参数的删除,并返回url

    两种情况 1对当前页面的url进行操作 function funcUrlDel(name){ var loca = window.location; var baseUrl = loca.origin ...

  4. C++ 中的sort()排序函数用法

    sort(first_pointer,first_pointer+n,cmp) 该函数可以给数组,或者链表list.向量排序. 实现原理:sort并不是简单的快速排序,它对普通的快速排序进行了优化,此 ...

  5. ELK学习笔记之kibana关闭和进程查找

    启动kibana : nohup ./kibana & 查看启动日志 : tail -f nohup kibana  使用  ps -ef|grep kibana 是查不到进程的,主要原因大概 ...

  6. 我最喜欢的Mybatis 3.5新特性!超实用!

    Mybatis 3.5 发布有段时间了,终于支持了 Optional ,这么实用的特性,竟然还没人安利……于是本文出现了. 新特性比较简单,但非常实用,因为能大量简化恶心的判空代码. WARNING ...

  7. 自制操作系统Antz(11)——实现shell(下)命令响应

    我已经规范了系统代码风格,类似于按照linux分包,把各部分功能区分开了 Antz系统更新地址 Linux内核源码分析地址 Github项目地址 在之前的任务中,我们已经通过直接操作显卡驱动完成了简单 ...

  8. Java中日期格式(String、Date、Calendar)的相互转换

    package day20190318; import java.text.ParseException; import java.text.SimpleDateFormat; import java ...

  9. Python链接Oracle数据库

    说明:以下所需安装的所有软件版本必须跟系统一致,即系统是64位,软件就得是64位,否则会出现各种链接报错的情况. 现以64位系统,python 3.6.5  64位为例: (一)安装cx_Oracle ...

  10. CentOS7安装GUI图形界面

    本文转自centOS7下安装GUI图形界面,侵权删. 1. 在命令行下 输入下面的命令来安装Gnome包. # yum groupinstall "GNOME Desktop" & ...