我的微信号被android 微信授权登录登录了

微信第三方登录Android实现代码
转载 & & 作者:just_young
本篇文章主要介绍了微信第三方登录Android实现代码,可以通过微信登陆到第三方应用,有需要的可以了解一下。
记录一下微信第三方实现登录的方法。还是比较简单。
一、必要的准备工作
1.首先需要注册并被审核通过的微信开放平台帐号,然后创建一个移动应用,也需要被审核;
2.然后到资源中心下载开发微信所需的工具;
下载的网址:,有一个是SDK,一个是签名生成工具还有一个范例代码。
3.将SDK文件夹lib下的jar文件libammsdk.jar导入到项目工程中;
4.你的测试手机需要装好微信客户端;
5.在项目的AndroidManifest.xml文件中添加如下的权限:
&uses-permission android:name="android.permission.INTERNET"/&
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/&
&uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/&
&uses-permission android:name="android.permission.READ_PHONE_STATE"/&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/&
6.因为微信登录后会返回结果到我们自己的应用,因此,我们需要按如下的规则来建立一个可供回调的Activity
a. 在包名(申请移动应用时所填的包名)下新建一个名为wxapi的包,然后再在wxapi的包中新增一个WXEntryActivity类,这个类需要继承自Activity。
然后再在这个AndroidManifest.xml文件中,将这个activity的export属性设置为true,如下所示。
android:name=".wxapi.WXEntryActivity"
android:label="@string/title_activity_wxlogin"
android:launchMode="singleTop"
android:exported="true"&
&intent-filter&
&action android:name="android.intent.action.MAIN" /&
&category android:name="android.intent.category.LAUNCHER" /&
&/intent-filter&
&/activity&
b. 实现IWXAPIEventHandler接口,微信发送的请求将回调到onReq方法,发送到微信请求的响应结果将回调到onResp方法
c. 在WXEntryActivity中将接收到的intent及实现了IWXAPIEventHandler接口的对象传递给IWXAPI接口的handleIntent方法,如下所示
api.handleIntent(getIntent(), this);
7.微信认证的时序图
这里有一点要注意,就是从上往下数第6个箭头,即通过code加上appid和appsecret换取access_token,其实这一步是在第三方应用服务器上做的,因为appsecret和access_token直接存储于客户端是非常不安全的。Android客户端获取code后,把这个code提交给应用服务器,应用服务器上保存有appsecret信息,由应用服务器来获取access_token,并用access_token来完成其它工作。
二、Android代码
在上一步添加的WXEntryActivity对应的类文件中添加必要的代码,我的代码如下:
package com.example.justyoung.logintest.
import android.content.I
import android.os.B
import android.support.v7.app.ActionBarA
import android.view.V
import android.widget.B
import android.widget.T
import com.example.justyoung.logintest.HttpsH
import com.example.justyoung.logintest.R;
import com.example.justyoung.logintest.fileExplorer.WXC
import com.tencent.mm.sdk.modelbase.BaseR
import com.tencent.mm.sdk.modelbase.BaseR
import com.tencent.mm.sdk.modelmsg.SendA
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.IWXAPIEventH
import com.tencent.mm.sdk.openapi.WXAPIF
import java.io.IOE
import java.security.KeyManagementE
import java.security.NoSuchAlgorithmE
import java.util.UUID;
public class WXEntryActivity extends ActionBarActivity implements IWXAPIEventHandler{
private Button wxL
private IWXAPI
private static S
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wxlogin);
wxLogin = (Button) findViewById(R.id.wx_login_button);
wxLogin.setOnClickListener(new WXLoginEvent());
api = WXAPIFactory.createWXAPI(this, WXConstant.APPID);
api.registerApp(WXConstant.APPID);
api.handleIntent(getIntent(), this);
public void onReq(BaseReq baseReq) {
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
api.handleIntent(intent, this);
public void onResp(BaseResp resp) {
switch (resp.errCode) {
case BaseResp.ErrCode.ERR_OK:
result = "OK";
SendAuth.Resp regResp = (SendAuth.Resp)
if (!regResp.state.equals(uuid))
String code = regResp.
new WXLoginThread("https://192.168.2.133:8443/CloudStorageServer/wechat/login?code=" + code).start();
case BaseResp.ErrCode.ERR_USER_CANCEL:
result = "USER_CANCEL";
case BaseResp.ErrCode.ERR_AUTH_DENIED:
result = "ERR_AUTH_DENIED";
result = "errcode_unknown";
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
class WXLoginEvent implements View.OnClickListener {
public void onClick(View v) {
uuid = UUID.randomUUID().toString();
final SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state =
api.sendReq(req);
private class WXLoginThread extends Thread {
public WXLoginThread(String url) {
this.url =
public void run() {
HttpsHelper httpsHelper = new HttpsHelper();
httpsHelper.prepareHttpsConnection(url);
String response = httpsHelper.connect();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
代码中的如下片段是用来拉起微信认证界面的。这里我使用了uuid来作为state参数,(该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验)。
uuid = UUID.randomUUID().toString();
final SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state =
api.sendReq(req);
在用户接受认证后,微信应用会回调IWXAPIEventHandler接口的onResp方法。在该方法中,首先判断返回的resp的状态,若是正常状态,则判断state,然后从再从resp中获取code值。至此客户端便完成了它的工作。
因为客户端保留appsecret和access_token是非常不安全的,因此剩余信息的获取应放到我们的应用服务器上进行。
三、应用服务器代码
在Anroid客户端获取到code后,可提交到我们自己的应用服务器,在我们的应用服务器再通过code,来获取access_token,openid等用户信息。
1.通过code获取access_token,openid的方法是使用GET请求,按以下方式请求微信接口:
2.通过access_token获取用户的一些信息的方式是通过GET请求使用微信的接口:
下面贴一下我自己使用的代码:
private void handle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String code = getParameter(request, "code");
if (isArgumentNullOrEmpty(code)) {
Log.logger.info("code为空");
Log.logger.info("收到code: " + code);
AccessToken accessToken = new AccessToken("/sns/oauth2/access_token", "authorization_code", code);
AccessToken.UserData userData = accessToken.getMetaData().getUserInfo();
... // userData中就是我们通过access_token获取的用户信息了。
} catch (WeiXinException e) {
Log.logException(e);
writeMessage(response, e.getMessage());
} catch (Exception e) {
Log.logException(e);
writeMessage(response, "login error");
package com.cyber_space.thirdparty.
import java.io.IOE
import java.lang.reflect.F
import java.net.URI;
import java.net.URISyntaxE
import org.apache.http.HttpE
import org.apache.http.client.ClientProtocolE
import org.apache.http.client.methods.CloseableHttpR
import org.apache.http.client.methods.HttpG
import org.apache.http.client.utils.URIB
import org.apache.http.entity.BufferedHttpE
import org.apache.http.impl.client.CloseableHttpC
import org.apache.http.impl.client.HttpC
import org.apache.http.util.EntityU
import com.cyber_space.util.JsonU
public class AccessToken {
CloseableHttpClient httpC
HttpGet httpG
* 用于公众号
* @throws URISyntaxException
public AccessToken() throws URISyntaxException {
uri = new URIBuilder().setScheme("https").setHost("api.weixin.qq.com").setPath("/cgi-bin/token")
.setParameter("grant_type", "client_credential").setParameter("appid", WeiXinConfig.APP_ID)
.setParameter("secret", WeiXinConfig.APP_SECRET).build();
httpClient = HttpClients.createDefault();
httpGet = new HttpGet(uri);
public AccessToken(String path, String grantType, String code) throws URISyntaxException {
uri = new URIBuilder().setScheme("https").setHost("api.weixin.qq.com").setPath(path)
.setParameter("grant_type", grantType).setParameter("appid", WeiXinConfig.APP_ID)
.setParameter("secret", WeiXinConfig.APP_SECRET).setParameter("code", code).build();
httpClient = HttpClients.createDefault();
httpGet = new HttpGet(uri);
public String getAccessToken() throws ClientProtocolException, IOException {
CloseableHttpResponse response =
response = httpClient.execute(httpGet);
HttpEntity httpEntity = response.getEntity();
if (httpEntity == null)
httpEntity = new BufferedHttpEntity(httpEntity);
String returnString = EntityUtils.toString(httpEntity);
String accessToken = com.cyber_space.util.JsonUtil.getAttribute(returnString, "access_token");
return accessT
} finally {
response.close();
* 获得用户的元数据信息,只包括openid和access_token
* @throws ClientProtocolException
* @throws IOException
* @throws WeiXinException
public UserData getMetaData() throws ClientProtocolException, IOException, WeiXinException {
CloseableHttpResponse response =
response = httpClient.execute(httpGet);
HttpEntity httpEntity = response.getEntity();
if (httpEntity == null)
httpEntity = new BufferedHttpEntity(httpEntity);
String returnString = EntityUtils.toString(httpEntity);
JsonUtil jUtil = new JsonUtil(returnString, JsonUtil.JSONOBJECT);
String error =
error = jUtil.getAttribute("errcode");
} catch (Exception e) {
if (error != null && !error.equals("")) {
throw new WeiXinException(WeiXinException.INVALID_OPENID);
String openid = jUtil.getAttribute("openid");
String accessToken = jUtil.getAttribute("access_token");
UserData uData = new UserData(openid, accessToken);
} finally {
response.close();
public class UserData {
public String accessT
public UserData(String openid, String accessToken) {
this.openid =
this.accessToken = accessT
public UserData getUserInfo()
throws IOException, IllegalArgumentException, IllegalAccessException, URISyntaxException, WeiXinException {
URI uri = new URIBuilder().setScheme("https").setHost("api.weixin.qq.com").setPath("/sns/userinfo")
.setParameter("access_token", this.accessToken).setParameter("openid", this.openid).build();
HttpGet httpGet = new HttpGet(uri);
CloseableHttpResponse response =
response = httpClient.execute(httpGet);
HttpEntity httpEntity = response.getEntity();
if (httpEntity == null)
httpEntity = new BufferedHttpEntity(httpEntity);
String jsonString = EntityUtils.toString(httpEntity);
JsonUtil jUtil = new JsonUtil(jsonString, JsonUtil.JSONOBJECT);
String errcode =
errcode = jUtil.getAttribute("errcode");
} catch (Exception e) {
// 通过反射循环赋值
if (errcode == null || errcode.equals("")) {
for (Field i : getClass().getFields()) {
if (!i.getName().equals("accessToken"))
i.set(this, jUtil.getAttribute(i.getName()));
throw new WeiXinException(WeiXinException.INVALID_ACCESSTOKEN);
} finally {
response.close();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
最近有个项目要集成微信第三方登录,而且要求用原生的SDK,客户端是Unity3D开发,所以需要用Android Studio来做个plugin给U3D,网上找了些资料,自己琢磨了一下,有几个问题1.拉起微信授权后,用户点击了登录,回到MainActivity,但是code却没有获取到,于是我在MainActivity里设置了个lock,还有在onResume方法里判断code是否已经返回了值,虽然能用,但是总觉得好别扭啊2.这个工程要打成arr文件给u3d用,请问怎么把code传给U3D,后续的获取access_token这些工作都是服务器端完成。下面是我写的代码,安卓下可以用,一切正常,能获取code,请教一下如何优化我的代码能在用户在微信授权里点完登录回到MainActivity后得到code,而且能打包成arr,u3D可以获取到,非常感谢,下面是我的代码
MainActivity
package com.mazingtec.
import android.os.B
import android.view.V
import android.widget.B
import android.widget.T
import com.mazingtec.hxddz.wxapi.WXEntryA
import com.tencent.mm.opensdk.modelmsg.SendA
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIF
import com.unity3d.player.UnityPlayerA
public class MainActivity extends UnityPlayerActivity implements View.OnClickListener {
boolean lock =
Button btnWeC
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnWeChat = (Button) findViewById(R.id.btnWeChat);
btnWeChat.setOnClickListener(this);
void onResume()
super.onResume();
if(WXEntryActivity.isOK && lock)
code = WXEntryActivity.CODE;
private void GetCode()
IWXAPI iwxapi = WXAPIFactory.createWXAPI(this, WXEntryActivity.APP_ID, true);
iwxapi.registerApp(WXEntryActivity.APP_ID);
if (iwxapi != null && iwxapi.isWXAppInstalled()) {
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "We_did_it";
iwxapi.sendReq(req);
Toast.makeText(this, "用户未安装微信", Toast.LENGTH_SHORT).show();
public void onClick(View v)
if(v == btnWeChat)
GetCode();
WXEntryActivity
package com.mazingtec.hxddz.
import android.app.A
import android.content.I
import android.os.B
import com.tencent.mm.opensdk.modelbase.BaseR
import com.tencent.mm.opensdk.modelbase.BaseR
import com.tencent.mm.opensdk.modelmsg.SendA
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventH
import com.tencent.mm.opensdk.openapi.WXAPIF
* Created by wei on .
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
public static final String APP_ID = "wxopq239o809uqewfojoasidfj";
private IWXAPI
public static String CODE;
public static boolean isOK =
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
iwxapi = WXAPIFactory.createWXAPI(this, APP_ID, true);
iwxapi.handleIntent(this.getIntent(), this);
protected void onNewIntent(Intent intent)
super.onNewIntent(intent);
setIntent(intent);
iwxapi.handleIntent(intent, this);
public void onReq(BaseReq baseReq) {
public void onResp(BaseResp baseResp)
switch (baseResp.errCode)
case BaseResp.ErrCode.ERR_OK:
//发送成功
SendAuth.Resp sendResp = (SendAuth.Resp) baseR
if (sendResp != null) {
CODE = sendResp.
WXEntryActivity.this.finish();
case BaseResp.ErrCode.ERR_USER_CANCEL:
WXEntryActivity.this.finish();
//发送取消
case BaseResp.ErrCode.ERR_AUTH_DENIED:
WXEntryActivity.this.finish();
//发送被拒绝
WXEntryActivity.this.finish();
//发送返回
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
问题是从WXEntryActivity 拿到的Code如何回传给MainActivity, 如果图方便的话通过Intent携带这个code, 返回给MainActivity就可以了, 在MainActivity中getIntent再取出这个code. 其次就是可以通过EventBus来解决, 不过有点得不偿失.
看着应该是Unity3D和android的通信问题吧? 网上解决方案蛮多的
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
泻药。没集成过微信登录,也没用过U3D,不敢妄下评论。但是我有个疑问,微信SDK回传的code不应该是通过onActivityResult之类的回传的么?
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。我在上微信登陆上出现被他人andoid-16设备登陆_百度知道
我在上微信登陆上出现被他人andoid-16设备登陆
的微信在android-16设备上有登录过.com修改QQ密码。什么叫安卓16设备,如非本人操作且微信绑定有QQ帐号,请前往aq.qq
我有更好的答案
android-16是他人的手机名称 也许是你用别人的手机玩过,曾经记住了帐号更改一下密码就好了
谢谢你袄。能不能是被盗号、别人被盗都会发乱七八杂的东西
微信用手机登的,被盗号的可能性不大
这个只是说别人在登陆你的账号,但是没有登陆成功,莫慌…
我的也出现了这种情况!!!
你们都是用的什么手机? 微信号的确是被盗了!
为您推荐:
其他类似问题
您可能关注的内容
andoid的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。详解Android微信登录与分享
转载 & & 作者:神话丿小王子
本篇文章主要对Android微信登录与分享功能的实现进行了介绍。具有很好的参考价值,下面跟着小编一起来看下吧
Android 使用微信登录、分享功能
具体的文档详情微信官网上介绍(),本人直接按照项目部署步骤进行讲解:
第一步:申请你的AppID;
第二步:依赖
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.0.2'
dependencies {
compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:1.0.2'
这两个依赖包的区别是前者包含统计功能,后者没有。
第三步:在AndroidManifest.xml中加入必须的权限
&uses-permission android:name="android.permission.INTERNET"/&
&uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/&
&uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/&
&uses-permission android:name="android.permission.READ_PHONE_STATE"/&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/&
第四步:注册到微信,微信的SDK在使用之前需要调用代码进行注册,注册可以是在调用微信SDK的Activity,但最好还是放到入口Activity或者Application中;
WxApplication.java
public static String APP_ID="你的APPID";
public static IWXAPI
public void onCreate() {
super.onCreate();
api = WXAPIFactory.createWXAPI(this, APP_ID, true);
api.registerApp(APP_ID);
第五步:微信登录。
&&& 5.1 点击你的微信登录按钮,进行微信授权,首先需要获取一个code值,在包名下新建一个包,这里必须这样,不能随意命名,比如你的项目包名是:come.shenhua.wx则新建的包为come.shenhua.wx.wxapi在该包下创建一个WXEntryActivity继承IWXAPIEventHandler;(注意Activity的命名也不能随意更改)
LoginActivity.java
private void onClickWeChatLogin() {
if (WxApplicaiton.api == null) {
WxApplication.api = WXAPIFactory.createWXAPI(this, WxApplication.APP_ID, true);
if (!WxApplication.api.isWXAppInstalled()) {
ToastUtils.toast("您手机尚未安装微信,请安装后再登录");
WxApplication.api.registerApp(WxApplication.APP_ID);
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wechat_sdk_xb_live_state";//官方说明:用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验
WxApplication.api.sendReq(req);
在AndroidManifest.xml中加入,(android:exported="true" 一定不能少)
android:name=".wxapi.WXEntryActivity"
android:exported="true" /&
WXEntryActivity.java
public class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
public static final String TAG = WXEntryActivity.class.getSimpleName();
public static S
public static BaseResp resp =
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wxentry);
boolean handleIntent = XBLiveApplication.api.handleIntent(getIntent(), this);
     //下面代码是判断微信分享后返回WXEnteryActivity的,如果handleIntent==false,说明没有调用IWXAPIEventHandler,则需要在这里销毁这个透明的A
if(handleIntent==false){
Log.d(TAG, "onCreate: "+handleIntent);
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
XBLiveApplication.api.handleIntent(intent, this);
public void onReq(BaseReq baseReq) {
Log.d(TAG, "onReq: ");
public void onResp(BaseResp baseResp) {
if (baseResp != null) {
resp = baseR
code = ((SendAuth.Resp) baseResp). //即为所需的code
switch (baseResp.errCode) {
case BaseResp.ErrCode.ERR_OK:
Log.d(TAG, "onResp: 成功");
case BaseResp.ErrCode.ERR_USER_CANCEL:
Log.d(TAG, "onResp: 用户取消");
case BaseResp.ErrCode.ERR_AUTH_DENIED:
Log.d(TAG, "onResp: 发送请求被拒绝");
resp和code定义成全局变量,在WXEntryWActivity页面销毁后登录页面会走onResume()方法,在这里开始其他操作
&&& 5.2 拿到code后在登录页面通过code获取access_token,官网的说法是:“access_token是调用授权关系接口的调用凭证,由于access_token有效期(目前为2个小时)较短,当access_token超时后,可以使用refresh_token进行刷新”,所以拿到access_token后再次请求进行refresh_token,刷新后拿到access_token即可发送请求获取微信用户信息了;
&&& 获取access_token的URL:AccessTokenUrl = "=你的appid&secret=你的AppSecret&code=授权获取到的code&grant_type=authorization_code";
&&& 刷新access_token的URL:Refresh_tokenUrl = "=你的appid&grant_type=refresh_token&refresh_token=上一步请求到的access_
&&& 获取用户信息URL:UserInfoUrl = "=刷新的access_token&openid=刷新access_token时获取的
protected void onResume() {
Log.d(TAG, "onResume: 1");
super.onResume();
//这里的判断是为了区分如果不是不是从WXEntryActivity页面销毁重启的,不走下面的代码
if (WXEntryActivity.resp != null) {
if (WXEntryActivity.resp.getType() == ConstantsAPI.COMMAND_SENDAUTH) {
Thread thread = new Thread(downloadRun);
thread.start();
thread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
public Runnable downloadRun = new Runnable() {
public void run() {
WXGetAccessToken();
//根据code获取access_token,这里用第三方volley框架进行post请求
private void WXGetAccessToken() {
String getAccessTokenUrl = AccessTokenU
StringRequest request = new StringRequest(Request.Method.GET, getAccessTokenUrl, new Response.Listener&String&() {
public void onResponse(String response) {
Log.d(TAG, "onResponse: " + response);
Gson gson = new Gson();
WeChatLoginTokenModel tokenModel = gson.fromJson(response, WeChatLoginTokenModel.class);
refresh_token = tokenModel.getRefresh_token();
WXGetRefreshAccessToken();
}, new Response.ErrorListener() {
public void onErrorResponse(VolleyError error) {
request.setTag("weChatGetToken");
XBLiveApplication.getHttpRequestQueue().add(request);
//拿到access_token后再次发送请求进行刷新access_token,拿到access_refresh和openid
private void WXGetRefreshAccessToken() {
String getRefresh_tokenUrl =Refresh_tokenU
StringRequest request = new StringRequest(Request.Method.GET, getRefresh_tokenUrl, new Response.Listener&String&() {
public void onResponse(String response) {
Gson gson = new Gson();
WeChatLoginTokenModel tokenModel = gson.fromJson(response, WeChatLoginTokenModel.class);
String access_token = tokenModel.getAccess_token();
String openid = tokenModel.getOpenid();
WXGetUserInfo(access_token, openid);
}, new Response.ErrorListener() {
public void onErrorResponse(VolleyError error) {
request.setTag("weChatGetRefreshToken");
XBLiveApplication.getHttpRequestQueue().add(request);
//获取用户信息
private void WXGetUserInfo(String access_token, String openid) {
String getUserInfoUrl =UserInfoUr;
StringRequest request = new StringRequest(Request.Method.GET, getUserInfoUrl, new Response.Listener&String&() {
public void onResponse(String response) {
Log.d(TAG, "onResponse3: " + response);
Gson gson = new Gson();
WeChatUserInfoModel userInfoModel = gson.fromJson(response, WeChatUserInfoModel.class);
String city = userInfoModel.getCity();
String userName = userInfoModel.getNickname();
String userIcon = userInfoModel.getHeadimgurl();
int sex = userInfoModel.getSex();//1:男;0:女;2:未知
String province = userInfoModel.getProvince();
openId_WX = userInfoModel.getOpenid();
ToastUtils.toast("登录成功");
}, new Response.ErrorListener() {
public void onErrorResponse(VolleyError error) {
    //下面代码是volley框架注册,请忽视
request.setTag("weChatGetUserInfo");
XBLiveApplication.getHttpRequestQueue().add(request);
注意一点:在做测试时,微信的应用签名必须要保持一致,比如你在官网填写的是没有打包签名的应用签名,你测试的APP也没有打包签名,那么是没有问题,但是如果你微信官网上填写的是已经上线经过打包签名的应用签名,那你在做测试时必须要用打包签名的应用去做测试。
第六步:微信分享到朋友圈:
第七步:微信分享到微信好友:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 android接入微信登录 的文章

 

随机推荐