微信开发之分享和获取用户信息

众所周知,微信是当之无愧的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示例程序已经足够。这里说一下几个需要注意的点。

  1. 分享页面本身需要包含SDK文件< ?php require_once “share/jssdk.php”; $jssdk = new JSSDK(“APPID”, “APPSECRT”); $signPackage = $jssdk->GetSignPackage(); ?>

  2. 要使用的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"] 
    
    });
    
  3. 分享页面的内容和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没保存或者保存失败。