微信-网页授权获取用户openid
第一步:用户同意授权,获取code
在确保微信公众账号拥有授权作用域(scope参数)的权限的前提下(服务号获得高级接口后,默认带有scope参数中的snsapi_base和snsapi_userinfo),引导关注者打开如下页面:
https://open.weixin.qq.com/connect/oauth3/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
所以
先用调试接口生成自定义菜单,菜单json如下:
{
"button":[
{
"name":"风信科技",
"sub_button":[
{
"type":"click",
"name":"关于风信",
"key":"FS_V1_1001"
},
{
"type":"click",
"name":"我们的服务",
"key":"FS_V1_1002"
},
{
"type":"click",
"name":"成功案例",
"key":"FS_V1_1003"
},
{
"type":"click",
"name":"解决方案",
"key":"FS_V1_1004"
},
{
"type":"click",
"name":"OA通讯录",
"key":"FS_V1_1005"
}]
},
{
"name":"风信产品",
"sub_button":[
{
"type":"click",
"name":"平台产品",
"key":"FS_V2_1001"
},
{
"type":"click",
"name":"领域产品",
"key":"FS_V2_1002"
},
{
"type":"click",
"name":"行业产品",
"key":"FS_V2_1003"
},
{
"type":"view",
"name":"微办公",
"url":"https://open.weixin.qq.com/connect/oauth3/authorize?appid=$APPID&redirect_uri=$URL&response_type=code&scope=snsapi_base&state=1#wechat_redirect"
}]
},
{
"name":"风信娱乐",
"sub_button":[
{
"type":"click",
"name":"抽奖活动",
"key":"FS_V3_1001"
},
{
"type":"click",
"name":"查询天气",
"key":"FS_V3_1002"
},
{
"type":"view",
"name":"更多活动",
"url":"http://www.funsing.com/"
}]
}]
}
第二步,获取openId,
public function index() { $code = I('get.code'); $weid = $this->getOpenId($code); if ($weid == "") { $this->redirect('/Home/Index/login', array(), 0, "waiting..."); } else { $result = json_decode($this->client->IsAccount(array("weId"=>$weid))->IsAccountResult); $info = $result->ErrMsg; $this->gotoPage($info, $weid); } }
//通过code取得openid public function getOpenId($code) { $urlpre = "https://api.weixin.qq.com/sns/oauth3/access_token?appid=".$this->appId."&secret=".$this->appsecret."&grant_type=authorization_code&code="; $url = $urlpre.$code; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $output = curl_exec($ch); curl_close($ch); $jsoninfo = json_decode($output, true); //$access_token = $jsoninfo["access_token"]; $openid = $jsoninfo["openid"]; return $openid; }