微信如何获取用户微信用户的Openid详解

只需一步,快速开始
后使用快捷导航没有帐号?
所属分类: &
1、清楚的描述问题,必要时请配图、代码等!
2、当得到最佳答案时,请务必手动确认最佳答案,增加信用度,以便下次问答时,获得更快速更好的回答!
3、请及时查看问题回复
4、本版为技术问答板块,禁止各种无意义的灌水回复,违者永久封禁账号!
[已解决]怎么获取用户的Openid呢?
查看: 11312|回复: 12
& 主题帖子积分
新人求带, 积分 20, 距离下一级还需 280 积分
新人求带, 积分 20, 距离下一级还需 280 积分
刚接触公众号开发,看了下文档,没怎么明白,求论坛大神详解,谢谢
关注我的同学(只显示前32名)
& 主题帖子积分
专家路上, 积分 2167, 距离下一级还需 833 积分
专家路上, 积分 2167, 距离下一级还需 833 积分
&&&本楼为最佳答案&&&
可以使用微信授权OAuth2.0(服务号)或者&&URL带参数FromUserName(订阅号)
OAuth2.0只能服务号用?&
& 主题帖子积分
专家路上, 积分 2167, 距离下一级还需 833 积分
专家路上, 积分 2167, 距离下一级还需 833 积分
这种教程网上太多太杂,感觉没太大用处&
& 主题帖子积分
新人求带, 积分 20, 距离下一级还需 280 积分
新人求带, 积分 20, 距离下一级还需 280 积分
可以使用微信授权OAuth2.0(服务号)或者&&URL带参数FromUserName(订阅号)
https://open./c ...
OAuth2.0只能服务号用?
对滴。。。你是什么号&
& 主题帖子积分
新人求带, 积分 20, 距离下一级还需 280 积分
新人求带, 积分 20, 距离下一级还需 280 积分
/txw1958/p/weixin71-oauth20.html请看
这种教程网上太多太杂,感觉没太大用处
& 主题帖子积分
专家路上, 积分 2167, 距离下一级还需 833 积分
专家路上, 积分 2167, 距离下一级还需 833 积分
OAuth2.0只能服务号用?
对滴。。。你是什么号
未认证订阅号&
& 主题帖子积分
新人求带, 积分 20, 距离下一级还需 280 积分
新人求带, 积分 20, 距离下一级还需 280 积分
对滴。。。你是什么号
未认证订阅号
& 主题帖子积分
专家路上, 积分 2167, 距离下一级还需 833 积分
专家路上, 积分 2167, 距离下一级还需 833 积分
332211.png (20.98 KB, 下载次数: 361)
11:21 上传
认证的服务号...订阅号获取openid有示例代码吗?刚研究没怎么懂&
& 主题帖子积分
新人求带, 积分 20, 距离下一级还需 280 积分
新人求带, 积分 20, 距离下一级还需 280 积分
认证的服务号...订阅号获取openid有示例代码吗?刚研究没怎么懂
& 主题帖子积分
专家路上, 积分 2167, 距离下一级还需 833 积分
专家路上, 积分 2167, 距离下一级还需 833 积分
PHP:JAVA:
百度一下大把案例,不是程序员就不要搞代码,有钱就请人,没钱就买第三方的平台
明白,谢谢啦&
持续关注社区,并且经常发布有帮助的信息
社区技术大牛
问答之星专属标识
<是专业的第三方微信开发者平台,为生态而生。
本站为第三方微信开发者平台,非腾讯官方网站。
天津市滨海新区中新生态城中成大道生态建设公寓9号楼3层301
欢迎来这里一起喝喝茶,聊聊你的产品。
微信公众号gongzhongkaifa
工作日12小时内回复。
工作日12小时内回复。28872人阅读
微信开发(8)
开发框架:struts2(零配置)
官方文档下载地址
PS:下列获取openid的代码可以在柳峰的《微信公众平台应用开发方法、技巧与案例》的第六章找到。但是书中关于授权域名以及redirect_uri的关联写的不是很详细,在此主要详细介绍了出现问题排错的方向。代码觉得有疑惑的,可以看柳大神的书,或者csdn搜索柳峰找相关博客查看。
1 首先,我们需要进入我们的服务号,点击左侧栏开发者中心---&修改网页授权获取用户基本信息的&#20540;,假设我们对外的ip为183.33.212.175,tomcat的端口号为8016,这个修改为183.33.212.175:8016。
创建WeiXinOauth2Token类。改类具有以下属性:(自行添加get,set方法)
private String
accessToken;
private int
expiresIn;
private String
refeshToken;
private String
private String
调用微信的授权接口
https://open./connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
其中要说明的是,redirect_uri一定是在我们设定网页授权获取用户基本信息的域名下的action,不然微信页面会提示redirect_uri错误(所以,出现该错误,各位应该知道如何排错了)
官方文档给了下面一段话解释:
比如需要网页授权的域名为:,配置以后此域名下面的页面/music.html、/login.html都可以进行 OAuth2.0 鉴权。但、、http://qq.com 无法进行 OAuth2.0 鉴权。
上面一段话是什么意思呢?
假设我的授权域名为183.33.212.175:8016,那么。我的redirect_uri需要为http://183.33.212.175:8016/wxweb/config/oauth!execute.action。特别注意的是前面的http://必须要有,
不然就提示找不到页面183.33.212.175:8016/wxweb/config
/oauth!execute.action?code=XXXXXXXXXX。(这一点被坑了一天)
4 然后将redirect_uri进行encode,具体代码如下
public static String urlEncodeUTF8(String source){
& & & & & & & & String result =
& & & & & & & & try {
& & & & & & & & & & & & result = java.net.URLEncoder.encode(source,&utf-8&);
& & & & & & & & } catch (UnsupportedEncodingException e) {
& & & & & & & & & & & & e.printStackTrace();
& & & & & & & & }
& & & & & & & &
requestUrl= https://open./connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect中的REDIRECT_URI是我们的redirect_uri 进行encode后的&#20540;,APPID为你服务号的appid.
将上面的requestUrl设置为图文链接或者view按钮链接发送给用户。
5 获取用户openid
我的redirect_uri对应的action方法为
public String execute() throws ServletException, IOException{
& & & & & & & & // 将请求、响应的编码均设置为UTF-8(防止中文乱码)
& & & & & & & & HttpServletRequest request = ServletActionContext.getRequest();
& & & & & & & & HttpServletResponse response = ServletActionContext.getResponse();
& & & & & & & & request.setCharacterEncoding(&UTF-8&);
& & & & & & & & response.setCharacterEncoding(&UTF-8&);
& & & & & & & & String code = request.getParameter(&code&);
& & & & & & & & String openId =&&;
& & & & & & & & if (!&authdeny&.equals(code)) {
& & & & & & & & & & & & WeiXinOauth2Token weiXinOauth2Token = AdvancedUtil
& & & & & & & & & & & & & & & & & & & & .getOauth2AccessToken(&wx0953bae287adfeee&,
& & & & & & & & & & & & & & & & & & & & & & & & & & & & &8e81dbc44a84a3c290c0cc&, code);
& & & & & & & & & & & & openId = weiXinOauth2Token.getOpenId();
& & & & & & & & }
& & & & & & & & request.getSession().setAttribute(&openId&, openId);
& & & & & & & & return &index&;
AdvancedUtil的方法如下:
public static WeiXinOauth2Token getOauth2AccessToken(String appId, String appSecret, String code) {
& & & & & & & & WeiXinOauth2Token wat = new WeiXinOauth2Token();
& & & & & & & & String requestUrl = oauth2Url.replace(&APPID&, appId).replace(&SECRET&, appSecret).replace(&CODE&, code);
& & & & & & & & JSONObject jsonObject = CommonUtil
& & & & & & & & & & & & & & & & .httpsRequest(requestUrl, &GET&, null);
& & & & & & & & if (null != jsonObject) {
& & & & & & & & & & & & try {
& & & & & & & & & & & & & & & & wat = new WeiXinOauth2Token();
& & & & & & & & & & & & & & & & wat.setAccessToken(jsonObject.getString(&access_token&));
& & & & & & & & & & & & & & & & wat.setExpiresIn(jsonObject.getInt(&expires_in&));
& & & & & & & & & & & & & & & & wat.setRefeshToken(jsonObject.getString(&refresh_token&));
& & & & & & & & & & & & & & & & wat.setOpenId(jsonObject.getString(&openid&));
& & & & & & & & & & & & & & & & wat.setScope(jsonObject.getString(&scope&));
& & & & & & & & & & & & } catch (Exception e) {
& & & & & & & & & & & & & & & & wat =
& & & & & & & & & & & & & & & & String errorCode = jsonObject.getString(&errcode&);
& & & & & & & & & & & & & & & & String errorMsg = jsonObject.getString(&errmsg&);
& & & & & & & & & & & & & & & & log.error(&获取网页授权凭证失败 errcode{},errMsg&, errorCode, errorMsg);
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & &
CommmonUtil相关方法如下
& & & &&&* 发送https请求
& & & &&&*
& & & &&&* @param requestUrl 请求地址
& & & &&&* @param requestMethod 请求方式(GET、POST)
& & & &&&* @param outputStr 提交的数据
& & & &&&* @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性&#20540;)
& & & &&&*/
public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {
& & & & & & & & JSONObject jsonObject =
& & & & & & & & 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);
& & & & & & & & & & & & //conn.setRequestProperty(&content-type&, &application/x-www-form-urlencoded&);
& & & & & & & & & & & & // 当outputStr不为null时向输出流写数据
& & & & & & & & & & & & if (null != outputStr) {
& & & & & & & & & & & & & & & & OutputStream outputStream = conn.getOutputStream();
& & & & & & & & & & & & & & & & // 注意编码&#26684;式
& & & & & & & & & & & & & & & & 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 =
& & & & & & & & & & & & StringBuffer buffer = new StringBuffer();
& & & & & & & & & & & & while ((str = bufferedReader.readLine()) != null) {
& & & & & & & & & & & & & & & & buffer.append(str);
& & & & & & & & & & & & }
& & & & & & & & & & & & // 释放资源
& & & & & & & & & & & & bufferedReader.close();
& & & & & & & & & & & & inputStreamReader.close();
& & & & & & & & & & & & inputStream.close();
& & & & & & & & & & & & inputStream =
& & & & & & & & & & & & conn.disconnect();
& & & & & & & & & & & & jsonObject = JSONObject.fromObject(buffer.toString());
& & & & & & & & } catch (ConnectException ce) {
& & & & & & & & & & & & log.error(&连接超时:{}&, ce);
& & & & & & & & } catch (Exception e) {
& & & & & & & & & & & & log.error(&https请求异常:{}&, e);
& & & & & & & & }
& & & & & & & & return jsonO
测试OK后,会得到用户的openid并正确跳转到oauth_index.jsp页面。
假设用我们sae的应用,授权域名写为,其中searchinfo是你的应用名称。那么没有encode前的redirect_uri为:/config/oauth!execute.action。
需要注意的是,你部署的代码中config/oauth!execute.action方法所在版本必须为你应用的默认版本。检测是否可行,直接访问
/config/oauth!execute.action,若报500空指针,说明填写正确。找不到方法请自行修改默认版本,找到对应的执行action即可。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:108502次
排名:千里之外
原创:18篇
转载:15篇
评论:143条
(2)(1)(1)(1)(1)(1)(11)(3)(4)(2)(6)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'当前位置:主页 >>
微信获取用户openId的类
class wxApi{
const APPID = '';
const APPSECRET = '';
const CURL_PROXY_HOST = "0.0.0.0";//"10.152.18.220";
const CURL_PROXY_PORT = 0;//8080;
* 网页授权接口微信服务器返回的数据,返回样例如下
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE",
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
* 其中access_token可用于获取共享收货地址
* openid是微信支付jsapi支付接口必须的参数
* @var array
public $data =
* 通过跳转获取用户的openid,跳转流程如下:
* 1、设置自己需要调回的url及其其他参数,跳转到微信服务器https://open./connect/oauth2/authorize
* 2、微信服务处理完成之后会跳转回用户redirect_uri地址,此时会带上一些参数,如:code
* @return 用户的openid
public function GetOpenid(){
//通过code获得openid
if (!isset($_GET['code'])){
//触发微信返回code码
$baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']);
$url = $this-&__CreateOauthUrlForCode($baseUrl);
Header("Location: $url");
//获取code码,以获取openid
$code = $_GET['code'];
$openid = $this-&getOpenidFromMp($code);
* 通过code从工作平台获取openid机器access_token
* @param string $code 微信跳转回来带上的code
* @return openid
public function GetOpenidFromMp($code){
$url = $this-&__CreateOauthUrlForOpenid($code);
//初始化curl
$ch = curl_init();
//设置超时
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
if(self::CURL_PROXY_HOST != "0.0.0.0"
&& self::CURL_PROXY_PORT != 0){
curl_setopt($ch,CURLOPT_PROXY, self::CURL_PROXY_HOST);
curl_setopt($ch,CURLOPT_PROXYPORT, self::CURL_PROXY_PORT);
//运行curl,结果以jason形式返回
$res = curl_exec($ch);
curl_close($ch);
//取出openid
$data = json_decode($res,true);
$this-&data = $
$openid = $data['openid'];
* 拼接签名字符串
* @param array $urlObj
* @return 返回已经拼接好的字符串
private function ToUrlParams($urlObj){
$buff = "";
foreach ($urlObj as $k =& $v){
if($k != "sign"){
$buff .= $k . "=" . $v . "&";
$buff = trim($buff, "&");
* 构造获取code的url连接
* @param string $redirectUrl 微信服务器回跳的url,需要url编码
* @return 返回构造好的url
private function __CreateOauthUrlForCode($redirectUrl){
$urlObj["appid"] = self::APPID;
$urlObj["redirect_uri"] = "$redirectUrl";
$urlObj["response_type"] = "code";
$urlObj["scope"] = "snsapi_base";
$urlObj["state"] = "STATE"."#wechat_redirect";
$bizString = $this-&ToUrlParams($urlObj);
return "https://open./connect/oauth2/authorize?".$bizS
* 构造获取open和access_toke的url地址
* @param string $code,微信跳转带回的code
* @return 请求的url
private function __CreateOauthUrlForOpenid($code){
$urlObj["appid"] = self::APPID;
$urlObj["secret"] = self::APPSECRET;
$urlObj["code"] = $
$urlObj["grant_type"] = "authorization_code";
$bizString = $this-&ToUrlParams($urlObj);
return "https://api./sns/oauth2/access_token?".$bizS
$tools = new wxApi();
$openId = $tools-&GetOpenid();
echo $openId;
上一篇:下一篇:&&&&&&&&&如何获得云奇付微信用户收款码?
&&如何获得云奇付微信用户收款码?
1、打开手机微信扫一扫或添加朋友》公众号》搜索:信易通网络。
2、打开手机微信扫一扫下面的信易通网络微信公众号二维码。
温馨提醒:云奇付隶属新乡市信易通网络技术有限公司旗下品牌(简称:信易通网络)。
3、扫一扫二维码或添加公众号后,请完成关注:信易通网络。
4、关注成功后,打开信易通网络微信公众号,选择底部菜单:微信收款。
5、打开信易通网络微信公众号后,并点击微信收款即可获得云奇付微信用户收款码。
备注:如何使用,在交易成功后使用微信收款。请先长按收款码后复制或拷贝,然后点击下面的链接查看:云奇付微信用户收款码,使用教程:
Copyright Reserved
()信易通网络 版权所有
文网文许可证:豫网文许字[4号

我要回帖

更多关于 js获取微信用户openid 的文章

 

随机推荐