wx_login.php
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php if ( empty ( $_SESSION [ 'user' ])){ $appid = "微信公众平台的appid" ; $url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $appid .'&redirect_uri= http%3a%2f%2fwww.haoshu888.com%2fwx_callback.php&response_type= code&scope=snsapi_userinfo&state=STATE#wechat_redirect'; header( "Location:" . $url ); } else { header( "Location:http://www.haoshu888.com/wap" ); } ?> |
3、在登陆页组装appid,回跳url等信息,然后跳转至微信的用户授权页。
4、在微信的用户授权页,如果用户选择了“同意授权”,则微信重新回跳至第三方网页的回跳地址时,会附带上code参数。
5、第三方网页的回跳url中,首先从请求中取得code,然后根据code进一步换取openid和access_token,然后就可以根据openid和access_token调用微信的相关接口查询用户信息了。代码如下:
wx_callback.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?php $appid = "根据实际填写" ; $secret = "根据实际填写" ; $code = $_GET [ "code" ]; $get_token_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $secret . '&code=' . $code . '&grant_type=authorization_code' ; $ch = curl_init(); curl_setopt( $ch ,CURLOPT_URL, $get_token_url ); curl_setopt( $ch ,CURLOPT_HEADER,0); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $ch , CURLOPT_CONNECTTIMEOUT, 10); $res = curl_exec( $ch ); curl_close( $ch ); $json_obj = json_decode( $res ,true); //根据openid和access_token查询用户信息 $access_token = $json_obj [ 'access_token' ]; $openid = $json_obj [ 'openid' ]; $get_user_info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN' ; $ch = curl_init(); curl_setopt( $ch ,CURLOPT_URL, $get_user_info_url ); curl_setopt( $ch ,CURLOPT_HEADER,0); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $ch , CURLOPT_CONNECTTIMEOUT, 10); $res = curl_exec( $ch ); curl_close( $ch ); //解析json $user_obj = json_decode( $res ,true); $_SESSION [ 'user' ] = $user_obj ; //进行业务逻辑操作 ?> |