微信登录
注意:
1.在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,并实现IWXAPIEventHandler
2.包名,appid要和微信开发者申请的一致
3.在build.gradle下配置
signingConfigs {
debug {
storeFile file('C:\\Users\\hp\\AndroidStudioProject\\demo.key.jks')
storePassword '111111'
keyPassword '111111'
keyAlias = 'key0'
}
}
包名修改完成后,对应的 applicationId " "中的包名也要修改
1.配置文件
<activity
android:name="com.personal.revenant.baoyouqian.wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:launchMode="singleTop"
android:screenOrientation="portrai
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
2.全局配置
package com.personal.revenant.baoyouqian.app;
import android.app.Application;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import com.personal.revenant.baoyouqian.utlis.Constant;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
public class Myapp extends Application {
public static Myapp instance;
public static Context mContext;
public static IWXAPI iwxapi;
@Override
public void onCreate() {
super.onCreate();
this.mContext = this;
instance = this;
registToWX();
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// 将该app注册到微信
iwxapi.registerApp(Constant.WEIXINAPPID);
}
}, new IntentFilter(ConstantsAPI.ACTION_REFRESH_WXAPP));
}
private void registToWX() {
//AppConst.WEIXIN.APP_ID是指你应用在微信开放平台上的AppID,记得替换。
iwxapi = WXAPIFactory.createWXAPI(this, Constant.WEIXINAPPID, false);
// 将该app注册到微信
iwxapi.registerApp(Constant.WEIXINAPPID);
}
public static Context getContext() {
return mContext;
}
}
3.调用接口
if (!Myapp.iwxapi.isWXAppInstalled()) {
toast("您的设备未安装微信客户端");
} else {
SendAuth.Req req = new SendAuth.Req();
req.scope = "snsapi_userinfo";
// req.state = "wechat_sdk_demo";
Myapp.iwxapi.sendReq(req);
}
4.回调
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
// 获取第一步的code后,请求以下链接获取access_token
private String GetCodeRequest = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
// 获取用户个人信息
private String GetUserInfo = "https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID";
private String access_token = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Myapp.iwxapi.handleIntent(getIntent(),this);
}
// 微信发送请求到第三方应用时,会回调到该方法
@Override
public void onReq(BaseReq baseReq) {
finish();
}
// 第三方应用发送到微信的请求处理后的响应结果,会回调到该方法
@Override
public void onResp(BaseResp baseResp) {
String result = "";
switch (baseResp.errCode) {
case BaseResp.ErrCode.ERR_OK:
result = "登录成功";
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
String code = ((SendAuth.Resp) baseResp).code;
/*
* 将你前面得到的AppID、AppSecret、code,拼接成URL 获取access_token等等的信息(微信)
*/
String get_access_token = getCodeRequest(code);
OkGo.<String>post(get_access_token)
.execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
if (!response.equals("")){
JSONObject jsonObject = null;
try {
jsonObject = new JSONObject(response.body());
access_token = jsonObject.getString("access_token");
String openid = jsonObject.getString("openid");
String get_user_info_url = getUserInfo(access_token, openid);
getUserInfo(get_user_info_url);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
});
finish();
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
result = "发送取消";
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
finish();
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
result = "发送被拒绝";
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
finish();
break;
default:
result = "发送返回";
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
finish();
break;
}
}
/**
* 通过拼接的用户信息url获取用户信息
*
* @param user_info_url
*/
private void getUserInfo(String user_info_url) {
OkGo.<String>get(user_info_url)
.execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
try {
JSONObject jsonObject = new JSONObject(response.body());
Toast.makeText(WXEntryActivity.this,response.body(),Toast.LENGTH_SHORT);
final String openid = jsonObject.getString("openid");
//String nickname = jsonObject.getString("nickname");
String headimgurl = jsonObject.getString("headimgurl");
Log.d("wxlogin", "onSuccess: "+response.body());
//第三方登录接口
OkGo.<String>post(Okgo.third)
.params("platform","wechat")
.params("code",access_token)
.params("openId",openid)
.execute(new StringCallback() {
@Override
public void onSuccess(Response<String> response) {
Toast.makeText(WXEntryActivity.this,"成功",Toast.LENGTH_SHORT);
Gson gson = new Gson();
WXLoginBean wxLoginBean = gson.fromJson(response.body(), WXLoginBean.class);
String token = wxLoginBean.getData().getUserinfo().getToken();
SPutils.setToken(WXEntryActivity.this, wxLoginBean.getData().getUserinfo().getToken());
Simple.getUserInfo(WXEntryActivity.this);
startActivity(new Intent(WXEntryActivity.this, MainActivity.class));
}
@Override
public void onError(Response<String> response) {
super.onError(response);
Toast.makeText(WXEntryActivity.this,"失败",Toast.LENGTH_SHORT);
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
});
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
Myapp.iwxapi.handleIntent(intent, this);
finish();
}
/**
* 获取access_token的URL(微信)
* @param code 授权时,微信回调给的
* @return URL
*/
private String getCodeRequest(String code) {
String result = null;
GetCodeRequest = GetCodeRequest.replace("APPID",
urlEnodeUTF8(Constant.WEIXINAPPID));
GetCodeRequest = GetCodeRequest.replace("SECRET",
urlEnodeUTF8(Constant.WEIXINSECRET));
GetCodeRequest = GetCodeRequest.replace("CODE", urlEnodeUTF8(code));
result = GetCodeRequest;
return result;
}
/**
* 获取用户个人信息的URL(微信)
*
* @param access_token
* 获取access_token时给的
* @param openid
* 获取access_token时给的
* @return URL
*/
private String getUserInfo(String access_token, String openid) {
String result = null;
GetUserInfo = GetUserInfo.replace("ACCESS_TOKEN",
urlEnodeUTF8(access_token));
GetUserInfo = GetUserInfo.replace("OPENID", urlEnodeUTF8(openid));
result = GetUserInfo;
return result;
}
private String urlEnodeUTF8(String str) {
String result = str;
try {
result = URLEncoder.encode(str, "UTF-8");
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
微信分享
1.调用接口
public void WXshare(String title, String url, String description, Context context) {
WXWebpageObject textObj = new WXWebpageObject();
textObj.webpageUrl = url;
WXMediaMessage msg = new WXMediaMessage(textObj);
msg.title=title;
msg.description = description;
//缩略图
Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.img_2);
Bitmap thumbBmp = Bitmap.createScaledBitmap(bmp, 150, 150, true);
bmp.recycle();
msg.thumbData = Util.bmpToByteArray(thumbBmp, true);
SendMessageToWX.Req req = new SendMessageToWX.Req();
req.transaction =buildTransaction("webpage");
req.message = msg;
req.scene = SendMessageToWX.Req.WXSceneSession;
//req.userOpenId =;
Myapp.iwxapi.sendReq(req);
}
public static String buildTransaction(final String type) {
return (type == null) ? String.valueOf(System.currentTimeMillis()) : type + System.currentTimeMillis();
}
2.工具类
public class Util {
private static final String TAG = "SDK_Sample.Util";
public static byte[] bmpToByteArray(final Bitmap bmp, final boolean needRecycle) {
ByteArrayOutputStream output = new ByteArrayOutputStream();
bmp.compress(CompressFormat.PNG, 100, output);
if (needRecycle) {
bmp.recycle();
}
byte[] result = output.toByteArray();
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}