我想让用户打开帝国CMS动态信息页面时静默获取微信用户的OPENID,我的想法是在信息页模板的顶端加上PHP代码,这段代码用来获取OPENID,并且仍然显示当前页面。但是不会弄。在网上找到了这个,测试好像不行,请求修改,或者是写个更简洁的方式来获取呢。
public function jump() { $appid = 'wx830638e91b'; $secret = 'c73d92a82e42'; $code = $_GET['code'];//获取code $state = $_GET['state']; //获取参数 $weixin = file_get_contents("https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$secret&code=$code&grant_type=authorization_code");//通过code换取网页授权access_token $jsondecode = json_decode($weixin); //对JSON格式的字符串进行编码 $array = get_object_vars($jsondecode);//转换成数组 $openid = $array['openid'];//输出openid if ($openid) { //你的业务逻辑跳转 header('Location:/e/action/ShowInfo.php?classid=1&id=1001'); } } public function get_openid() { $state = ''; $appid = 'wx833ee0350638e91b'; $redirect_uri = urlencode('url');//对url处理,此url为访问上面jump方法的url $url = "https://open.weixin.qq.com/connect/oauth2/authorize? appid=$appid&redirect_uri=$redirect_uri&response_type=code&scope=snsapi_base&state=$state#wechat_redirect"; header('Location:' . $url); }
===============
看起来这一段也比较简洁,但作者是用在小程序上的,不知道网页端怎么样?
getOpenid(); function getOpenid() { $code = $_GET['code'];//小程序传来的code值 $appid = 'wx4b55bb240aec2ee3';//小程序的appid $appSecret = '1f6f68884c1add6293cfa9b86e1f6bfd';// 小程序的$appSecret $wxUrl = 'https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code'; $getUrl = sprintf($wxUrl, $appid, $appSecret, $code);//把appid,appsecret,code拼接到url里 $result = curl_get($getUrl);//请求拼接好的url $wxResult = json_decode($result, true); if (empty($wxResult)) { echo '获取openid时异常,微信内部错误'; } else { $loginFail = array_key_exists('errcode', $wxResult); if ($loginFail) {//请求失败 var_dump($wxResult); } else {//请求成功 $openid = $wxResult['openid']; echo "获取openid成功成功:" . $openid; } } }
|