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

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

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

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

  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. Java EE开发技术课程第六周(jsf、facelets)

    1.jsf(java sever faces) 1.1 jsf的定义: jsf是一种用于构建java web应用程序的框架.它提供了一种以组件为中心的用户界面(UI)构建方法,从而简化了Java服务器 ...

  2. 高校表白APP-冲刺第一天

    今天我们开了第一次会议, 一.任务: 今日任务布局登录页面,注册页面,修改密码界面 明日任务完成基本的登录页面框架 二.遇到的困难: 布局文件里的一些标签,用法不清楚,页面跳转都得学习.

  3. AtomicReference

    public class AtomicReference<V> implements java.io.Serializable { private static final long se ...

  4. 融云亮相GDG谷歌女性开发者大会 揭秘IMSDK网络优化策略

    4 月 20 日,冷雨阻碍不了天津GDG谷歌女性开发者大会的热烈召开,一众开发者.架构师和科技公司创业者云集一堂,就女性开发者的技术.职场.人生多方面话题展开深入探讨.活动由GDG (谷歌开发者社区) ...

  5. java线程学习之notify方法和notifyAll方法

    notify(通知)方法,会将等待队列中的一个线程取出.比如obj.notify();那么obj的等待队列中就会有一个线程选中并且唤醒,然后被唤醒的队列就会退出等待队列.活跃线程调用等待队列中的线程时 ...

  6. 在java中使用Mysql数据库,如何在MyBatis的xml里面处理时间为Int类型的数据

    主要是将显示在页面上的数据变成日期格式,而不是相应的毫秒数,具体的做法如下: 1.首先需要在相关的xml文件里面修改时间为下面语句,其中reg_time为要修改的日期列名 FROM_UNIXTIME( ...

  7. Java基础总结3

    计算只做加法计算 减法也是加法计算出来的: 1,顺序结构: 按照编写代码的顺序从上而下逐行翻译执行: 特点:每行代码都能被执行到且被执行一次: 2,选择结构看条件: 条件为true(成立)执行代码块: ...

  8. office 2016 官方原版 (含Visio Project 等全套 )下载地址 (不含破解,非网盘下载)不用登录

    原文地址:https://www.heidoc.net/joomla/technology-science/microsoft/8-office-2016-direct-download-links ...

  9. .NET平台常用的开发组件(csdn)

    .NET平台常用的开发组件 原创 2017年02月24日 09:20:04 工欲善其事,必先利其器.学习.NET也10年有余,其优雅的编程风格,高效率的开发速度,极度简单的可扩展性,足够强大开发类库, ...

  10. SpringMVC,SpringBoot使用ajax传递对象集合/数组到后台

    假设有一个bean名叫TestPOJO. 1.使用ajax从前台传递一个对象数组/集合到后台. 前台ajax写法: var testPOJO=new Array(); //这里组装testPOJO数组 ...