微信接口判断当前js获取客户端信息版本是否支持指定JS接口的问题

微信JS SDK 接口调用详解接口,调用,使用,微信JS,SDK,使用详解,sdk接口
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
微信JS SDK 接口调用详解
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口微信JS接口汇总及使用详解
1.引入JS文件
在需要调用JS接口的页面引入如下JS文件,(支持https):http://res./open/js/jweixin-1.0.0.js
备注:支持使用 AMD/CMD 标准模块加载方法加载
2.注入配置config接口
所有需要使用JSSDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用)。
wx.config({
&debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
&appId: '', // 必填,公众号的唯一标识
&timestamp: , // 必填,生成签名的时间戳
&nonceStr: '', // 必填,生成签名的随机串
&signature: '',// 必填,签名,见附录1
&jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
3.验证通过ready接口
wx.ready(function(){
&&& // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
4.验证失败error接口
wx.error(function(res){
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
接口调用说明
所有接口通过wx对象(也可使用jWeixin对象)来调用,参数是一个对象,除了每个接口本身需要传的参数之外,还有以下通用参数:
success:接口调用成功时执行的回调函数。
fail:接口调用失败时执行的回调函数。
complete:接口调用完成时执行的回调函数,无论成功或失败都会执行。
cancel:用户点击取消时的回调函数,仅部分有用户取消操作的api才会用到。
trigger: 监听Menu中的按钮点击时触发的方法,该方法仅支持Menu中的相关接口。
以上几个函数都带有一个参数,类型为对象,其中除了每个接口本身返回的数据之外,还有一个通用属性errMsg,其值格式如下:
调用成功时:"xxx:ok" ,其中xxx为调用的接口名
用户取消时:"xxx:cancel",其中xxx为调用的接口名
调用失败时:其值为具体错误信息
判断当前客户端版本是否支持指定JS接口
wx.checkJsApi({
jsApiList: ['chooseImage'] // 需要检测的JS接口列表,所有JS接口列表见附录2,
success: function(res) {
// 以键值对的形式返回,可用的api值true,不可用为false
// 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
wx.onMenuShareTimeline({
&&& title: '', // 分享标题
&&& link: '', // 分享链接
imgUrl: '', // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
cancel: function () {
// 用户取消分享后执行的回调函数
wx.onMenuShareAppMessage({
&&& title: '', // 分享标题
&&& desc: '', // 分享描述
&&& link: '', // 分享链接
&&& imgUrl: '', // 分享图标
&&& type: '', // 分享类型,music、video或link,不填默认为link
dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
success: function () {
// 用户确认分享后执行的回调函数
cancel: function () {
// 用户取消分享后执行的回调函数
wx.onMenuShareQQ({
&&& title: '', // 分享标题
&&& desc: '', // 分享描述
&&& link: '', // 分享链接
&&& imgUrl: '' // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
cancel: function () {
// 用户取消分享后执行的回调函数
wx.onMenuShareWeibo({
&&& title: '', // 分享标题
&&& desc: '', // 分享描述
&&& link: '', // 分享链接
&&& imgUrl: '' // 分享图标
success: function () {
// 用户确认分享后执行的回调函数
cancel: function () {
// 用户取消分享后执行的回调函数
wx.chooseImage({
&&& success: function (res) {
&&&&&&& var localIds = res.localI // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片
wx.previewImage({
&&& current: '', // 当前显示的图片链接
&&& urls: [] // 需要预览的图片链接列表
wx.uploadImage({
localId: '', // 需要上传的图片的本地ID,由chooseImage接口获得
isShowProgressTips: 1// 默认为1,显示进度提示
&&& success: function (res) {
&&&&&&& var serverId = res.serverId; // 返回图片的服务器端ID
备注:可用微信下载多媒体文件接口下载上传的图片,此处获得的 serverId 即 media_id,参考文档../12/58bfcfabbd501c7cd77c19bd9cfa8354.html
wx.downloadImage({
serverId: '', // 需要下载的图片的服务器端ID,由uploadImage接口获得
isShowProgressTips: 1// 默认为1,显示进度提示
&&& success: function (res) {
&&&&&&& var localId = res.localId; // 返回图片下载后的本地ID
wx.startRecord();
wx.stopRecord({
&&& success: function (res) {
&&&&&&& var localId = res.localId;
wx.onVoiceRecordEnd({
&&// 录音时间超过一分钟没有停止的时候会执行 complete 回调
complete: function (res) {
var localId = res.localId;
wx.playVoice({
&&& localId: '' // 需要播放的音频的本地ID,由stopRecord接口获得
wx.pauseVoice({
&&& localId: '' // 需要暂停的音频的本地ID,由stopRecord接口获得
wx.stopVoice({
&&& localId: '' // 需要停止的音频的本地ID,由stopRecord接口获得
wx.onVoicePlayEnd({
&&& serverId: '', // 需要下载的音频的服务器端ID,由uploadVoice接口获得
&&& success: function (res) {
&&&&&&& var localId = res.localId; // 返回音频的本地ID
wx.uploadVoice({
localId: '', // 需要上传的音频的本地ID,由stopRecord接口获得
isShowProgressTips: 1// 默认为1,显示进度提示
&&& success: function (res) {
&&&&&&& var serverId = res.serverId; // 返回音频的服务器端ID
备注:可用微信下载多媒体文件接口下载上传的语音,此处获得的 serverId 即 media_id,参考文档../12/58bfcfabbd501c7cd77c19bd9cfa8354.html
wx.downloadVoice({
serverId: '', // 需要下载的音频的服务器端ID,由uploadVoice接口获得
isShowProgressTips: 1// 默认为1,显示进度提示
&&& success: function (res) {
&&&&&&& var localId = res.localId; // 返回音频的本地ID
wx.translateVoice({
localId: '', // 需要识别的音频的本地Id,由录音相关接口获得
isShowProgressTips: 1, // 默认为1,显示进度提示
success: function (res) {
alert(res.translateResult); // 语音识别的结果
wx.getNetworkType({
&&& success: function (res) {
&&&&&&& var networkType = res.networkT // 返回网络类型2g,3g,4g,wifi
wx.openLocation({
&&& latitude: 0, // 纬度,浮点数,范围为90 ~ -90
&&& longitude: 0, // 经度,浮点数,范围为180 ~ -180。
&&& name: '', // 位置名
&&& address: '', // 地址详情说明
&&& scale: 1, // 地图缩放级别,整形值,范围从1~28。默认为最大
infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转
wx.getLocation({
&&& timestamp: 0, // 位置签名时间戳,仅当需要兼容6.0.2版本之前时提供
&&& nonceStr: '', // 位置签名随机串,仅当需要兼容6.0.2版本之前时提供
&&& addrSign: '', // 位置签名,仅当需要兼容6.0.2版本之前时提供,详见附录4
&&& success: function (res) {
&&&&&&& var longitude = res. // 纬度,浮点数,范围为90 ~ -90
&&&&&&& var latitude = res. // 经度,浮点数,范围为180 ~ -180。
&&&&&&& var speed = res. // 速度,以米/每秒计
&&&&&&& var accuracy = res. // 位置精度
隐藏右上角菜单接口
wx.hideOptionMenu();
显示右上角菜单接口
wx.showOptionMenu();
关闭当前网页窗口接口
wx.closeWindow();
批量隐藏功能按钮接口
wx.hideMenuItems({
&&& menuList: [] // 要隐藏的菜单项,所有menu项见附录3
批量显示功能按钮接口
wx.showMenuItems({
&&& menuList: [] // 要显示的菜单项,所有menu项见附录3
隐藏所有非基础按钮接口
wx.hideAllNonBaseMenuItem();
显示所有功能按钮接口
wx.showAllNonBaseMenuItem();
微信扫一扫
调起微信扫一扫接口
wx.scanQRCode({
desc: 'scanQRCode desc',
needResult: 0, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
success: function () {
var result = res.resultS // 当needResult 为 1 时,扫码返回的结果
wx.editAddress(
&&& timestamp: 0, // 位置签名时间戳,仅当需要兼容6.0.2版本之前时提供
&&& nonceStr: '', // 位置签名随机串,仅当需要兼容6.0.2版本之前时提供
&&& addrSign: '', // 位置签名,仅当需要兼容6.0.2版本之前时提供,详见附录4
&&& success: function (res) {
&&&&&&& var userName = res.userN // 收货人姓名
&&&&&&& var telNumber = res.telN // 收货人电话
&&&&&&& var postalCode = res.postalC // 邮编
&&&&&&& var provinceName = res.provinceN // 国标收货地址第一级地址
&&&&&&& var cityName = res.cityN // 国标收货地址第二级地址
&&&&&&& var countryName = res.countryN // 国标收货地址第三级地址
&&&&&&& var address = res. // 详细收货地址信息
&&&&&&& var nationalCode = res.nationalC // 收货地址国家码
wx.getLatestAddress({
&&& timestamp: 0, // 位置签名时间戳,仅当需要兼容6.0.2版本之前时提供
&&& nonceStr: '', // 位置签名随机串,仅当需要兼容6.0.2版本之前时提供
&&& addrSign: '', // 位置签名,仅当需要兼容6.0.2版本之前时提供,详见附录4
&&& success: function (res) {
&&&&&&& var userName = res.userN // 收货人姓名
&&&&&&& var telNumber = res.telN // 收货人电话
&&&&&&& var postalCode = res.postalC // 邮编
&&&&&&& var provinceName = res.provinceN // 国标收货地址第一级地址
&&&&&&& var cityName = res.cityN // 国标收货地址第二级地址
&&&&&&& var countryName = res.countryN // 国标收货地址第三级地址
&&&&&&& var address = res. // 详细收货地址信息
&&&&&&& var nationalCode = res.nationalC // 收货地址国家码
wx.openProductSpecificView({
productId: '', // 商品id
viewType: '' // 0.默认值,普通商品详情页1.扫一扫商品详情页2.小店商品详情页
wx.chooseCard({
&&& shopId: '', // 门店Id
&&& cardType: '', // 卡券类型
&&& cardId: '', // 卡券Id
&&& timeStamp: 0, // 卡券签名时间戳
&&& nonceStr: '', // 卡券签名随机串
&&& cardSign: '', // 卡券签名,详见附录6
&&& success: function (res) {
&&&&&&& var cardList= res.cardL // 用户选中的卡券列表信息
wx.addCard({
cardList: [{
cardId: '',
cardExt: ''
}], // 需要添加的卡券列表
&&& success: function (res) {
&&&&&&& var cardList = res.cardL // 添加的卡券列表信息
wx.openCard({
cardList: [{
cardId: '',
}]// 需要打开的卡券列表
wx.chooseWXPay({
timestamp: 0, // 支付签名时间戳
noncestr: '', // 支付签名随机串
package: '', // 订单详情扩展字符串,详见附录5
paySign: '', // 支付签名,详见附录5
顶一下(0) 踩一下(0)
热门标签:微信JS SDK 接口调用详解_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
微信JS SDK 接口调用详解
最​新05​年月​微​信​J​S​ ​接​口​调​用
阅读已结束,如果下载本文需要使用
想免费下载本文?
你可能喜欢微信公众平台开发(106) 网页获取用户地理位置
& 在这篇微信公众平台开发教程中,我们将介绍如何在网页中获取用户的地理位置信息。
本文分为以下二个部分:
生成JS-SDK权限验证签名
使用地理位置接口获取坐标
一、微信JS-SDK
1. 获得Access Token
access token的获得方法在前面有介绍,详情见&微信公众平台开发(26) ACCESS TOKEN
2. 获取jsapi_ticket
生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。
参考以下文档获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token):
用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket),接口地址如下
https://api./cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
成功返回如下JSON:
&errcode&:0,
&errmsg&:&ok&,
&ticket&:&bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA&,
&expires_in&:7200
获得jsapi_ticket之后,就可以生成JS-SDK权限验证的签名了。
3. 签名算法实现
签名生成规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2&)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。
即signature=sha1(string1)。 示例:
noncestr=Wm3WZYTPz0wzccnW
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg
timestamp=
url=http://mp.?params=value
步骤1. 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2&)拼接成字符串string1:
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&tamp=&url=http://mp.?params=value
步骤2. 对string1进行sha1签名,得到signature:
0f9de62fce790f9a083d5c99e95740ceb90c27ed
完整代码如下
appId = $appId;
$this-&appSecret = $appS
public function getSignPackage() {
$jsapiTicket = $this-&getJsApiTicket();
// 注意 URL 一定要动态获取,不能 hardcode.
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? &https://& : &http://&;
$url = &$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]&;
$timestamp = time();
$nonceStr = $this-&createNonceStr();
// 这里参数的顺序要按照 key 值 ASCII 码升序排序
$string = &jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&tamp=$timestamp&url=$url&;
$signature = sha1($string);
$signPackage = array(
=& $this-&appId,
&nonceStr&
=& $nonceStr,
&timestamp& =& $timestamp,
&signature& =& $signature,
&rawString& =& $string
return $signP
private function createNonceStr($length = 16) {
$chars = &abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&;
$str = &&;
for ($i = 0; $i & $ $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
private function getJsApiTicket() {
// jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
$data = json_decode(file_get_contents(&jsapi_ticket.json&));
if ($data-&expire_time & time()) {
$accessToken = $this-&getAccessToken();
// 如果是企业号用以下 URL 获取 ticket
// $url = &https://qyapi./cgi-bin/get_jsapi_ticket?access_token=$accessToken&;
$url = &https://api./cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken&;
$res = json_decode($this-&httpGet($url));
$ticket = $res-&
if ($ticket) {
$data-&expire_time = time() + 7000;
$data-&jsapi_ticket = $
$fp = fopen(&jsapi_ticket.json&, &w&);
fwrite($fp, json_encode($data));
fclose($fp);
$ticket = $data-&jsapi_
private function getAccessToken() {
// access_token 应该全局存储与更新,以下代码以写入到文件中做示例
$data = json_decode(file_get_contents(&access_token.json&));
if ($data-&expire_time & time()) {
// 如果是企业号用以下URL获取access_token
// $url = &https://qyapi./cgi-bin/gettoken?corpid=$this-&appId&corpsecret=$this-&appSecret&;
$url = &https://api./cgi-bin/token?grant_type=client_credential&appid=$this-&appId&secret=$this-&appSecret&;
$res = json_decode($this-&httpGet($url));
$access_token = $res-&access_
if ($access_token) {
$data-&expire_time = time() + 7000;
$data-&access_token = $access_
$fp = fopen(&access_token.json&, &w&);
fwrite($fp, json_encode($data));
fclose($fp);
$access_token = $data-&access_
return $access_
private function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
二、网页获得地理位置坐标
1. 绑定域名
先登录微信公众平台进入&公众号设置&的&功能设置&里填写&JS接口安全域名&。
2. 获取签名包
GetSignPackage();
3. 引入JS文件
在需要调用JS接口的页面引入如下JS文件,(支持https):
&script src="http://res./open/js/jweixin-1.0.0.js"&&/script&
4.通过config接口注入权限验证配置
所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用。
wx.config({
debug: false,
appId: '',
timestamp: ,
nonceStr: '',
signature: '',
jsApiList: [
// 所有要调用的 API 都要加到这个列表中
'checkJsApi',
'openLocation',
'getLocation'
5. 通过ready接口处理成功验证
地理位置需要在页面加载时就调用,需要把相关接口放在ready函数中调用来确保正确执行
wx.ready(function () {
5.1 通过checkJsApi判断当前客户端版本是否支持指定获取地理位置
wx.checkJsApi({
jsApiList: [
'getLocation'
success: function (res) {
// alert(JSON.stringify(res));
// alert(JSON.stringify(res.checkResult.getLocation));
if (res.checkResult.getLocation == false) {
alert('你的微信版本太低,不支持微信JS接口,请升级到最新的微信版本!');
5.2. 使用getLocation接口获取地理位置坐标
wx.getLocation({
success: function (res) {
var latitude = res. // 纬度,浮点数,范围为90 ~ -90
var longitude = res. // 经度,浮点数,范围为180 ~ -180。
var speed = res. // 速度,以米/每秒计
var accuracy = res. // 位置精度
cancel: function (res) {
alert('用户拒绝授权获取地理位置');
三、实现效果
弹出请求获取页面
JS成功获取地理位置参数
关注下文方倍工作室公众账号,在菜单中可找到。
您对本文章有什么意见或着疑问吗?请到您的关注和建议是我们前行的参考和动力&&
您的浏览器不支持嵌入式框架,或者当前配置为不显示嵌入式框架。程序让生活更美好,这里有很多值得你探索,感谢您留下的每一个脚印
微信开放JS SDK,这场web巨变意味着什么?
日 |   | 浏览: 1,842
2015年刚刚开始,微信JS SDK发布,惊爆业内,HTML5产业好事连连。
JS SDK这个概念,其实微博和淘宝的开放平台很早前就有,包括手机QQ前段时间也推出了几个增强API,但都未产生很大的影响。小巫之后终见大巫,这次微信开放的SDK,站在了另一个高度,web到底能有多强?
HTML5的逆袭
其实之前微信也是有一些JS API的,比如分享。但这次一股脑的开放了拍摄、录音、语音识别、二维码、地图、支付、分享、卡券等几十个API,这条消息不需宣传,瞬间就占满了HTML5从业者的朋友圈。
因为微信给所有做web开发的人打开一扇新窗户:使用js,你也可以调用各种强大的原生能力了!
客观的讲,微信的很多能力组件非常强,比如扫码,很多原生应用的扫码效果都不如微信。现在HTML5开发者瞬间成功逆袭,他们原本无法实现扫码,现在却能轻松的开发扫码应用,而且效果比很多原生应用都好(当然前提是你的web应用运行在微信的管理之下)。
首先受益的是微信内置的腾讯系App,比如大众点评、滴滴打车、京东购物等。
以前微信在钱包栏目下以很别扭的方式内嵌了滴滴打车的HTML5版本,那个版本的体验比滴滴的原生版本差太多,不能说话只能打字,没有地图看不到司机在哪。在体验为王的移动互联网时代,这个将就能用的版本出现在微信的钱包分类下,其实是微信的败笔。
但如今不同了,滴滴打车的微信版本,将拥有不输于其原生App的能力。而且不用下载App就可以秒开应用。
大众点评的受益就更大了,可不止是其微信内嵌版本的能力将大幅增强。因为使用场景的不同,滴滴在朋友间分享的只能是红包,离打车这个业务场景有点远;而大众点评在朋友间可以分享优惠或推荐商家,直接形成消费,通过关系链导流的效果会非常明显。
2个月前HTML5定稿时,我写过的一篇文章,提到过HTML5的一大优势就是打破App孤岛,直穿应用子页面。一张大众点评的优惠券,通过朋友分享,就可以通过点击分享内容直接到达这个商户的界面,进而直接购买,这点连大众点评的原生App也做不到。
微信给我们展示了一个新的web世界:能力和原生一样强,但在应用的获取、流量的转换上进一步领先于原生应用。
很快,我们就会看到各种公众号、微店全面升级支持微信JS SDK。然后我们就会发现,原来市占率最高的手机浏览器,是这个没有地址栏的微信。
浏览器的传统思维被突破
微信这个巴掌把浏览器厂商拍的不轻。但是浏览器厂商又很难还击,因为这挑战了他们的思维传统。
在HTML5规范制定时,很多人都有一种思维:web是开放的,地址栏和超链接可能带来任意恶意网页,所以我们不能把HTML5的能力做到太强,会引发安全问题。
微信给了这些人不同的答案。
首先微信开放的能力没有涉及过于隐私的API,比如个人敏感信息或好友关系,当然这个估计永远也不会开放。
最关键的是,所有使用微信JS SDK的网站,都必须实名到微信认证、缴费。它采取了类似Apple App Store的策略,由系统运营方来保障用户的安全。
这个由微信构建的新web世界,不再开放,由微信所管理,他根本就没有地址栏,所有能使用微信增强能力的网页都是经过认证权限的。
其实HTML5强化这个领域已经发展多年,也已经有了行业规范,HTML5 Plus.org,微信此次把这些标准都抛在一边,就是一心建设自己的生态系统。
除了管理模式不同,微信的设计体现了他对于用户体验的不同理解。其实我们大多数人都会认可一点,在手机浏览器里输入url是一个体验比较糟的事情,但是浏览器厂商却一直墨守成规。我们来解构下微信的设计。
在微信里,既然没有地址栏,那么如何到达一个web应用,它有几个web入口?
答案是5个:
消息内容里的超链接
公众号的文章
预置入口的web应用,如钱包、购物等栏目
这5个入口里,没有传统的地址栏,甚至也没有搜索。
Web初生时,人们获取web信息是主动式的,通过地址栏访问网站,网站太多后开始使用搜索引擎。Google的page rank算法告诉网民,被链接的网页越多,这个网页的价值越高。
微信的理解里,大多数人们获取web信息是被动的,这里没有地址栏、没有搜索、没有page rank,朋友发给你的、你订阅的公众号发给你的,就是你需要的web内容。
如果你真的想要主动获得内容,那也没有地址栏,但是有扫一扫。
可是扫一扫就不在微信的管理之下了吗?当然不会。很多App开发者头疼的就是他们的APK地址变成二维码后,微信是不能下载安装的,这可是浏览器不会干的事情,用户要下载什么那就允许下,最多给一个可能不安全的提示。但是微信说,APK只能是来自应用宝的链接才可以下载。。。你不接受?那就别用扫一扫。
就这样,微信构建了一个独特的web生态系统。
它有关系链推荐,不需要搜索引擎;
它有消息系统,不需要电子邮件;
它有增强的浏览器,有支付等业务闭环手段。
最终一个完整而又封闭的web世界出现在微信里。信息在这里产生、在这里流转、在这里变现。 手机上只需一个微信就够了,什么都能干了。
腾讯的战略
微信是仅仅强化了一批能力API吗?不是,大家还记得前段时间腾讯发布的X5浏览器内核吗?
X5内核内置于QQ浏览器,在安装了QQ浏览器后,微信有着不同的表现,它将调起X5内核,与JS SDK协作实现更好的体验。X5和JS SDK,这究竟是一盘什么棋呢?
微信其实很早就能开放这些JS SDK,甚至一度曾开放几个又收了回去,为何此时如此大力发展Web生态系统?
我想到了前段时间马化腾的话,微信只是张“站票”,他还给腾讯提出的一个新愿景:连接一切。张小龙也曾仔细研读KK的《失控》,提出微信要营造一个森林,而不是造一个宫殿。
其实这些事情是相关联的。有战略需求,才会出现X5、微信JS SDK这些支撑战略的产品。
要论站票和卧铺的区别,那就是一个可以躺着挣钱。
如何才能躺着挣钱,看看阿里巴巴就知道了。
在阿里建立的庞大生态系统里,每天无数人努力赚钱,阿里坐享其成。
腾讯曾经数次努力电商,但怎么也赚不到阿里的钱。它只能走自己的路。就是马化腾所说的,回归本源,连接一切。
电商搞不定,那就不搞了,剥离和注资给京东。搜索搞不定,那就不搞了,剥离和注资给搜狗。不再天天盯着阿里、百度,腾出全部精力,在移动互联网时代,达成连接一切的愿景。
没错,基于微信这张站票,腾讯最终要打造出一个由他掌控的生态系统,而对于一个工具而言,构建生态系统的最佳技术路线就是web,强化HTML5是打造更优质生态系统的必由之路。
而此时能做这事,还恰逢HTML5即将崛起的机会。一方面手机硬件的不断提升使得HTML5表现更好,另一方面,就是Apple对HTML5的态度在开放,或者说Apple整体都在开放。一方面iOS设备的市场份额远低于Android,另一方面库克确实没有乔布斯强势,所以目前Apple的整体态度是开放的。前段时间iOS 8发布,Apple给第三方厂商开放了自己的js加速引擎Nitro,以强化iOS设备上HTML5的表现。此时的微信JS SDK上线,不必再像以前那样担心无法通过App Store审核。
而且事实实际上是反过来的,带有微信JS SDK的版本其实早已更新到App Store了,只是前几天才给开发者公布了调用接口。
但是不管怎么样,这带有试探Apple底限的味道。如果仅仅在中国倒也是区域行为,但微信事实上已经遍布全球,当海外开发者也大量开发微信专属的增强web时,Apple和Google会如何看待这个新的跨平台霸主?
开发者的机会
What ever,巨头们的烦恼让他们自己烦恼吧,我等创业者和开发者还是要抓紧这个机会快速发展自己,快速利用微信JS SDK开发出惊艳的HTML5应用,抢先占有用户。
后面的比较技术,有兴趣开发JS SDK的开发者可以继续往下看。
微信本次开放的JS SDK分类清单如下:
分享类接口
图像类接口
音频类接口
智能类接口
设备信息类接口
地理位置类接口
界面操作类接口
微信扫一扫接口
微信小店接口
微信卡券接口
微信支付接口
滴滴打车、大众点评这些微信内置应用的增强路线,将基本照着其原生App的模样演进。其他的开发者,还是要运营好自己的公众号,目前公众号分为订阅号和服务号。
订阅号的开发者提供的大多是资讯,那么对于资讯而言,可以利用JS SDK做的事情什么?
a)丰富内容形式,即除了图文,新增音频能力。类似电台的订阅号将有机会兴起。但微信暂时还没有开放视频能力,朋友圈里的小视频是原生实现的。在Android4.0以上的手机,安装了QQ浏览器后,微信网页里的视频播放才能被X5引擎优化。而目前使用HTML5标准的视频,会在低端手机上遭遇性能问题。所以视频还是缓缓再搞。
不管是做图文还是做音频,都应该利用新提供的设备API获取网络状态,WIFI和2G下应该给予用户不同的内容以增强用户体验。
b)根据地域分发信息。资讯也是有地域性的,类似地方台的订阅号以后也会占有一席之地,而这也非常符合微信打造森林的生态初衷。
服务号就五花八门了,很多大企业有自己的掌上客服App,这回可以整体搬迁到微信上了,这也给企业服务开发商很多新商机;
对于可线上交易的微店,微信小店和支付这些API必不可少。微店的商品,这下可以直接被分享出去,只要东西好,传播更容易、销量也会高升;
对于线下消费的O2O,地图和卡券很重要。卡券对微信而言是个新东西,之前iOS已经有了passport,大众点评也有自己的会员卡体系,但微信自己做了一套,相信体量会做的更大,以后大家出门不用在钱包里塞那么多卡了,都在微信里了。
微信官方还推荐了几个App供开阔思路。
印美图是一个云打印App,自拍的美图,可以直接提交给这个App的后台,运营方打印好照片快递给你。
微邮筒是一个语音明信片,在明信片里留下自己的声音,再发给朋友,并且可以长期保存在服务器。
微信官方没有提供开发和调试配套的服务,客观的讲,开发和调试的便利性很不好。推荐一个免费开发工具HBuilder,可以完美支持微信JS SDK的语法提示,大幅提升开发效率。
下图中敲wxc回车就能生成一段完整的微信API初始化的长长代码,还能给予各种参数的值域提示。
接下来会如何?
我们都很确信,JS SDK的这个版本只是一个开始,未来腾讯还为了强化其web生态系统建设而不停升级产品。
会颠覆原生App吗?
微信JS SDK继续升级下去,真的会颠覆原生App吗?
目前的微信JS SDK,属于web增强,它依然还不能离线使用,还没有解决网页跳转间白屏的体验,也不能在手机桌面创建快捷方式,暂时它并没有向着努力做到和原生一模一样体验而前进。
就腾讯连接一切的愿景而言,它应该没有颠覆原生这个战略目标。但是这个月活4亿的平台势必会更大程度占有用户使用手机的时间,自然也会大幅影响原生App的流量。
对于普通用户而言,每天使用手机的时间是有限的,之前每天看着手机屏幕的总时长里可能60%是被微信占去的,那么微信未来可能会占去80%的时间。
另外微信虽然没有颠覆原生App的愿景,不代表其他人不会做这件事。IT行业总是在持续创新和突破的,除了微信,还会有其他大型HTML5的平台出现,可以预见HTML5成为主流已是不可阻挡的趋势。
微信会重构移动搜索吗?
移动搜索是腾讯一定会大做的事情。目前最新的微信测试版,在搜索栏那里已经可以搜索web信息,这也是为了实现腾讯连接一切的战略,同时对搜狗是大力的扶持。
在移动搜索领域,百度位置并不稳固,360份额更低,虽然移动搜索的变现难度仍然存在,但此番若搜狗能借助微信抢得大半移动搜索的江山,复制微信钱包突袭支付宝的模式,那真是梦寐以求的成功。
在微信现在的JS SDK里,有一个智能语义的接口,传入参数“查一下明天从北京到上海的南航机票”,就会返回结果。很像siri是不是?
那么这个功能和搜索框结合以后呢?以后打开微信,右上角有一个大大的麦克风图标,点击后说话,就可以直接反馈结果。或者假使微信把现在下拉出现视频的操作入口让给了语音搜索呢?启动微信,拉一下,说句话,搜索完毕。这种体验对用户来说太棒了,而其他搜索引擎来说太恐怖了。
再往后想一步,任意搜索出现的web页面,假使域名在微信登记,是不是也可以调用微信JS SDK呢?这又会是一个怎么样的web世界?
微信会重构移动电商吗?
其实单纯的套PC互联网的模式给移动互联网是不对的。腾讯最关心的不是移动电商,它更关心移动支付。所以易迅才会被剥离给京东。
腾讯十年总结时曾说,是互联网网民的高速增长红利造就了腾讯的今天。其实类似于雷军风口的理念。
移动支付,是一个大风口,是未来若干年高速增长的产业。
我们可以预见,未来移动支付的用户数会越来越多,交易额会越来越多,直到颠覆现金的地位。
但移动支付可不只是在电商网站买东西付款,更多场景在o2o范畴里。
移动支付大战里,腾讯一方面通过SNS方式的微信红包发展用户,另一方面通过资本手段控制支付场景,其投资的滴滴打车、大众点评、京东电商,这些合作伙伴的业务都是高频的支付场景,其成功的帮助腾讯支撑起了闭环的移动支付体系。当然阿里也不甘示弱的支持快的和美团。滴滴和快的的补贴大战、大众点评和美团补贴大战,看似疯狂,其实都是为了移动支付这张船票,为了未来十年的持续高速增长,这是任何一个巨头都不愿错过的。
在未来人们的衣食住行里,买衣服花钱用阿里和腾讯,吃饭花钱用阿里和腾讯,出门打车结帐用阿里和腾讯,就是买房好像不太好做移动支付。。。
另外近期在医疗领域,移动支付之争也打响了,那意味着以后看病,也用移动支付。
微信的JS SDK,其实很大程度上就是为了把这些需要花钱的App控制在自己的生态下,微信给这些App提供流量、提供更强大的运行环境,大家努力挣钱,然后微信躺着分钱。
不管怎么样,HTML5会大火特火
腾讯的这条构建web生态系统的路,真是让人看着心跳且百感交集。一方面钦佩微信团队的能力,一方面欣喜HTML5的火爆,一方面作为用户很高兴生活越来越方便,另一方面对腾讯的垄断产生隐忧。我相信各大互联网巨头都会有自己的对策。但不管是什么对策,都是要基于HTML5来做了。
所以无论如何,对于HTML5的开发者和从业者,这都将是一个最好的时代。
每次新生态系统的引爆,都意味着大量的创业机会。都会留下大量草根翻身、屌丝逆袭的传奇故事。你,会是其中的一个吗?
2015来了,HTML5来了!
作者:知道91
除非注明,本文原创:,欢迎转载!转载请以链接形式注明本文地址,谢谢。原文链接:
在实际字符串操作中,可能需要判断字符串是否以指定的字符串开始或者结尾,本文讲解了判断字符串是否以指定字符串开始或结尾的方法。
js怎样使用回调函数,本文通过示例讲解js回调函数的使用方法。
本文讲解了怎样使用HTML5获取地理位置来获取经纬度,并根据移动位置来获取实时的经纬度地理位置信息。
本文讲述了js实现60秒倒计时重新发送短信的效果,通过js+html示例讲述了js实现倒计时的方法。
Ajax长请求(请求URL过长)应该怎么解决呢
手把手教你使用Android开发游戏,使用Android开发首先需要的是搭建Android开发环境。本篇就讲解关于如何搭建Android开发环境的图文教程。
本文讲解了怎样使用js+html使手机网页禁止拖动、缩放和禁止手机弹出选择菜单。
你想学习编程吗?你知道当今最流行的编程语言吗?本文介绍了应该怎样学习编程语言,以及学习编程能够带来的好处。
本文介绍了写好博客提高网站访问流量的方法。博客是一个很好的方式来让每人了解每个家庭的最新的新闻,如没有运行的电话账单,你也可以查看重要更新了解最新的消息。
互联网创业你知道需要什么技巧吗?本文介绍了5个你必须知道的网上赚钱的技巧,开启互联网创业的新捷径。
你想知道怎样免费增加你网站的流量吗?想免费增加网站的流量而又不需要花费任务费用呢,那么你知道使你的网站流量加倍的技巧是什么,本文介绍了网站流量增加的方法。
本文介绍了在WordPress中创建文章(Post)的自定义Meta Boxes的方法,通过图文示例讲解了Meta Boxes是什么,怎样创建Meta Boxes。
怎样实现跟HTML元素加载事件的时候,会在加载的时候同时执行该事件。
本文介绍了使用c#如何将json转换为dynamic对象
Eclipse构建目录排除在外的svn的解决方法
Ajax长请求(请求URL过长)应该怎么解决呢
你知道Uber赚了多少吗?内部资料证明Uber是一个赔钱的主儿!更多Uber高层的内幕消息可以通过本文获得
本文介绍了在WordPress中创建文章(Post)的自定义Meta Boxes的方法,通过图文示例讲解了Meta Boxes是什么,怎样创建Meta Boxes。
结合使用CMS系统wordpress和...
本文讲解了怎样使用js+html使...
外国约会网站PlentyOfFish的...
本文讲解了怎样使用HTML5获取...
本文讲解了使用HTML+CSS+JS ...
本文讲述了js实现60秒倒计时...
网站合作和广告投放
联系邮箱:
(加好友请注明来意)
诚意交换友情链接
网站使用问题
请直接询问或者反馈,您也可以在网站直接给我们留言,谢谢!
欢迎关注知道91博客
(C) 2014 保留所有权利.&nbsp

我要回帖

更多关于 js判断客户端 的文章

 

随机推荐