Open liuxinqiong opened 6 years ago
着重声明
第三方平台
多线程的并发问题
由于公众号的 secret 和获取到的 access_token 安全级别都非常高,必须只保存在服务器,不允许传给客户端。后续刷新 access_token、通过 access_token 获取用户信息等步骤,也必须从服务器发起。
从服务器发起
为了识别用户,每个用户针对每个公众号会产生一个安全的 OpenID,如果需要在多公众号、移动应用之间做用户共通,则需前往微信开放平台,将这些公众号和应用绑定到一个开放平台账号下,绑定后,一个用户虽然对多个公众号和应用有多个不同的 OpenID,但他对所有这些同一开放平台账号下的公众号和应用,只有一个 UnionID,可以在用户管理-获取用户基本信息(UnionID 机制)文档了解详情。
微信开放平台
微信公众号能提供哪些服务呢?这是了解微信公众号能帮助我们做什么的关键!
snsapi_base
snsapi_userinfo
这是重点,个人觉得弄清楚了这个,微信开发也就算入门了,需要什么功能直接查阅文档调用 API 即可,Token 是调试接口的凭证。
之前一直搞不懂网页授权和基础授权的区别,容易弄混,今日重新看微信公众号的 WIKI,思路清晰多了!
中控服务器
如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。
微信 JS-SDK 是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。
通过使用微信 JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。
使用步骤:
后台绑定域名,填写 JS 接口安全域名
引入 JS 文件
通过 config 接口注入权限验证配置
所有需要使用 JS-SDK 的页面必须先注入配置信息,否则将无法调用(同一个 url 仅需调用一次,对于变化 url 的 SPA 的 web app 可在每次 url 变化时进行调用)
通过 ready 接口处理成功验证
通过 error 接口处理失败验证
接口调用说明
所有接口通过 wx 对象(也可使用 jWeixin 对象)来调用,参数是一个对象,除了每个接口本身需要传的参数之外,还有以下通用参数:
JS-SDK 使用权限签名算法
由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket
ASCII码从小到大排序(字典序)
更多 JS-SDK 能实现的功能:JS-SDK
在这里不做深入记录,有开发需要时自行查阅。
看 wiki 真的是索然无味的,很多功能也比较高级,当项目中有需求的时候再去看文档学习!
一些通用工具函数
function is_weixin() { var ua = navigator.userAgent.toLowerCase(); if (ua.match(/MicroMessenger/i) == "micromessenger") { return true; } else { return false; } }
笔者多次尝试,发现在 android 和 ios 上,常用的设置标题的方式会有问题,不是 android 无效就是 ios 无效,下面是来自网络的通用设置方式,亲测有效。
.factory('Title', function () { // 原生触发 return { changeTitle: function (title) { var body = document.getElementsByTagName('body')[0]; document.title = title; var iframe = document.createElement("iframe"); iframe.setAttribute("src", "/img/favicon.ico"); function listener() { setTimeout(function () { iframe.removeEventListener('load', listener); document.body.removeChild(iframe); }, 0); } iframe.addEventListener('load', listener); document.body.appendChild(iframe); } } })
由于微信会缓存静态文件,导致代码更新时不能及时反应过来,通过给文件添加版本号或者时间戳的方式来消除影响。
开发准备
着重声明
第三方平台
,然后通过公众号授权的方式,这样微信的回调同样会被转发到自己服务器,同时还不影响微信运营。多线程的并发问题
,比如 access_token,ticket 等,需要加锁保证安全,否则在高并发的情况下,极有可能出现问题。入门储备
安全性
由于公众号的 secret 和获取到的 access_token 安全级别都非常高,必须只保存在服务器,不允许传给客户端。后续刷新 access_token、通过 access_token 获取用户信息等步骤,也必须
从服务器发起
。用户识别
为了识别用户,每个用户针对每个公众号会产生一个安全的 OpenID,如果需要在多公众号、移动应用之间做用户共通,则需前往
微信开放平台
,将这些公众号和应用绑定到一个开放平台账号下,绑定后,一个用户虽然对多个公众号和应用有多个不同的 OpenID,但他对所有这些同一开放平台账号下的公众号和应用,只有一个 UnionID,可以在用户管理-获取用户基本信息(UnionID 机制)文档了解详情。微信服务
微信公众号能提供哪些服务呢?这是了解微信公众号能帮助我们做什么的关键!
snsapi_base
)和用户同意(获取基本信息,设置为snsapi_userinfo
)Token 区别
这是重点,个人觉得弄清楚了这个,微信开发也就算入门了,需要什么功能直接查阅文档调用 API 即可,Token 是调试接口的凭证。
之前一直搞不懂网页授权和基础授权的区别,容易弄混,今日重新看微信公众号的 WIKI,思路清晰多了!
中控服务器
统一获取和刷新 Access_token,其他业务逻辑服务器所使用的 access_token 均来自于该中控服务器,不应该各自去刷新,否则容易造成冲突,导致 access_token 覆盖而影响业务。基本开发
微信网页授权
如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。
两种 scope 的区别
静默授权
网页授权步骤
JS-SDK
微信 JS-SDK 是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。
通过使用微信 JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。
使用步骤:
后台绑定域名,填写 JS 接口安全域名
引入 JS 文件
通过 config 接口注入权限验证配置
所有需要使用 JS-SDK 的页面必须先注入配置信息,否则将无法调用(同一个 url 仅需调用一次,对于变化 url 的 SPA 的 web app 可在每次 url 变化时进行调用)
通过 ready 接口处理成功验证
通过 error 接口处理失败验证
接口调用说明
所有接口通过 wx 对象(也可使用 jWeixin 对象)来调用,参数是一个对象,除了每个接口本身需要传的参数之外,还有以下通用参数:
JS-SDK 使用权限签名算法
由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket
。ASCII码从小到大排序(字典序)
后,使用 URL 键值对的格式(即 key1=value1&key2=value2…)拼接成字符串 string1。这里需要注意的是所有参数名均为小写字符。对 string1 作 sha1 加密,字段名和字段值都采用原始值,不进行 URL 转义。更多 JS-SDK 能实现的功能:JS-SDK
深入开发
在这里不做深入记录,有开发需要时自行查阅。
看 wiki 真的是索然无味的,很多功能也比较高级,当项目中有需求的时候再去看文档学习!
辅助工具
一些通用工具函数
判断微信端
设置微信标题
笔者多次尝试,发现在 android 和 ios 上,常用的设置标题的方式会有问题,不是 android 无效就是 ios 无效,下面是来自网络的通用设置方式,亲测有效。
缓存问题
由于微信会缓存静态文件,导致代码更新时不能及时反应过来,通过给文件添加版本号或者时间戳的方式来消除影响。