Android 微信授權登入、獲取個人資訊
阿新 • • 發佈:2019-02-10
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.example.hulei.wechatlogin.App;
import com.example.hulei.wechatlogin.R;
import com.example.hulei.wechatlogin.activity.MainActivity;
import com.example.hulei.wechatlogin.utils.HttpCallBackListener;
import com.example.hulei.wechatlogin.utils.HttpUtil;
import com.example.hulei.wechatlogin.utils.PrefParams;
import com.tencent.mm.sdk.modelmsg.SendAuth;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Created by asus on 2016/1/16.
*/
public class LoginActivity extends Activity {
public static final String TAG = "loginFragment";
private LinearLayout mLoginWeChat;
private IWXAPI api;
private ReceiveBroadCast receiveBroadCast;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.frag_login, container, false);
rootView.setTag(TAG);
mLoginWeChat = (LinearLayout) rootView.findViewById(R.id.layout_login_wx);
mLoginWeChat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
weChatAuth();
}
});
return rootView;
}
@Override
public void onResume() {
super.onResume();
receiveBroadCast = new ReceiveBroadCast();
IntentFilter filter = new IntentFilter();
filter.addAction("authlogin");
getActivity().registerReceiver(receiveBroadCast, filter);
}
@Override
public void onDestroy() {
super.onDestroy();
getActivity().unregisterReceiver(receiveBroadCast);
}
private void weChatAuth() {
if (api == null) {
api = WXAPIFactory.createWXAPI(LoginActivity.this, App.WX_APPID, true);
}
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wx_login_duzun";
api.sendReq(req);
}
public void getAccessToken() {
SharedPreferences WxSp = getApplicationContext()
.getSharedPreferences(PrefParams.spName, Context.MODE_PRIVATE);
String code = WxSp.getString(PrefParams.CODE, "");
final SharedPreferences.Editor WxSpEditor = WxSp.edit();
Log.d(TAG, "-----獲取到的code----" + code);
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
+ App.WX_APPID
+ "&secret="
+ App.WX_APPSecret
+ "&code="
+ code
+ "&grant_type=authorization_code";
Log.d(TAG, "--------即將獲取到的access_token的地址--------");
HttpUtil.sendHttpRequest(url, new HttpCallBackListener() {
@Override
public void onFinish(String response) {
//解析以及儲存獲取到的資訊
try {
JSONObject jsonObject = new JSONObject(response);
Log.d(TAG, "-----獲取到的json資料1-----" + jsonObject.toString());
String access_token = jsonObject.getString("access_token");
Log.d(TAG, "--------獲取到的access_token的地址--------" + access_token);
String openid = jsonObject.getString("openid");
String refresh_token = jsonObject.getString("refresh_token");
if (!access_token.equals("")) {
WxSpEditor.putString(PrefParams.ACCESS_TOKEN, access_token);
WxSpEditor.apply();
}
if (!refresh_token.equals("")) {
WxSpEditor.putString(PrefParams.REFRESH_TOKEN, refresh_token);
WxSpEditor.apply();
}
if (!openid.equals("")) {
WxSpEditor.putString(PrefParams.WXOPENID, openid);
WxSpEditor.apply();
getPersonMessage(access_token, openid);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(Exception e) {
Toast.makeText(getActivity(), "通過code獲取資料沒有成功", Toast.LENGTH_SHORT).show();
}
});
}
private void getPersonMessage(String access_token, String openid) {
String url = "https://api.weixin.qq.com/sns/userinfo?access_token="
+ access_token
+ "&openid="
+ openid;
HttpUtil.sendHttpRequest(url, new HttpCallBackListener() {
@Override
public void onFinish(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
Log.d(TAG, "------獲取到的個人資訊------" + jsonObject.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(Exception e) {
Toast.makeText(getActivity(), "通過openid獲取資料沒有成功", Toast.LENGTH_SHORT).show();
}
});
}
class ReceiveBroadCast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
getAccessToken();
Intent intent1 = new Intent(LoginActivity.this , MainActivity.class);
startActivity(intent1);
}
}
}
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.example.hulei.wechatlogin.App;
import com.example.hulei.wechatlogin.R;
import com.example.hulei.wechatlogin.activity.MainActivity;
import com.example.hulei.wechatlogin.utils.HttpCallBackListener;
import com.example.hulei.wechatlogin.utils.HttpUtil;
import com.example.hulei.wechatlogin.utils.PrefParams;
import com.tencent.mm.sdk.modelmsg.SendAuth;
import com.tencent.mm.sdk.openapi.IWXAPI;
import com.tencent.mm.sdk.openapi.WXAPIFactory;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Created by asus on 2016/1/16.
*/
public class LoginActivity extends Activity {
public static final String TAG = "loginFragment";
private LinearLayout mLoginWeChat;
private IWXAPI api;
private ReceiveBroadCast receiveBroadCast;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.frag_login, container, false);
rootView.setTag(TAG);
mLoginWeChat = (LinearLayout) rootView.findViewById(R.id.layout_login_wx);
mLoginWeChat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
weChatAuth();
}
});
return rootView;
}
@Override
public void onResume() {
super.onResume();
receiveBroadCast = new ReceiveBroadCast();
IntentFilter filter = new IntentFilter();
filter.addAction("authlogin");
getActivity().registerReceiver(receiveBroadCast, filter);
}
@Override
public void onDestroy() {
super.onDestroy();
getActivity().unregisterReceiver(receiveBroadCast);
}
private void weChatAuth() {
if (api == null) {
api = WXAPIFactory.createWXAPI(LoginActivity.this, App.WX_APPID, true);
}
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
req.state = "wx_login_duzun";
api.sendReq(req);
}
public void getAccessToken() {
SharedPreferences WxSp = getApplicationContext()
.getSharedPreferences(PrefParams.spName, Context.MODE_PRIVATE);
String code = WxSp.getString(PrefParams.CODE, "");
final SharedPreferences.Editor WxSpEditor = WxSp.edit();
Log.d(TAG, "-----獲取到的code----" + code);
String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="
+ App.WX_APPID
+ "&secret="
+ App.WX_APPSecret
+ "&code="
+ code
+ "&grant_type=authorization_code";
Log.d(TAG, "--------即將獲取到的access_token的地址--------");
HttpUtil.sendHttpRequest(url, new HttpCallBackListener() {
@Override
public void onFinish(String response) {
//解析以及儲存獲取到的資訊
try {
JSONObject jsonObject = new JSONObject(response);
Log.d(TAG, "-----獲取到的json資料1-----" + jsonObject.toString());
String access_token = jsonObject.getString("access_token");
Log.d(TAG, "--------獲取到的access_token的地址--------" + access_token);
String openid = jsonObject.getString("openid");
String refresh_token = jsonObject.getString("refresh_token");
if (!access_token.equals("")) {
WxSpEditor.putString(PrefParams.ACCESS_TOKEN, access_token);
WxSpEditor.apply();
}
if (!refresh_token.equals("")) {
WxSpEditor.putString(PrefParams.REFRESH_TOKEN, refresh_token);
WxSpEditor.apply();
}
if (!openid.equals("")) {
WxSpEditor.putString(PrefParams.WXOPENID, openid);
WxSpEditor.apply();
getPersonMessage(access_token, openid);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(Exception e) {
Toast.makeText(getActivity(), "通過code獲取資料沒有成功", Toast.LENGTH_SHORT).show();
}
});
}
private void getPersonMessage(String access_token, String openid) {
String url = "https://api.weixin.qq.com/sns/userinfo?access_token="
+ access_token
+ "&openid="
+ openid;
HttpUtil.sendHttpRequest(url, new HttpCallBackListener() {
@Override
public void onFinish(String response) {
try {
JSONObject jsonObject = new JSONObject(response);
Log.d(TAG, "------獲取到的個人資訊------" + jsonObject.toString());
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(Exception e) {
Toast.makeText(getActivity(), "通過openid獲取資料沒有成功", Toast.LENGTH_SHORT).show();
}
});
}
class ReceiveBroadCast extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
getAccessToken();
Intent intent1 = new Intent(LoginActivity.this
startActivity(intent1);
}
}
}