微信的哪个接口可以c 获取微信用户openid用户的openid

&>&&>&&>&&>&非高级接口非授权获取微信用户信息
非高级接口非授权获取微信用户信息
上传大小:248KB
不走高级接口,不做授权,仅仅需要点一下自定义菜单,就能获取openid和用户信息。一哥们帮我做的,特别感谢,在这里也分享出来供有需要的人参考。
嵌到我的页面
<input type="text" value="">
综合评分:5(3位用户评分)
所需积分:5
下载次数:26
审核通过送C币
创建者:leavingchen
创建者:nliuwenpeng
课程推荐相关知识库
上传者其他资源上传者专辑
移动开发热门标签
VIP会员动态
android服务器底层网络模块的设计方法
所需积分:0
剩余积分:720
您当前C币:0
可兑换下载积分:0
兑换下载分:
兑换失败,您当前C币不够,请先充值C币
消耗C币:0
你当前的下载分为234。
非高级接口非授权获取微信用户信息
会员到期时间:
剩余下载次数:
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:当一请求一个链接或者是扫描二维码时,会请求后台方法,当然对于微信和支付宝来说,大多数时候是扫 码 一、首先说微信:
1、首先会判断请求中是否有code和state参数,没有的话就是还未授权,这时候走红框内进行授权,附授权方法代码: /**
* @方法功能说明:微信授权
* @方法修改者:
* @修改日期:
* @修改说明:
* @作者:anyou
* @创建时间:日 上午11:39:59
* @param @param response
* @param @param url
* @param @param request
* @return void
*/ public static void oauthResp(HttpServletResponse response,String url, HttpServletRequest request){
String reqUrl = getBaseUrl(request)+url+getUrlParameter(request);
reqUrl = URLEncoder.encode(reqUrl, "utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
String _url = getWEXIN_USER_GETCODE(
APPID, reqUrl, "code", "snsapi_base",
"sn_b");//snsapi_base sn_b静默授权snsapi_userinfo sn_u提示授权
response.sendRedirect(_url);
} catch (IOException e) {
e.printStackTrace();
} } 对于oauthResp这个授权方法,核心就是请求微信的授权接口( "https://open./connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect";),这个接口需要公众号的appid,一个授权后重定向的路径redirect_uri,还有一个是scope,就是授权方式,分为静默授权和手动授权(感兴趣的自己研究,这里就不详细说了),其中redirect_uri一般就是你的后台method,此文中就是图片中所对应的方法,这样的目的在于它授权后会携带者code再去访问你的方法。 2、如果已经授权,就去获取openid,代码如下: /**
* @方法功能说明:获取微信用户的openid
* @方法修改者:
* @修改日期:
* @修改说明:
* @作者:anyou
* @创建时间:日 上午11:29:35
* @param @param code
* @param @return
* @return String
*/ public static String getOpenid(String code){
String openid = "";
String url = getWEXIN_USER_TOKEN(APPID,APPSECRET,code);
String resp = httpsRequest(url, "GET", null);
if(!resp.contains("errcode")){
JSONObject object = JSONObject.parseObject(resp);
openid = object.getString("openid");
} 获取openid,请求的是微信如下接口("https://api./sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";)这个接口同样需要公众号的appid,再加上公众号的appsecret,还有授权成功后获取的授权码code,最后的grant_type是固定值authorization_code。请求这个接口成功后就会获得openid。 二、然后支付宝,其实微信支付宝大概流程一样,区别就在于封装的参数和签名方式不同 1、对于支付宝授权,也是判断一个code,在支付宝中名字叫auth_code,如果auth_code不存在,就进行支付宝授权,支付宝授权方法如下: /**
* @方法功能说明:支付宝授权
* @方法修改者:
* @修改日期:
* @修改说明:
* @作者:anyou
* @创建时间:日 下午6:43:12
* @param @param response
* @param @param url
* @param @param request
* @return void
*/ public static void zfboauthResp(HttpServletResponse response,String url, HttpServletRequest request){
String reqUrl = getBaseUrl(request)+url+getUrlParameter(request);
reqUrl = URLEncoder.encode(reqUrl, "utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
String _url = getZFBOUATH(APP_ID, reqUrl, "auth_base");
response.sendRedirect(_url);
} catch (IOException e) {
e.printStackTrace();
} } 支付宝授权请求的是支付宝的授权接口("/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_URL"),这个接口需要支付宝的appid和授权类型,同样也需要一个重定向的路径,这跟微信基本一样。 2、授权成功后,获取支付宝用户的user_id,先上代码: /**
* @方法功能说明:获取支付宝的userid
* @方法修改者:
* @修改日期:
* @修改说明:
* @作者:anyou
* @创建时间:日 下午4:14:39
* @param @param url
* @param @param request
* @param @return
* @return String
*/ public static String getZfbUserId(String auth_code){
String userId = "";
//组装参数
HashMap hashMap = new HashMap();
hashMap.put("app_id", APP_ID);
hashMap.put("method", "alipay.system.oauth.token");
hashMap.put("charset", "GBK");
hashMap.put("sign_type", "RSA");
hashMap.put("timestamp", DateUtils.getTime(new Date()));
hashMap.put("grant_type", "authorization_code");
hashMap.put("code", auth_code);
hashMap.put("version", "1.0");
String createLinkString = createLinkString(hashMap);
String sign = RSA.sign(createLinkString, PRIVATE_KEY, "GBK");
hashMap.put("sign", sign);
//请求支付宝接口
post = HttpRequestsUtils.post(ZFB, hashMap, true);
if(!post.contains("error_response")){
JSONObject object = JSONObject.parseObject(post);
String alipay_system_oauth_token_response = object.getString("alipay_system_oauth_token_response");
if(alipay_system_oauth_token_response != null){
JSONObject object2 = JSONObject.parseObject(alipay_system_oauth_token_response);
if(object2 != null){
userId = object2.getString("user_id");
//得到结果
System.out.println(userId);
} catch (IOException e) {
e.printStackTrace();
return userId;
} 这与微信的区别有点大,封装的参数比较多,获取个userid就得封装这么多参数,也可能是支付宝的安全机制要求的较高吧,这里需要支付宝的appid;要请求的方法method,就是上面的alipay.system.oauth.token;编码charset,一般是GBK,也支持utf-8,根据自己的需要来;然后是签名类型sign_type,这个比较重要,支付宝用的签名方式是RSA,为什么安全性较高,也许就在这吧;然后是时间戳timestamp;然后是grant_type,获取用户信息时填写固定值authorization_code;然后是code,就是授权成功后获取到的那个auth_code,特别注意,请求这个接口时键名为code,而不是auth_code;最后是版本号version,写固定值1.0即可;封装好参数之后利用RSA进行签名,签名后将sign参数也封装到参数的map中,最后请求支付宝的接口("/gateway.do")获取数据就ok了。 三、我已将上述功能封装为工具类,实在不懂的话就copy and paste , then run: 1、支付请求工具类 package com.hc360.rhfgateway.web.import java.io.BufferedRimport java.io.IOEimport java.io.InputSimport java.io.InputStreamRimport java.io.OutputSimport java.io.UnsupportedEncodingEimport java.net.URL;import java.net.URLEimport java.util.ArrayLimport java.util.Cimport java.util.Dimport java.util.HashMimport java.util.Limport java.util.Mimport java.util.ResourceBimport javax.net.ssl.HttpsURLCimport javax.net.ssl.SSLCimport javax.net.ssl.SSLSocketFimport javax.net.ssl.TrustMimport javax.servlet.http.HttpServletRimport javax.servlet.http.HttpServletRimport com.alibaba.fastjson.JSONOimport com.mon.util.DateUimport com.mon.util.HttpRequestsUimport com.hc360.rhfgateway.web.util.alipay.RSA;/** *
* @项目名称:rhfgateway * @类功能说明:支付请求工具类 * @类修改者: * @修改日期: * @修改说明: * @公司名称:慧聪云信大数据科技有限公司 * @作者:anyou * @创建时间:日 上午10:22:26 * @版本:V1.0 */public class PayRequestUtil { private static ResourceBundle resb1 = ResourceBundle.getBundle("payapi"); public static String WEXIN_USER_TOKEN = "https://api./sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code"; public static String WEXIN_USER_GETCODE = "https://open./connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect"; public static String ZFB = "/gateway.do"; public static String ZFBOUATH = "/oauth2/publicAppAuthorize.htm?app_id=APPID&scope=SCOPE&redirect_uri=ENCODED_URL"; // APPID private static String APPID = resb1.getString("APPID"); //APPSECRET private static String APPSECRET = resb1.getString("APPSECRET"); //支付宝app_id private static String APP_ID = resb1.getString("app_id"); //支付宝开发这私钥 private static String PRIVATE_KEY = resb1.getString("private_key"); //支付宝公钥 private static String ALIPAY_PUBLIC_KEY = resb1.getString("alipay_public_key");
* @方法功能说明:判断请求来自于什么支付客户端;wechat:微信,alipay:支付宝,baiduwallet:百度钱包,qq:qq钱包
* @方法修改者:
* @修改日期:
* @修改说明:
* @作者:anyou
* @创建时间:日 上午10:44:15
* @param @param request
* @param @return
* @return String
*/ public static String payClient(HttpServletRequest request){
String payType = "";
String agent = request.getHeader("User-Agent").toLowerCase();
if (agent.contains("micromessenger")) {
payType = "wechat";
}else if(agent.contains("alipaydefined")){
payType = "alipay";
}else if(agent.contains("baiduwallet")){
payType = "baiduwallet";
}else if(agent.contains("qq")){
payType = "qq";
return payT } /**
* @方法功能说明:https请求忽略证书
* @方法修改者:
* @修改日期:
* @修改说明:
* @作者:anyou
* @创建时间:日 上午11:03:45
* @param @param url
* @param @param method
* @param @param data
* @param @return
* @return String
*/ public static String httpsRequest(String url, String method, String data) {
// 创建SSLContext对象
TrustManager[] tm = { new Webtrust() };
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, new java.security.SecureRandom());
SSLSocketFactory ssf = sslContext.getSocketFactory();
URL _url = new URL(url);
HttpsURLConnection conn = (HttpsURLConnection) _url
.openConnection();
conn.setSSLSocketFactory(ssf);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod(method);
// 传送数据
if (null != data) {
OutputStream outputStream = conn.getOutputStream();
// 注意编码格式
outputStream.write(data.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();
return buffer.toString();
} catch (Exception e) {
e.printStackTrace();
* @方法功能说明:获取微信用户token
* @方法修改者:
* @修改日期:
* @修改说明:
* @作者:anyou
* @创建时间:日 上午11:06:53
* @param @param appid
* @param @param secret
* @param @param code
* @param @return
* @return String
*/ public static String getWEXIN_USER_TOKEN(String appid,String secret,String code) {
return WEXIN_USER_TOKEN.replace("APPID", appid).replace("SECRET", secret).replace("CODE", code); } /**
* @方法功能说明:获取支付宝授权
* @方法修改者:
* @修改日期:
* @修改说明:
* @作者:anyou
* @创建时间:日 下午3:52:37
* @param @param app_id
* @param @param redirect_uri
* @param @return
* @return String
*/ public static String getZFBOUATH(String app_id,String redirect_uri, String scope) {
return ZFBOUATH.replace("APPID", app_id).replace("ENCODED_URL", redirect_uri).replace("SCOPE", scope); } /**
* @方法功能说明:获取code
* @方法修改者:
* @修改日期:
* @修改说明:
* @作者:anyou
* @创建时间:日 上午11:38:32
* @param @param appid
* @param @param redirect_uri
* @param @param response_type
* @param @param scope
* @param @param state
* @param @return
* @return String
*/ public static String getWEXIN_USER_GETCODE(String appid,String redirect_uri,String response_type,String scope,String state) {
return WEXIN_USER_GETCODE.replace("APPID", appid).replace("REDIRECT_URI", redirect_uri).replace("RESPONSE_TYPE", response_type).replace("SCOPE", scope).replace("STATE", state); } /**
* @方法功能说明:获取微信用户的openid
* @方法修改者:
* @修改日期:
* @修改说明:
* @作者:anyou
* @创建时间:日 上午11:29:35
* @param @param code
* @param @return
* @return String
*/ public static String getOpenid(String code){
String openid = "";
String url = getWEXIN_USER_TOKEN(APPID,APPSECRET,code);
String resp = httpsRequest(url, "GET", null);
if(!resp.contains("errcode")){
JSONObject object = JSONObject.parseObject(resp);
openid = object.getString("openid");
* @方法功能说明:获取支付宝的userid
* @方法修改者:
* @修改日期:
* @修改说明:
* @作者:anyou
* @创建时间:日 下午4:14:39
* @param @param url
* @param @param request
* @param @return
* @return String
*/ public static String getZfbUserId(String auth_code){
String userId = "";
//组装参数
HashMap hashMap = new HashMap();
hashMap.put("app_id", APP_ID);
hashMap.put("method", "alipay.system.oauth.token");
hashMap.put("charset", "GBK");
hashMap.put("sign_type", "RSA");
hashMap.put("timestamp", DateUtils.getTime(new Date()));
hashMap.put("grant_type", "authorization_code");
hashMap.put("code", auth_code);
hashMap.put("version", "1.0");
String createLinkString = createLinkString(hashMap);
String sign = RSA.sign(createLinkString, PRIVATE_KEY, "GBK");
hashMap.put("sign", sign);
//请求支付宝接口
post = HttpRequestsUtils.post(ZFB, hashMap, true);
if(!post.contains("error_response")){
JSONObject object = JSONObject.parseObject(post);
String alipay_system_oauth_token_response = object.getString("alipay_system_oauth_token_response");
if(alipay_system_oauth_token_response != null){
JSONObject object2 = JSONObject.parseObject(alipay_system_oauth_token_response);
if(object2 != null){
userId = object2.getString("user_id");
//得到结果
System.out.println(userId);
} catch (IOException e) {
e.printStackTrace();
return userId;
* @方法功能说明:支付宝授权
* @方法修改者:
* @修改日期:
* @修改说明:
* @作者:anyou
* @创建时间:日 下午6:43:12
* @param @param response
* @param @param url
* @param @param request
* @return void
*/ public static void zfboauthResp(HttpServletResponse response,String url, HttpServletRequest request){
String reqUrl = getBaseUrl(request)+url+getUrlParameter(request);
reqUrl = URLEncoder.encode(reqUrl, "utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
String _url = getZFBOUATH(APP_ID, reqUrl, "auth_base");
response.sendRedirect(_url);
} catch (IOException e) {
e.printStackTrace();
* @方法功能说明:微信授权
* @方法修改者:
* @修改日期:
* @修改说明:
* @作者:anyou
* @创建时间:日 上午11:39:59
* @param @param response
* @param @param url
* @param @param request
* @return void
*/ public static void oauthResp(HttpServletResponse response,String url, HttpServletRequest request){
String reqUrl = getBaseUrl(request)+url+getUrlParameter(request);
reqUrl = URLEncoder.encode(reqUrl, "utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
String _url = getWEXIN_USER_GETCODE(
APPID, reqUrl, "code", "snsapi_base",
"sn_b");//snsapi_base sn_b静默授权snsapi_userinfo sn_u提示授权
response.sendRedirect(_url);
} catch (IOException e) {
e.printStackTrace();
* @方法功能说明:获取初参数外的全地址路径
* @方法修改者:
* @修改日期:
* @修改说明:
* @作者:anyou
* @创建时间:日 上午11:34:35
* @param @param request
* @param @return
* @return String
*/ public static String getBaseUrl(HttpServletRequest request){
String path = request.getContextPath();
String url = "";
String _port = ":"+request.getServerPort();
if(_port.equals(":80")||_port.equals(":443"))_port = "";
url = request.getScheme()+"://"+request.getServerName()+_port+
* @方法功能说明:参数封装
* @方法修改者:
* @修改日期:
* @修改说明:
* @作者:anyou
* @创建时间:日 上午11:36:38
* @param @param request
* @param @return
* @return String
*/ public static String getUrlParameter(HttpServletRequest request){
@SuppressWarnings("unchecked")
Map map = request.getParameterMap();
String pul = "";
if(map.size() > 0){
pul += "?";
for (String key : map.keySet()) {
String value = map.get(key)[0];
pul += key + "=" + value +"&";
pul = pul.substring(0, pul.length()-1);
* @方法功能说明:把数组所有元素排序,并按照“参数=参数值”的模式用“&”字符拼接成字符串
* @方法修改者:
* @修改日期:
* @修改说明:
* @作者:anyou
* @创建时间:日 下午12:35:17
* @param @param params
* @param @return
* @return String
*/public static String createLinkString(Map params) { List keys = new ArrayList(params.keySet()); Collections.sort(keys); String prestr = ""; for (int i = 0; i < keys.size(); i++) { String key = keys.get(i); String value = params.get(key); if (i == keys.size() - 1) {//拼接时,不包括最后一个&字符prestr = prestr + key + "=" + } else {prestr = prestr + key + "=" + value + "&"; } }}}2、http请求工具类(这是我公司一个大牛封装的,牛的一比) package com.mon.import java.io.IOEimport java.security.KeyManagementEimport java.security.KeyStoreEimport java.security.NoSuchAlgorithmEimport java.security.cert.X509Cimport java.util.ArrayLimport java.util.Limport java.util.Mimport javax.net.ssl.SSLCimport org.apache.http.HttpEimport org.apache.http.NameValuePimport org.apache.http.client.ResponseHimport org.apache.http.client.config.RequestCimport org.apache.http.client.entity.UrlEncodedFormEimport org.apache.http.client.methods.CloseableHttpRimport org.apache.http.client.methods.HttpGimport org.apache.http.client.methods.HttpPimport org.apache.http.conn.ssl.SSLConnectionSocketFimport org.apache.http.conn.ssl.SSLContextBimport org.apache.http.conn.ssl.TrustSimport org.apache.http.entity.StringEimport org.apache.http.impl.client.BasicResponseHimport org.apache.http.impl.client.CloseableHttpCimport org.apache.http.impl.client.HttpClientBimport org.apache.http.impl.client.HttpCimport org.apache.http.message.BasicNameValuePimport org.apache.http.util.EntityU/** *
* @ClassName: HttpRequestsUtils * @Description: http请求工具类 * @author Qawine * @version v1.0 * @date 日 下午5:37:26 * */public class HttpRequestsUtils { public static final String DEFAULT_CHARST = "GBK"; /**
* 方法功能说明:http client post请求 创建: by 朤朤先生 修改:日期 by 修改者 修改内容:
* @参数: @param url @参数: @param params @参数: @return @参数: @throws
* IOException @return String @throws
*/ public static String httpsPost(String url, List params, boolean b) throws IOException {
CloseableHttpClient httpclient =
httpclient = defaultSSL();
httpclient = HttpClientBuilder.create().build();
HttpPost httppost = new HttpPost(url);
httppost.setEntity(new UrlEncodedFormEntity(params));
CloseableHttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
String jsonStr = EntityUtils.toString(entity, DEFAULT_CHARST);
httppost.releaseConnection();
return jsonS } /**
* 方法功能说明:post 数据 创建: by 朤朤先生 修改:日期 by 修改者 修改内容:
* @参数: @param url @参数: @param map @参数: @return @参数: @throws
* IOException @return String @throws
*/ public static String post(String url, Map map, boolean b) throws IOException {
List params = new ArrayList();
if (map != null && map.size() > 0) {
for (String key : map.keySet()) {
params.add(new BasicNameValuePair(key, map.get(key)));
return httpsPost(url, params, b); } /**
* 方法功能说明:post json或者XML数据 创建: by 朤朤先生 修改:日期 by 修改者
* 修改内容: @参数: @param url @参数: @param data @参数: @param b true为xml false为json @参数: @return @return
* String @throws
*/ public static String postXMLorJson(String url, String data, boolean b) {
String returnValue = "这是默认返回值,接口调用失败";
CloseableHttpClient httpClient = HttpClients.createDefault();
ResponseHandler responseHandler = new BasicResponseHandler();
// 第一步:创建HttpClient对象
httpClient = HttpClients.createDefault();
// 第二步:创建httpPost对象
HttpPost httpPost = new HttpPost(url);
// 第三步:给httpPost设置JSON格式的参数
StringEntity requestEntity = new StringEntity(data, DEFAULT_CHARST);
requestEntity.setContentEncoding(DEFAULT_CHARST);
httpPost.setHeader("Content-type", "text/xml");
httpPost.setHeader("Content-type", "application/json");
httpPost.setEntity(requestEntity);
// 第四步:发送HttpPost请求,获取返回值
returnValue = httpClient.execute(httpPost, responseHandler);
} catch (Exception e) {
e.printStackTrace();
httpClient.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// 第五步:处理返回值
return returnV } /**
* @throws IOException @throws ClientProtocolException 方法功能说明:get请求
* 创建: by 朤朤先生 修改:日期 by 修改者 修改内容: @参数: @param url @参数: @param
* b @参数: @return @return String @throws
*/ public static String get(String url, boolean b) throws IOException {
String returnValue = "error";
CloseableHttpClient httpclient =
httpclient = defaultSSL();
httpclient = HttpClientBuilder.create().build();
HttpGet httpget = new HttpGet(url);
// 配置请求超时
RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(50).setConnectTimeout(50)
.setSocketTimeout(50).build();
httpget.setConfig(requestConfig);
CloseableHttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
returnValue = EntityUtils.toString(entity);//
httpget.releaseConnection();
return returnV } /**
* 方法功能说明:忽略证书 创建: by 朤朤先生 修改:日期 by 修改者 修改内容: @参数: @return @return
* CloseableHttpClient @throws
*/ @SuppressWarnings("deprecation") private static CloseableHttpClient defaultSSL() {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
// 信任所有
public boolean isTrusted(X509Certificate[] chain, String authType) {
}).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
return HttpClients.createDefault(); }}
最新教程周点击榜
微信扫一扫

我要回帖

更多关于 微信获取openid的接口 的文章

 

随机推荐