众所周知,微信是当之无愧的No.1,在产品推广和业务路演的过程中,扫一扫成了最为常见的功能。扫一扫就能获取用户的基础信息,然后可以进行投票啊,留言啊之类的功能几乎是网页的必备功能。 微信最常用的就是分享和获取用户信息的功能,这两个接口尽管微信都有详细的文档,网上也有相应的教程,但是过程中还是有一些坑的,在此记录一下。
阅读此文章需要你的公众号开放了JSAPI功能,腾讯对此定义必须是服务号才可以。所以,你需要以组织或者企业的名义申请服务号。 申请完服务号之后,获得appid和appSecret,这两个参数异常重要,请务必牢记。
打开公众号,下载SDK,我们使用PHP技术实现,因此只需要下载PHP的版本即可。
获取jsapiTicket和accessToken
正确使用微信JSAPI的第一步是获取JsapiTicket。 访问下面的地址就可以获取到
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret
微信开启了来源IP验证,请在微信公从号安全设置中将服务器的IP添加进去。
请求此步之后,获取了access_token,微信对此接口每天的调用次数进行限制,并且有过期时间限制,你需要把它保存起来。官网默认的方式是存储到php文件中,要在服务器给指定目录写权限.
通过上面步骤获得的access_token,请求下面的路径就可以获得jsapiticket。
https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken"
请求的结果会以json方式返回。 jsticket是剩余其它操作的基础。
这一步获取的jsapiticket和accessToken都有过期时间的限制,在过期之前,是可以反复使用的。
设置分享
使用微信的一个主要目的就是分享到朋友圈和好友。微信自然为此提供了对应的API。
微信的分享主要是设置APPID和KEY。官方的SDK示例程序已经足够。这里说一下几个需要注意的点。
-
分享页面本身需要包含SDK文件< ?php require_once “share/jssdk.php”; $jssdk = new JSSDK(“APPID”, “APPSECRT”); $signPackage = $jssdk->GetSignPackage(); ?>
-
要使用的API都要事先声明
wx.config({ debug: false, appId: ‘< ?php echo $signPackage[“appId”];?>’, timestamp: < ?php echo $signPackage[“timestamp”];?>, nonceStr: ‘< ?php echo $signPackage[“nonceStr”];?>’, signature: ‘< ?php echo $signPackage[“signature”];?>’,
jsApiList: ["onMenuShareTimeline","onMenuShareAppMessage","onMenuShareQQ","downloadFile"] });
-
分享页面的内容和URL地址,及标题,描述信息需要由服务端生成,不能使用JS拼接。
wx.ready(function () { wx.onMenuShareTimeline({ title: '<?php echo $web_title;?>', desc: '<?php echo $share_summary;?>', link: '<?php echo 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];?>', imgUrl: '<?php echo $share_img;?>', success: function () { }, cancel: function () { } }); }
获取用户的信息
微信获取用户信息是会显示用户访问授权验证页面的,点击了验证后,包括 你的微信头像,昵称,APP唯一标识符都会返回给程序调用。
可以请求下面的路径获取用户的基础信息,这里使用了微信的oauth2接口,必须使用appid和secret参数
"https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSECRET&code=CODE&grant_type=authorization_code"
上面路径中需要参数CODE,CODE相当于微信的SESSION标识,微信会为每个请求页面的用户分配一个CODE。分配CODE的过程中不会弹出授权提醒,每个微信用户对应不同的CODE。
这里建议保存CODE和用户信息的对应关系,因为获取CODE的过程不需要授权,用户下次访问的时候,就可以跳过授权页面了。
如何获取code
很遗憾,code只能调用微信的redirect接口授权。就是通过访问下面的接口
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=YOUR_PAGE&response_type=code&scope=snsapi_userinfo&state=2#wechat_redirect
YOUR_PAGE 为你的页面的urlencode表示。
通过此链接重定向的页面会在URL后面增加CODE参数。 因此只需要在程序中判断有没有CODE,如果没有就跳转就可以了。 上述链接只能在微信客户端打开。
这一步会出现各种错误,可以参考官方的SDK文档解决,不过基本上的错误都可以归结为 1. 安全问题,没有设置可信IP或者可信域名 2. 眼神问题,没有设置appid,secret或者设置的不正确。 3. 权限问题 jsticket和access_token没保存或者保存失败。