首页 > 其他分享 >H5页面获取微信用户openid极简攻略

H5页面获取微信用户openid极简攻略

时间:2023-01-29 09:58:40浏览次数:37  
标签:openid ch 极简 微信 token code appid curl

背景

之前每次写到获取openid 就觉得特别麻烦,网上很多代码段会把一部分功能分开写,确实相对合理,但是对于复制粘贴代码来说依赖越少越方便,所以根据自己的经验做了一个极简的复用代码。

前置条件

1.公众号已认证,否则会出现“Scope 参数错误或没有 Scope 权限”
2.公众号后台设置安全域名
【公众号设置】=》【功能设置】=》【JS接口安全域名】&【网页授权域名】

前端

getUrlParam(name){
  return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [, ""])[1].replace(/\+/g, '%20')) || null
}

getOpenId(){
  let ua = navigator.userAgent.toLowerCase();
        if (/micromessenger/.test(ua)) {
            if (!localStorage.getItem('wxOpenid')) {
                const code = getUrlParam('code'); // 截取路径中的code,
                if (code == null || code === '' || code === false) {
                    const local = location.href;
                    let appid = 'xxxxxxx';
                    window.location.href =
                        'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' +
                        appid +
                        '&redirect_uri=' +
                        encodeURIComponent(local) +
                        '&response_type=code&scope=snsapi_base&state=1#wechat_redirect';
                } else {
                    this.$axios.post('/index/index/getWxOpenid?code=' + code).then(res => {
                        const openid = res.data.data.openid;
                        if (openid) {
                            localStorage.setItem('wxOpenid', openid);
                        } else {
                            location.href = '/';
                        }
                    });
                }
            }
        }
}

后端

如果只是需要获取到openid,不需要其他信息

public function getOpenid(){
  $appid = '<公众号appid>';
  $secret = '<公众号secret>';
  $code = $_GET["code"];
  $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret. "&code=" . $code . "&grant_type=authorization_code";
  $weixin = file_get_contents($url);
  $jsondecode = json_decode($weixin);
  return result(1, $jsondecode, '成功');
  }

如果需要根据openid进一步获取用户信息

public function getUserInfo(){
    $appid = '<公众号appid>';
    $secret = '<公众号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);
    $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);
    $user_obj = json_decode($res,true);
    $_SESSION['user'] = $user_obj;
    return json($user_obj);
}

标签:openid,ch,极简,微信,token,code,appid,curl
From: https://www.cnblogs.com/guowenrui/p/17071801.html

相关文章

  • 前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
    整合篇二​​前言​​​​整合JWT​​​​用户登录业务介绍​​​​单一服务器模式​​​​SSO(singlesignon)模式​​​​SSO登录三种常见的方式​​​​传统用户身份验......
  • PHP获取微信JS-SDK接口设置(access_token、jsapi_ticket、signature)
    前端引入JS文件<scriptsrc="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>或<scriptsrc="http://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script......
  • 怎么添加微信已下架的表情包?
    前言你有没有遇到过这种情况?发现喜欢的表情包,想添加却发现已经下架,无法保存,收藏或者下载,每当这时就突然好难受有没有,甚至夜不能寐。不过搞技术的怎么能被这个难倒呢,果断爬起......
  • 视频号主页添加微信,私域流量管理系统
    关于视频号主页实现一键添加个人微信的功能,之前写过一篇相关的文章,可以查看【视频号主页,实现一键添加个人微信功能,留客更方便,真香】。比起添加企业微信,可以直接添加个人微信......
  • 微信第三方开放平台代公众号实现业务
    假如说,要开发有多个业务,功能模式相同的公众号,那是不是需要复制多套代码,改appId信息和秘钥。在微信公众号后台,配置业务域名、配置JS接口安全域名、网页授权域名等繁琐的信息,......
  • 微信小程序字符串拼接,实现SetData对变量名赋值
    1、直接对串进行拼接如 app.globalData.server_url=“https://image.baidu.com/",action='search'let url0 = `${app.globalData.server_url}${action}`;......
  • 微信QQ防撤回(安卓端)
    前言这几天在研究安卓的应用注入模块,做了些许东西:微信8.0.32(带微X模块)QQ8.9.28(带Qa)对了,应该只能在64位机上跑,用的都是64位的包。改后其他应用可能无法拉起,支付时......
  • Blazor如何实现类似于微信的Tab切换?
    是否有小伙伴在使用tab的时候想进行滑动切换Tab?并且有滑动左出左进,右出右进的效果,本文将讲解怎么在Blazor中去通过滑动切换Tab本文中的UI组件使用的是MASABlazor,您也......
  • Blazor如何实现类似于微信的Tab切换?
    是否有小伙伴在使用tab的时候想进行滑动切换Tab?并且有滑动左出左进,右出右进的效果,本文将讲解怎么在Blazor中去通过滑动切换Tab本文中的UI组件使用的是MASABlazor,您也......
  • 微信小程序开发错误总结
    1、真机调试 Error:accessSync:failnosuchfileordirectory,access  遇到这种问题真机调试的时候切换到1.0版本,2.0就是会报这种错误,贼坑 ......