微信开发怎么获取openid_微信web开发者工具 企业微信 openid - CSDN
精华内容
参与话题
  • 重点的话就是这里的授权页面的参数,文档的话希望自己去看和理解,比较这个方面的话,前辈已经写了很多了,我只是想把我自己...首先肯定的配置微信公众号里面的内容,这里就不多说了也就是域名,js域名,token,这...

    首先我们要先看一下文档 https://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html

    重点的话就是这里的授权页面的参数,文档的话希望自己去看和理解,比较这个方面的话,前辈已经写了很多了,我只是想把我自己的写出来提供参考。

      

    首先肯定的配置微信公众号里面的内容,这里就不多说了也就是域名,js域名,token,这方面的东西,都好之后我这里是从菜单说去,应该挺详细的。

    创建微信的一二级菜单,具体的话可能要自己去找资料了。这里只有一级菜单。

    接下来我就来解释一下就是通过url得到code,通过code得到openid 然后得到用户信息这样一个思路.

    当我们点击,每个人都有的按钮 通过url 后面的域名   redirect_uri=http://www.vicp.com/task/technician/check 

    进入我们的 task/technician/check  这个方法传一个code值过去,同时参数appid是填写自己公众号的,其它的基本可以默认,就行.

    //授权页面

    buttonBuys.put("url", "https://open.weixin.qq.com/connect/oauth2/authorize?"+ "appid="+appid+"&redirect_uri="
    + "http://www.vicp.com/task/technician/check&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect");

    /**
     * 创建自定义菜单
     */
        public static void createMenu() throws Exception {
            String appid = WxConfig.APPID;
            
            JSONObject buttonBuys = new JSONObject();
            buttonBuys.put("type", "view");
            buttonBuys.put("name", "每个人都有");
            //授权页面
            buttonBuys.put("url", "https://open.weixin.qq.com/connect/oauth2/authorize?"
            + "appid="+appid+"&redirect_uri="
            + "http://www.vicp.com/task/technician/check&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect");
            
               // menuKnow 一级菜单
            JSONObject menuKnow = new JSONObject();
            menuKnow.put("type", "view");
            menuKnow.put("name", "我要发布任务");
            //授权页面
            menuKnow.put("url", "https://open.weixin.qq.com/connect/oauth2/authorize?"
            + "appid="+appid+"&redirect_uri="
            + "http://www.vicp.com/task/employer/check&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect");
            JSONArray buttonsAll = new JSONArray();
            buttonsAll.add(buttonBuys);
            buttonsAll.add(menuKnow);
            
            JSONObject menu = new JSONObject();
            menu.put("button", buttonsAll);
            menu.toString();
            
            MpApi.menuCreate(menu.toString());
            MpApi.menuQuery();
        }

    MpApi.menuCreate(menu.toString()); //这里是调用微信的创建接口 需要自己 post 或者 get 到微信就行了
    private static final String CreateMenuUrl =https://api.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN

    MpApi.menuQuery(); //这里是调用微信的查询接口
    需要自己 post 或者 get 到微信就行了
    private static final String QueryMenuUrl =https://api.weixin.qq.com/cgi-bin/menu/get?access_token=ACCESS_TOKEN

    MpApi.GetPageAccessTokenUrl //这里接口在下面 
    去掉 mpapi 调用接口就行了

    如上说的,我们通过url进入了我们方法得到code,接下来就是得到code了,如果url通过了我们可以直接得到code值

    /**
         * 技术人员任务判断
         * 
         * @param session
         * @param model
         * @param code
         * @return
         */
        @RequestMapping("/technician/check")
        public String check(HttpSession session, Map<String, Object> model,) {
            String openId = null;
            String code = request.getParameter("code");//我们要的code
            try {
                openId = getTheCode(session, code, openId);
     
            } catch (Exception e) {
                e.printStackTrace();
            }
            return view;
        }
        private String getTheCode(HttpSession session, String code, String openId) {
            if (code != null) 
            {
            openId = userService.getOpenid(code);// 调用根据用户的code得到信息
            }
            // 获取基础刷新的接口访问凭证
            AccessToken accessToken = AccessTokenUtil.queryAccessToken();
            User userinfo = userinof.getUserInfo(accessToken.getAccess_token(),openId);
            System.out.println("昵称:" + userinfo.getNickname());
     
            if (userinfo.getOpenid() == null) 
            {
                // 得到保存在session的微信信息
                User loginUser = BaseUserController.getLoginUser(session);
                openId = loginUser.getOpenid();
                System.out.println(openId + "你是");
            } 
            
            else 
            {
                addSessionUser(session, userinfo);
            }
     
            return openId;
        }


    getOpenid 方法

    /**
         * 识别得到用户id必须的一个值
         * 
         * @param code
         * @return
         */
        // 根据用户的code得到用户OpenId
        public String getOpenid(String code) {
            UserinofService weixinGetCode = new UserinofService();
            Map<String, Object> result = weixinGetCode.oauth2GetOpenid(code);
            String OpenId = (String) result.get("Openid");// 得到用户id
            
            return OpenId;
        }


    UserinofServicele类

    package xyz.ibenben.parttime.common.weixxintool;
     
    import net.sf.json.JSONObject;
    import xyz.ibenben.parttime.common.weixinapi.HttpUtil;
    import xyz.ibenben.parttime.common.weixinapi.MpApi;
    import xyz.ibenben.parttime.user.entity.User;
     
    import org.springframework.stereotype.Service;
     
    import java.util.HashMap;
    import java.util.Map;
     
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.ResponseHandler;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.BasicResponseHandler;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
     
    /**
     * 扫描就获取用户信息
     * 
     * @param accessToken
     *            接口访问凭证
     * @param openId
     *            用户标识
     * @return WeixinUserInfo
     */
    @Service
    public class UserinofService {
        
        
        /**
         * 得到微信用户信息
         * @param accessToken
         * @param openId
         * @return
         */
        public  User getUserInfo(String accessToken, String openId) {
            
            Logger log = LoggerFactory.getLogger(HttpUtil.class);
            User weixinUserInfo = null;
            // 拼接请求地址
            String requestUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID";
            requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken).replace(
                    "OPENID", openId);
            // 获取用户信息
            JSONObject jsonObject = HttpUtil
                    .httpsRequest(requestUrl, "GET", null);
        
            if (null != jsonObject) {
                try {
                    weixinUserInfo = new User();
                    // 用户的标识
                    weixinUserInfo.setOpenid(jsonObject.getString("openid"));
                    // 昵称
                    weixinUserInfo.setNickname(jsonObject.getString("nickname"));
                    // 用户的性别(1是男性,2是女性,0是未知)
                    weixinUserInfo.setSex(jsonObject.getInt("sex"));
                    // 用户所在国家
                    weixinUserInfo.setCountry(jsonObject.getString("country"));
                    // 用户所在省份
                    weixinUserInfo.setProvince(jsonObject.getString("province"));
                    // 用户所在城市
                    weixinUserInfo.setCity(jsonObject.getString("city"));
                    // 用户头像
                    weixinUserInfo.setHeadImage(jsonObject.getString("headimgurl"));
                } catch (Exception e) {
                    if (0 == weixinUserInfo.getSubscribe())
                        log.error("用户{}已取消关注", weixinUserInfo.getOpenid());
                    else {
                        int errorCode = jsonObject.getInt("errcode");
                        String errorMsg = jsonObject.getString("errmsg");
                        log.error("获取用户信息失败 errcode:{} errmsg:{}", errorCode,
                                errorMsg);
                    }
                }
            }
            return weixinUserInfo;
        }
        
        /**
         * 
         * @param code 识别得到用户id必须的一个值
         * 得到网页授权凭证和用户id
         * @return
         */
        public static Map<String,Object> oauth2GetOpenid(String code) {
            String appid = WxConfig.APPID;//自己的配置appid
            String appsecret = WxConfig.APPSECRET;//自己的配置APPSECRET;
            String requestUrl = MpApi.GetPageAccessTokenUrl.replace("APPID", appid).replace("SECRET", appsecret).replace("CODE", code);
            HttpClient client = null;
            Map<String,Object> result =new HashMap<String,Object>();
            try {    
                client = new DefaultHttpClient();
                HttpGet httpget = new HttpGet(requestUrl);
                ResponseHandler<String> responseHandler = new BasicResponseHandler();
                String response = client.execute(httpget, responseHandler);
                JSONObject OpenidJSONO=JSONObject.fromObject(response);
                
                //OpenidJSONO可以得到的内容:access_token expires_in  refresh_token openid scope 
                
                String Openid =String.valueOf(OpenidJSONO.get("openid"));
                String AccessToken=String.valueOf(OpenidJSONO.get("access_token"));
                String Scope=String.valueOf(OpenidJSONO.get("scope"));//用户保存的作用域
                String refresh_token=String.valueOf(OpenidJSONO.get("refresh_token"));
                
                result.put("Openid", Openid);
                result.put("AccessToken", AccessToken);
                result.put("scope",Scope);
                result.put("refresh_token", refresh_token);
            } catch (Exception e) {
                e.printStackTrace(); 
            } finally {
                client.getConnectionManager().shutdown();
            }
            return result;
        }
    // 网页授权获取code
    public final static String GetPageCode = "https://open.weixin.qq.com/connect/oauth2/authorize?
    appid=APPID&redirect_uri=URL&response_type=code&scope=snsapi_userinfo&state=1#wechat_redirect";
        
    // 网页授权接口
    public final static String GetPageAccessTokenUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?
    appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
     
    // 网页授权得到用户基本信息接口
    public final static String GetPageUsersUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";    
    }

    上面就是根据code得到openid,现在就是根据openid得到用户信息了


    user类

    /**
     * 类名: WeixinUserInfo <br/>
     * 描述: 微信用户的基本信息 <br/>
     * 开发人员: zdl <br/>
     * 创建时间: 2015-11-27 </br> 发布版本:V1.0 <br/>
     */
    public class Userof {
        // 用户的标识
        private String openId;
        // 关注状态(1是关注,0是未关注),未关注时获取不到其余信息
        private int subscribe;
        // 用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
        private String subscribeTime;
        // 昵称
        private String nickname;
        // 用户的性别(1是男性,2是女性,0是未知)
        private int sex;
        // 用户所在国家
        private String country;
        // 用户所在省份
        private String province;
        // 用户所在城市
        private String city;
        // 用户的语言,简体中文为zh_CN
        private String language;
        // 用户头像
        private String headImgUrl;
     
     
        public String getOpenId() {
            return openId;
        }
     
     
        public void setOpenId(String openId) {
            this.openId = openId;
        }
     
     
        public int getSubscribe() {
            return subscribe;
        }
     
     
        public void setSubscribe(int subscribe) {
            this.subscribe = subscribe;
        }
     
     
        public String getSubscribeTime() {
            return subscribeTime;
        }
     
     
        public void setSubscribeTime(String subscribeTime) {
            this.subscribeTime = subscribeTime;
        }
     
     
        public String getNickname() {
            return nickname;
        }
     
     
        public void setNickname(String nickname) {
            this.nickname = nickname;
        }
     
     
        public int getSex() {
            return sex;
        }
     
     
        public void setSex(int sex) {
            this.sex = sex;
        }
     
     
        public String getCountry() {
            return country;
        }
     
     
        public void setCountry(String country) {
            this.country = country;
        }
     
     
        public String getProvince() {
            return province;
        }
     
     
        public void setProvince(String province) {
            this.province = province;
        }
     
     
        public String getCity() {
            return city;
        }
     
     
        public void setCity(String city) {
            this.city = city;
        }
     
     
        public String getLanguage() {
            return language;
        }
     
     
        public void setLanguage(String language) {
            this.language = language;
        }
     
     
        public String getHeadImgUrl() {
            return headImgUrl;
        }
     
     
        public void setHeadImgUrl(String headImgUrl) {
            this.headImgUrl = headImgUrl;
        }
    }


    // 获取用户信息 的url请求

    JSONObject jsonObject = HttpUtil.httpsRequest(requestUrl, "GET", null);

    // 获取用户信息 的url请求
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.net.ConnectException;
    import java.net.URL;
     
     
    import javax.net.ssl.HttpsURLConnection;
    import javax.net.ssl.SSLContext;
    import javax.net.ssl.SSLSocketFactory;
    import javax.net.ssl.TrustManager;
     
     
    import net.sf.json.JSONObject;
     
     
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.StatusLine;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.HttpResponseException;
    import org.apache.http.client.ResponseHandler;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.util.EntityUtils;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
     
     
    /**
     * 服务器端http请求工具类
     */
    public class HttpUtil {
        private static Logger log = LoggerFactory.getLogger(HttpUtil.class);
     
     
        /**
         * utf-8编码
         */
        static class Utf8ResponseHandler implements ResponseHandler<String> {
            public String handleResponse(final HttpResponse response)
                    throws HttpResponseException, IOException {
                final StatusLine statusLine = response.getStatusLine();
                final HttpEntity entity = response.getEntity();
                if (statusLine.getStatusCode() >= 300) {
                    EntityUtils.consume(entity);
                    throw new HttpResponseException(statusLine.getStatusCode(),
                            statusLine.getReasonPhrase());
                }
                return entity == null ? null : EntityUtils
                        .toString(entity, "UTF-8");
            }
     
     
        }
     
     
        /**
         * 获取用户信息发送 --HTTPS请求
         * 
         * @param requestUrl
         *            请求地址
         * @param requestMethod
         *            请求方式(GET、POST)
         * @param outputStr
         *            提交的数据
         * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
         */
        public static JSONObject httpsRequest(String requestUrl,
                String requestMethod, String outputStr) {
            JSONObject jsonObject = null;
            try {
                // 创建SSLContext对象,并使用我们指定的信任管理器初始化
                TrustManager[] tm = { new MyX509TrustManager() };
                SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
                sslContext.init(null, tm, new java.security.SecureRandom());
                // 从上述SSLContext对象中得到SSLSocketFactory对象
                SSLSocketFactory ssf = sslContext.getSocketFactory();
                URL url = new URL(requestUrl);
                HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
                conn.setSSLSocketFactory(ssf);
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setUseCaches(false);
                // 设置请求方式(GET/POST)
                conn.setRequestMethod(requestMethod);
                // 当outputStr不为null时向输出流写数据
                if (null != outputStr) {
                    OutputStream outputStream = conn.getOutputStream();
                    // 注意编码格式
                    outputStream.write(outputStr.getBytes("UTF-8"));
                    outputStream.close();
                }
                // 从输入流读取返回内容
                InputStream inputStream = conn.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(
                        inputStream, "utf-8");
                BufferedReader bufferedReader = new BufferedReader(
                        inputStreamReader);
                String str = null;
                StringBuffer buffer = new StringBuffer();
                while ((str = bufferedReader.readLine()) != null) {
                    buffer.append(str);
                }
                // 释放资源
                bufferedReader.close();
                inputStreamReader.close();
                inputStream.close();
                inputStream = null;
                conn.disconnect();
                jsonObject = JSONObject.fromObject(buffer.toString());
            } catch (ConnectException ce) {
                log.error("连接超时:{}", ce);
            } catch (Exception e) {
                log.error("https请求异常:{}", e);
            }
            return jsonObject;
        }
    }
    package com.web.controller.io;
     
    import java.security.cert.CertificateException;
    import java.security.cert.X509Certificate;
     
    import javax.net.ssl.X509TrustManager;
     
    /**
     * 类名: MyX509TrustManager <br/>
     * 描述:信任管理器 <br/>
     * 开发人员: ZDL <br/>
     * 创建时间:2016-9-27 <br/>
     * 发布版本:V1.0 <br/>
     */
    public class MyX509TrustManager implements X509TrustManager {
        // 检查客户端证书
        public void checkClientTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
        }
     
        // 检查服务器端证书
        public void checkServerTrusted(X509Certificate[] chain, String authType)
                throws CertificateException {
        }
     
        // 返回受信任的X509证书数组
        public X509Certificate[] getAcceptedIssuers() {
            return null;
        }
    }
    --------------------- 
    作者:故事说到这里 
    来源:CSDN 
    原文:https://blog.csdn.net/qq_34469943/article/details/53489359 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 微信开发获取openid中遇到的坑

    万次阅读 2016-04-13 18:58:50
    1:微信后台设置授权回调页面域名 注意不要加http:// 2:去微信授权回调的url列如:...

    1:微信后台设置授权回调页面域名 注意不要加http://
    微信后台设置授权回调页面域名
    2:去微信授权回调的url

    列如:https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=http://test.ceshi.com&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
    1. redirect_uri=http://test.ceshi.com
      一定要加http://
      不要写成redirect_uri=test.ceshi.com
      【这个在电脑端的微信客户端可以, 在手机端就不行,害我周六来改】
    2. 如果你在微信端分享出去的链接像这样 http://test.ceshi.com?id=55
      那么你还这么去跳转转的话id=55会丢失的
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=http://test.ceshi.com?id=55&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect

    我是这么解决的:
    0、session中有openid的话就不用走下面了
    1、把分享出去的http://test.ceshi.com?id=55放入session中
    2、redirect_uri=http://test.ceshi.com
    3、微信回调回来之后再进行获取openid的操作,
    4、把openid存入session中。
    5、在从session中取出http://test.ceshi.com?id=55,这个url,再回调回去

    展开全文
  • java微信获取OpenId

    2020-07-30 23:30:14
    微信开发获取openId
  • 微信公众号开发获取openID以及用户详细信息,超详细步骤,亲测开发

        好久没有发过博文了,恰好这两天做了一个关于微信公众号开发的东东,拿出来和大家分享一下。

        需要做一套微信签到、抽奖系统,我要在后台存储微信用户的相关信息,openIDNickname之类的信息。在开发前有一点准备工作,先去授权权限,在权限表里进行设置,如图:

        


    填写这个网站地址的时候一定要注意填写域名路径,没有http头,就是你的域名而已,在该域名下的所有页面都可访问到,被授权。

    好了初期的准备工作做好了,下来填写公众测试号的一些信息。

    填写你的接口信息:

    这里的url须填写你的接口地址,(在我下面的代码里调用valid()方法),在代码里设置一个token,和此处你填写的token保持一致。不然你会发现总是设置失败。

    接下来就是源码,直接上代码吧:

    <?php
    define("TOKEN", "shiva");
    class Wechatsign extends Back_Controller{
        private $appId;
        private $appSecret;
        public function  __construct($appId, $appSecret){
           $this->appId = '你自己的APPID';  
           $this->appSecret= '你自己的APPSECRET';  
           
        }
        
        public function getBaseInfo(){
            //1.获取到code        
            $redirect_uri=urlencode("http://你的域名/Wechatsign/getUserOpenId");//这里的地址需要http://
            $url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$this->appId."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";
            header('location:'.$url);
        }
    
        public function getUserOpenId(){
            //2.获取到网页授权的access_token        
            $code = $_GET['code'];
            $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appId."&secret=".$this->appSecret."&code=".$code."&grant_type=authorization_code ";
            //3.拉取用户的openid
            $res = $this->http_curl($url);
            echo $res;//打印即可看到用户的openid
            $data = json_decode($res,true);
            if(!empty($data['access_token']) && !empty($data['openid'])){
                $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$data['access_token']."&openid=".$data['openid']."&lang=zh_CN"; 
                $userInfo = $this->http_curl($url);
                echo $userInfo;
            }
        }
        
        public function valid(){
            $echoStr = $_GET["echostr"];
            //valid signature , option
            if($this->checkSignature()){
                echo $echoStr;
                exit;        
            }
        }
        
        
        private function checkSignature(){
            $signature = $_GET["signature"];
            $timestamp = $_GET["timestamp"];
            $nonce = $_GET["nonce"];     
            $token = TOKEN;
            $tmpArr = array($token, $timestamp, $nonce);
            sort($tmpArr);
            $tmpStr = implode( $tmpArr );
            $tmpStr = sha1( $tmpStr );
            if( $tmpStr == $signature ){
                return true;
            }else{
                return false;
            }
    
        }
        
        
        public function http_curl($url){
            $curl = curl_init();
            //设置抓取的url
            curl_setopt($curl, CURLOPT_URL, $url);
            //设置头文件的信息作为数据流输出
            curl_setopt($curl, CURLOPT_HEADER, 0);
            //设置获取的信息以文件流的形式返回,而不是直接输出。
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            //执行命令
            $data = curl_exec($curl);
            //关闭URL请求
            curl_close($curl);
            //显示获得的数据
            return $data;
        }
        
    }
    
    代码很简单,不复杂,应该能看懂(如果看不懂去看一下微信的开发者文档)。有一点很重要,如果你要获取用户的基本信息比如性别、昵称,头像,地址之类的信息的话,你要注意我getBaseInfo()方法里的url中有一个参数scope他的值一定是snsapi_userinfo,别直接拿微信开发文档里的url过来用,他给的值是snsapi_base。需要你注意改一下,我已经改好了,但还是写出来让大家了解一下。

    ok,将http://你的域名/接口,这个地址复制到草料二维码,生成二维码后扫一扫,你就能看到结果信息了,按我的绝对没问题哦。如果有用的话,就点个赞吧。

    予人玫瑰,手有余香

    展开全文
  • 很简单的方法获取微信openid 可用于微信登陆网页等操作。php 微信开发获取 Openid 封装类
  • H5在微信获取openid

    2020-02-05 18:01:51
    H5在微信获取openid 为什么要获取openid openId是用户在当前公众号下的唯一标识(‘身份证’)。在微信中进行微信分享、支付等操作时需要用户的openid。H5要在微信获取到用户openid,需要获得微信授权,授权分...

    H5在微信中获取openid

    为什么要获取openid

        openId是用户在当前公众号下的唯一标识(‘身份证’)。在微信中进行微信分享、支付等操作时需要用户的openid。H5要在微信中获取到用户openid,需要获得微信授权,授权分两种方式:静默授权和手动授权

    静默授权:用户使用过程中不知不觉获取到openid,不需要用户手动授权,但是会在原页面进行刷新

    手动授权:需要用户点击同意授权,能获取到更多用户信息

        (我本次使用的是静默授权,所以详细记录一下静默授权的方式)

    获取方法

    1、首先,要有一个公众号,以及公众号的appid,然后在公众号后台上设置你的网页授权域名(注意不加http://和https://)

    2、静默授权,在进入网页之后,访问微信提供的url,在其中设置授权方式以及回调页面url,返回的页面url中就会包含一个code参数

    (注意:此处的url是转码过后的url)

    url转码方法:

    var url = this.urlencode(url_old);

    // 编码函数

        urlencode (str) { 

          str = (str + '').toString(); 

          return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28'). 

          replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+'); 

        },

    具体获取code方法:

    // 获取code

        getBaseInfos(){

          var url_code = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+你的appid+"&redirect_uri="+当前页面url+"&response_type=code&scope=snsapi_base&state=1&connect_redirect=1#wechat_redirect";

          window.location.href = url_code;//打开这个链接,你的url后面就会跟上code的参数

        }

    如果配置参数全部正确,那么此时通过回调地址刷新页面后,你就会看到在地址栏中的code了。

    注意:要监测当前url中是否含有code参数,如果包含的话就继续下一步操作,否则页面是一直重复刷新反复获取code。且要注意code码只能使用一次,使用过后就失效了。

    3、拿到code之后,需要把code传给后端,后端去请求微信获取openid等参数,前端是获取不到的,微信开发文档中是这么写的:

    微信开发文档

    后端请求成功后,得到的数据应该是这样的

    4、这样我们就能获取到用户的openid进行开发了

    开发建议:

    判断是否微信内置浏览器,如果是微信内置浏览器的话,去获取用户的openid,否则在外面浏览器中打开获取不到code是会报错的。

    1、判断是否是微信浏览器

    isWeiXin() {

            var ua = window.navigator.userAgent.toLowerCase();

            if (ua.match(/MicroMessenger/i) == 'micromessenger') {

                return true;

            } else {

                return false;

            }

    }

    2、根据以上函数判断值进行不同的操作

    if(this.isWeiXin()){

            console.log(" 是来自微信内置浏览器")

            if(url_s.indexOf("code") > 0 ){// 如果url字符串包含code字段

              this.code = cs.code;//则获取code参数值并存入缓存

              localStorage.setItem("code", cs.token);

                this.getOpenId();//继续下一步获取openid

            }else{//否则,就先调取函数获取code

              this.getBaseInfos();

            }

        }else{

            console.log("不是来自微信内置浏览器")

        }

    展开全文
  • 除此之外,我们还需要一个内网穿透的工具在开发环境下让微信能访问到我们的域名。我使用的是natapp。此类工具网上有很多,大家可以自行寻找。 这里我们使用微信提供的测试账号来作为演示 二、开始开发 内网穿透就...
  • 简单的实现微信获取openid

    万次阅读 多人点赞 2019-06-13 14:01:35
    微信公众平台获取openid在公众号的开发中有很多用途,前段时间为实现用户使用公众号在登录一次以后可以免密登陆而使用了openid开发过程中遇到了一些问题,在这里向需要且还没有获取openid的米娜桑分享一下简单的...
  • 微信企业号获取openId

    千次阅读 2019-04-25 12:04:16
    1、微信获取openid两种方式 企业获取code、 根据code获取成员信息、 非企业成员可以直接获取openId,这里不做过多描述; 企业成员取到的只有userId(如文档描述) 微信企业开发者文档如下: ...
  • 微信公众号通过appid和appsecret获取个人信息,包括微信头像,昵称,openid,性别等...
  • 我需要用户接收微信分享的链接后,点击进入给参加活动的用户【点赞】,然后需要后台获取微信用户的 openid 作为唯一的标记信息,以便保证该用户下次进入后进行数据库的比对,直接提取其对应的操作信息...
  • 用java代码通过OAuth授权获取openid,有时会返回invalid code错误,有时不会。具体是什么原因?求大神们解答
  • 前提:微信公众号设置中的“网页授权域名”已经配置好。 现象:获取code成功,但是通过code获取openid失败,报错 : {"errcode":40029,"errmsg":"invalid code, hints: [ req_id: 2gIdfXXBe-k ]"} 原因:获取...
  • export default { created () { this.page= (this.getUrlParam(“page”)=null)?this.getUrlParam(“state”):this.getUrlParam(“page”); this.getCode(); }, data(){ return { //由于是通过微信...const code =
  • 上一个博客也写了微信公众号获取OpenId,但是现在这个和上一个有什么区别呢。 其实呢,是差不多的,只是这个是通过用户授权。 但是,又会有人问了,明明可以未授权获取到用户的openId,那我为什么要让用户进行...
  • 获取微信用户 openID 的代码网上有很多,这里我也献上一份供大家参考: &lt;?php define("TOKEN", "*"); // 这里的TOKEN 就是:“接口配置信息修改” 中token ,随意填,但是使用时必须...
  • 需求:接入微信支付,需要获取 OpenID。 安卓接入微信指南:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417751808&token=&lang=zh_CN 移动应用微信登录...
  • 首先了解openid到底是个啥:所谓的openid就是公众号普通用户的一个唯一的标识,只针对当前的公众号有效,开发者可以通过openID获取用户的基本信息,比如说:所在城市,省份,国家,性别等等。(对不同的公众号同一...
  • 微信小程序获取openid

    万次阅读 2017-10-20 09:25:10
    微信小程序openid,session_key等信息的获取,以及遇到的问题
  •  需要做一套微信签到、抽奖系统,我要在后台存储微信用户的相关信息,openIDNickname之类的信息。在开发前有一点准备工作,先去授权权限,在权限表里进行设置,如图:   填写这个网站地址的时候一定要注意填写...
1 2 3 4 5 ... 20
收藏数 14,634
精华内容 5,853
关键字:

微信开发怎么获取openid