2016-06-08 13:40:22 frankcheng5143 阅读数 31642
  • 微信公众号开发7-用户管理-微信开发php

    微信公众平台开发之微信用户开发管理是子恒老师《微信公众平台开发》视频教程的第7部。详细讲解了用php开发微信,对微信公众平台中的粉丝用户管理开发。内容包含微信公众平台用户分组,获取微信用户列表,查询用户详情等等。欢迎反馈,微信/QQ:68183131

    14036 人正在学习 去看看 秦子恒

在微信开发中我们会经常需要获取用户的信息。
微信给我们提供了获取用户信息的api,
地址为

https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

将其中的access_token替换为我们的access_token
openid为关注用户的openid就可以获取到用户的信息了。

问题描述

不过获取到的数据却是中文乱码

这里写图片描述

而用java程序获取的结果也是一样的

这里写图片描述

解决方案

这个乱码主要是由于微信那边采用的是“ISO-8859-1”编码造成的。

我们对获取的结果进行编码

这里写图片描述

关键代码

    String token = AccessTokenTool.getAccessToken();
    String URL = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN";
    // 原始json
    String jsonResult = HttpUtil.sendGet(URL.replace("OPENID", openid).replace("ACCESS_TOKEN", token));
    System.out.println(jsonResult);
    // 编码后的json
    String json = new String(jsonResult.getBytes("ISO-8859-1"), "UTF-8");
    System.out.println(json);

获取自定义菜单乱码也是一样的解决方法

这里写图片描述

参考文献

获取用户基本信息(UnionID机制)
HttpUtil工具类参考

2016-02-24 20:34:01 kingmax54212008 阅读数 7201
  • 微信公众号开发7-用户管理-微信开发php

    微信公众平台开发之微信用户开发管理是子恒老师《微信公众平台开发》视频教程的第7部。详细讲解了用php开发微信,对微信公众平台中的粉丝用户管理开发。内容包含微信公众平台用户分组,获取微信用户列表,查询用户详情等等。欢迎反馈,微信/QQ:68183131

    14036 人正在学习 去看看 秦子恒

本文介绍如何获得微信公众平台关注用户的基本信息,包括昵称、头像、性别、国家、省份、城市、语言。
本文的方法将囊括订阅号和服务号以及自定义菜单各种场景,无论是否有高级接口权限,都有办法来获得用户基本信息,而无需模拟登录。

 

在本文中,特别要注意的是有两个不同的Access Token,他们产生的方式不一样,一种是使用AppID和AppSecret获取的access_token,一种是OAuth2.0授权中产生的access_token,方倍工作室分别称为全局Access Token授权Access Token。

 

一、通过全局Access Token获取用户基本信息

1. 用户关注以及回复消息的时候,均可以获得用户的OpenID

复制代码
<xml>
    <ToUserName><![CDATA[gh_b629c48b653e]]></ToUserName>
    <FromUserName><![CDATA[ollB4jv7LA3tydjviJp5V9qTU_kA]]></FromUserName>
    <CreateTime>1372307736</CreateTime>
    <MsgType><![CDATA[event]]></MsgType>
    <Event><![CDATA[subscribe]]></Event>
    <EventKey><![CDATA[]]></EventKey>
</xml>
复制代码

其中的FromUserName就是OpenID

2. 然后使用access_token接口,请求获得全局Access Token

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

返回结果:

{
    "access_token": "NU7Kr6v9L9TQaqm5NE3OTPctTZx797Wxw4Snd2WL2HHBqLCiXlDVOw2l-Se0I-WmOLLniAYLAwzhbYhXNjbLc_KAA092cxkmpj5FpuqNO0IL7bB0Exz5s5qC9Umypy-rz2y441W9qgfnmNtIZWSjSQ",
    "expires_in": 7200
}

3. 再使用全局ACCESS_TOKEN获取OpenID的详细信息

https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID

返回如下:

复制代码
{
    "subscribe": 1,
    "openid": "oLVPpjqs2BhvzwPj5A-vTYAX4GLc",
    "nickname": "刺猬宝宝",
    "sex": 1,
    "language": "zh_CN",
    "city": "深圳",
    "province": "广东",
    "country": "中国",
    "headimgurl": "http://wx.qlogo.cn/mmopen/JcDicrZBlREhnNXZRudod9PmibRkIs5K2f1tUQ7lFjC63pYHaXGxNDgMzjGDEuvzYZbFOqtUXaxSdoZG6iane5ko9H30krIbzGv/0",
    "subscribe_time": 1386160805
}
复制代码

至此,获得用户的基本信息。

2018-11-05 11:06:26 qq_41654694 阅读数 180
  • 微信公众号开发7-用户管理-微信开发php

    微信公众平台开发之微信用户开发管理是子恒老师《微信公众平台开发》视频教程的第7部。详细讲解了用php开发微信,对微信公众平台中的粉丝用户管理开发。内容包含微信公众平台用户分组,获取微信用户列表,查询用户详情等等。欢迎反馈,微信/QQ:68183131

    14036 人正在学习 去看看 秦子恒

获取code值

$appid=’’ // 微信支付申请对应的公众号的APPID
$urlCode=’’ // 处理code页面 不能包含? 是微信可访问页面
$url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appid."&redirect_uri=http://".$urlCode."&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";
header('location:'.$url);

通过code获取openid 查询用户信息

$appid=’’ // 微信支付申请对应的公众号appid
$secret=’’ // 微信支付申请对应的公众号的APP Key

//第一步:取全局access_token
$url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$secret;
$token = getJson($url);

//第二步:取得openid
$oauth2Url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appid."&secret=".$secret."&code=".$_GET['code']."&grant_type=authorization_code";
$oauth2 = getJson($oauth2Url);

//第三步:根据全局access_token和openid查询用户信息
$access_token = $token["access_token"];
$openid = $oauth2['openid'];
$get_user_info_url="https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$access_token."&openid=".$openid."&lang=zh_CN";
$userinfo = getJson($get_user_info_url);
Var_dump($userinfo);

function getJson($url){
    $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);
    return json_decode($output, true);
}

function http_curl($url,$type='get',$res='json',$arr=''){
    //1.实例化curl
    $ch = curl_init();
    //2.设置curl参数
    curl_setopt($ch,CURLOPT_URL,$url);//要访问的url地址
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);//对认证证书的来源检查
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);//从证书中检查SSL加密算法是否存在
    if($type=='post'){
        curl_setopt($ch, CURLOPT_POST, 1);//发送一个常规的POST请求
        curl_setopt($ch, CURLOPT_POSTFIELDS,$arr);//post提交的数据包
    }
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//获取的信息以文件流的形式返回

    //3.采集

    $output = curl_exec($ch);//执行操作
    if($res=='json'){
        if(curl_errno($ch)){
            return curl_error($ch);
        }else{
            return json_decode($output,true);
        }
    }
    //4.关闭
    curl_close($ch);
}

获取信息格式
array(16) {
[“subscribe”]=>
int(1)
[“openid”]=>
string(28) “oEuSRwmEaaw6ozzYlJPYIyOtg1co”
[“nickname”]=>
string(6) “微信名”
[“sex”]=>
int(2)
[“language”]=>
string(5) “zh_CN”
[“city”]=>
string(6) “市”
[“province”]=>
string(6) “省”
[“country”]=>
string(6) “中国”
[“headimgurl”]=>
string(137) ") “http://thirdwx.qlogo.cn/mmopen/vJ90HLKGHicnoc4SyxqLzxqiamWrwJpGOAbpDAicxqib3kXENNZmscYqMUO5orWHYuxpDhZMMoibnZrPD1pvHFBd9OicAOuXTgfJWZ/132
"
[“subscribe_time”]=>
int(1541230987)
[“remark”]=>
string(0) “”
[“groupid”]=>
int(0)
[“tagid_list”]=>
array(0) {
}
[“subscribe_scene”]=>
string(16) “ADD_SCENE_SEARCH”
[“qr_scene”]=>
int(0)
[“qr_scene_str”]=>
string(0) “”
}

修改粉丝标签

    $url = "https://api.weixin.qq.com/cgi-bin/groups/members/update?access_token=".$access_token;
    $posts = array(
        "openid" => $openid,
        "to_groupid" => $label,
    );
    $post = json_encode($posts);
    $change = http_curl($url,'post','json',$post);
2019-07-17 13:51:24 qq_38209578 阅读数 42
  • 微信公众号开发7-用户管理-微信开发php

    微信公众平台开发之微信用户开发管理是子恒老师《微信公众平台开发》视频教程的第7部。详细讲解了用php开发微信,对微信公众平台中的粉丝用户管理开发。内容包含微信公众平台用户分组,获取微信用户列表,查询用户详情等等。欢迎反馈,微信/QQ:68183131

    14036 人正在学习 去看看 秦子恒

本文主要介绍前端微信登录获取用户信息的业务逻辑

一、业务实现

1.1判断当前用户是否登录

如果有,证明当前用户已登录,返回主页面

1.2判断当前是否有code
1.2.1如果有,调用调用后端接口,返回用户基本信息,同1.1
1.2.2如果无,调用微信api获取code,获取到code在调用用后端接口,同1.2.1

二、代码如下(vue.js写法)

index.js

init:function() {
	if(vm.getRequest().code!=undefined){ // 判断是否是授权请求
		vm.getOpenid(vm.getRequest().code, app.codeUrl);
	} else {
		userInfo = JSON.parse(app.getItem(app.localKey.userInfo));  // 获取本地用户缓存(封装)
		if(!userInfo){  // 判断用户是否已登录
			vm.getCode();
			return;
		}
		app.go("loginMain");  // 跳转登录页(封装)
	}
},
getCode: function() { // 获取code
	param = JSON.parse(app.getItem(app.localKey.param));
	if (!param) {
		param = {}
	}
	param.loginBack = 'loginMain.html'; // 缓存登录页,获取code成功后返回用户登录页进行数据绑定
	app.setItem(app.localKey.param, JSON.stringify(param)); // 设置本地缓存
	vm.redirect_uri = window.location.origin + app.sld + "view/index.html"; // 微信api请求回调地址
	wxApi.getCode(vm.appid, vm.urlencode(vm.redirect_uri)); // 微信api获取code
},
getRequest:function () {  //获取url的参数
  var url = location.search; //获取url中"?"符后的字串  
   var theRequest = new Object();  
   if (url.indexOf("?") != -1) {  
      var str = url.substr(1);  
      strs = str.split("&");  
      for(var i = 0; i < strs.length; i ++) {  
         theRequest[strs[i].split("=")[0]]=unescape(strs[i].split("=")[1]);  
      }  
   }  
   return theRequest;  
},
getOpenid: function(code, codeUrl) {  // 获取用户星星
	wxApi.getOpenid(code, codeUrl);  // 封装的wxApi的JS
},			
urlencode: function(str) { // urlencode转码 防止url乱码
	str = (str + '').toString();
	return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
	replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
},

wxapi.js

(function($, window) {
	window.wxApi = {
		getCode: function(appid, redirect_uri) {  // 获取code
			var url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + redirect_uri +
				"&response_type=code" + "&scope=snsapi_userinfo" + "&state=STATE#wechat_redirect";
			window.location.replace(url);
		},
		getOpenid: function(code, codeUrl) {  // 接口请求,获取用户信息
			var url = codeUrl + "weChat?code=" + code;
			$.ajax({
				type: 'GET',
				url: url,
				timeout: app.timeout,
				dataType: "json",
				success: function(r) {
					app.setItem(app.localKey.userInfo, JSON.stringify(r));
					param = JSON.parse(app.getItem(app.localKey.param));
					if (param.loginBack) {
						window.location.replace(param.loginBack);
					}
				},
				error: function(xhr, type, errorThrown) {
					$.toast(app.ajaxErrorTip);
				}
			});
		}

	}
})(mui, window);
2019-06-06 13:59:07 caicai1171523597 阅读数 240
  • 微信公众号开发7-用户管理-微信开发php

    微信公众平台开发之微信用户开发管理是子恒老师《微信公众平台开发》视频教程的第7部。详细讲解了用php开发微信,对微信公众平台中的粉丝用户管理开发。内容包含微信公众平台用户分组,获取微信用户列表,查询用户详情等等。欢迎反馈,微信/QQ:68183131

    14036 人正在学习 去看看 秦子恒

在做微信公众号开发获取用户授权取用户昵称的时候发现有字符乱码的情况,百度了一下发现很多网友遇到这个问题,记录一下解决办法。

String url = "https://api.weixin.qq.com/sns/userinfo?access_token="+accessToken+"&openid="+openId+"&lang=zh_CN";
HttpClient client =  new HttpClient();
GetMethod get=new GetMethod(url);
client.executeMethod(get);
String response = get.getResponseBodyAsString();
JSONObject body = (JSONObject) JSON.parse(response);
if (null!=body&&null!=body.get("openid")) {
    String nickName = String.valueOf(body.get("nickname"));
   /**进行编码*/
    nickName = new String(nickName.getBytes("ISO-8859-1"), "UTF-8");
    System.out.println("nickName:"+nickName);
}

这样进行UTF-8编码就行了。
原文作者技术博客:https://www.jianshu.com/u/ac4daaeecdfe
95后前端妹子一枚,爱阅读,爱交友,将工作中遇到的问题记录在这里,希望给每一个看到的你能带来一点帮助。
欢迎留言交流

没有更多推荐了,返回首页