Android 微信登录

/1、首先你得到微信.开放平台申请开发权限:https://open.weixin.qq.com/

申请通过效果如下即可

 

2、其次,阅读开发文档:

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317851&token=5e2b1bed1e22d52b73509b9def8c200bf130fb3f&lang=zh_CN

 

3、接下来就是Android开发代码。分三步获取微信信息,用以登录

 

3/1常量类

public class Constants {// appidpublic static final String APP_ID = "wx1201a018fdcec6";public static final String SECRET = "fc866ba851439dead6a09a480de179";// 商户号public static final String MCH_ID = "15171351";/*** 微信开放平台和商户约定的支付密钥** 注意:不能hardcode在客户端,建议genSign这个过程由服务器端完成*/public static final String APP_KEY = "01b2e2bd220db0c3765609ebc9b59f";}

3/2起调微信登录

//微信登录private void wxlogin(){String  strState = getPackageName() + String.valueOf(System.currentTimeMillis());String SCOPE = "snsapi_userinfo";IWXAPI api;api = WXAPIFactory.createWXAPI(LiteActivity.this, Constants.APP_ID, false);api.registerApp(Constants.APP_ID);if (!api.isWXAppInstalled()) {Toast.makeText(LiteActivity.this,"请先安装微信客户端!",Toast.LENGTH_LONG).show();return;}final SendAuth.Req req = new SendAuth.Req();req.scope = SCOPE;req.state = strState;api.sendReq(req);}

3/3获取微信回调结果,微信开发必要activity

/*** 微信分享回调*/
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {private IWXAPI wxAPI;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);wxAPI = WXAPIFactory.createWXAPI(this, Constants.APP_ID,true);wxAPI.registerApp(Constants.APP_ID);wxAPI.handleIntent(getIntent(), this);}@Overrideprotected void onNewIntent(Intent intent){super.onNewIntent(intent);wxAPI.handleIntent(getIntent(),this);Log.i("ansen","WXEntryActivity onNewIntent");}@Overridepublic void onReq(BaseReq arg0) {Log.i("ansen","WXEntryActivity onReq:"+arg0);}@Overridepublic void onResp(BaseResp resp){if(resp.getType()== ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX){//分享Log.i("ansen","微信分享操作.....");}else if(resp.getType()==ConstantsAPI.COMMAND_SENDAUTH){//登陆SendAuth.Resp authResp = (SendAuth.Resp) resp;String code = authResp.code;TestObServernotice.getInstance().notifyObserver(111, 2, code);Log.i("ansen", "微信登录操作.....");}finish();}
}

 配置微信activity

<activityandroid:name=".wxapi.WXEntryActivity"android:configChanges="orientation|keyboardHidden"android:exported="true"android:screenOrientation="portrait"android:windowSoftInputMode="stateHidden|adjustPan"/>

 

3/4  resp结果如下。

请求微信接口

public static final String wxlogurl = "https://api.weixin.qq.com/sns/userinfo";
public static final String wxlogurl2 = "https://api.weixin.qq.com/sns/oauth2/access_token";

3/5通过观察者模式,回到activity中,根据code获取token

请求如下:,这里是asyncHttp框架。你可以使用其他请求网络类

private void getUserInfo(final String access_token, final String openid) {String url = Url.wxlogurl2;RequestParams params = new RequestParams();params.put("appid", openid);params.put("secret", Constants.SECRET);params.put("code", access_token);params.put("grant_type", "authorization_code");more_loadDialog.setloadtext("登录中...");more_loadDialog.show();AsyncHttpClient client = new AsyncHttpClient();client.post(url, params, new TextHttpResponseHandler() {@Overridepublic void onFailure(int i, Header[] headers, String s, Throwable throwable) {more_loadDialog.dismiss();Toast.makeText(LiteActivity.this, "网络连接异常", Toast.LENGTH_SHORT).show();}@Overridepublic void onSuccess(int i, Header[] headers, String s) {try {more_loadDialog.dismiss();JSONObject object = new JSONObject(s);String at = object.getString("access_token");getUserInfoend(at,Constants.APP_ID);Log.i("lgq", "re==logtest=====" + s);} catch (JSONException e) {e.printStackTrace();}}});
}

结果如下

3/6根据token获取微信账号详情

请求如下

private void getUserInfoend(final String access_token, final String openid) {String url = Url.wxlogurl;RequestParams params = new RequestParams();params.put("openid", openid);params.put("access_token", access_token);more_loadDialog.setloadtext("登录中...");more_loadDialog.show();AsyncHttpClient client = new AsyncHttpClient();client.post(url, params, new TextHttpResponseHandler() {@Overridepublic void onFailure(int i, Header[] headers, String s, Throwable throwable) {more_loadDialog.dismiss();Toast.makeText(LiteActivity.this, "网络连接异常", Toast.LENGTH_SHORT).show();}@Overridepublic void onSuccess(int i, Header[] headers, String s) {try {more_loadDialog.dismiss();JSONObject object = new JSONObject(s);Log.i("lgq", "re==logtest=====" + s);} catch (JSONException e) {e.printStackTrace();}}});
}

结果如下:

4、所有微信信息已经请求得到了。接下来就是。需要什么参数登录,就使用什么参数登录了 !!!!!!

 

观察者模式类TestObServernotice:https://blog.csdn.net/meixi_android/article/details/81016359

 

在线回复解决bug:qq1085220040

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决ubuntu16.04 qt5.9.1无法输入中文

1. 安装 fcitx-frontend-qt5 sudo apt-get install fcitx-frontend-qt5 2. 确认该路径下存在的文件 /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitxplatforminputcontextplugin.so 3. 将libfcitxplatforminputcontextplugin.so 复制到以下两个路径下&…

工作198:无法选中的状态一定要绑定在select上面

<el-form-item prop"department_id" label"所属部门" :label-width"formLabelWidth"><select-form change"DepartmentList" v-model"form.department_id" /></el-form-item><el-form-item v-show&quo…

惊天大神坑 关于 python-socketio 与 socket.io-client 版本兼容问题

在使用fastapi进行开发中&#xff0c;使用python-socketio作为socketi库&#xff0c;前端项目使用vue开发&#xff0c;配合socket.io-client作为client端。 我的python-socketio版本号为4.6.0 前端socket.io-client我默认安装的最新的&#xff0c;此时最新的是3.0.4,但是发现…

vscode 1.9.11 和pycharm 5.0.4 输入os.getcwd()后输出不相同

各位&#xff0c;vscode的坑&#xff1b; os.getcwd()获取当前文件的位置 例如文件目录级&#xff1a; g:\test\123 vscode 输出的是父目录的位置 实际输出的结果为&#xff1a;g:\test 预期结果:g:\test\123&#xff08;这个才是正确的&#xff09; pycharm os.getcwd() 输出…

Bitmap添加文字水印

private static Bitmap AddTimeWatermark(Bitmap mBitmap) {//获取原始图片与水印图片的宽与高int mBitmapWidth mBitmap.getWidth();int mBitmapHeight mBitmap.getHeight();Bitmap mNewBitmap Bitmap.createBitmap(mBitmapWidth, mBitmapHeight, Bitmap.Config.ARGB_8888)…

工作199:获取接口token

1第一步设置token getAction("/user/info").then(res>{Vue.ls.set(Set_Token,res.data.access_token)}) 2第二步 设置token serviceXing.interceptors.request.use(function (config) {// Do something before request is sent//window.localStorage.getItem(&…

mongoose查找若存在,则什么都不做,若不存在,则插入

直接上代码&#xff1a; ModelSchema.findOneAndUpdate( {id: searchId}, { $setOnInsert: {id: searchId,foo: foo,bar: bar,} }, { upsert: true }) .catch(error > console.error(error));

Android 启动白屏,简单解决方法

1、打开styles、找到ThemeSplash&#xff0c;或者AppTheme 添加windowBackground即可/windowFullscreen是满屏属性。可去掉 也就是添加启动背景图 <style name"ThemeSplash" parent"Theme.AppCompat.Light.NoActionBar"><item name"android…

工作200:视频上传和图片编辑功能

1眼睛一定要看清 本地接口 稳得很

highcharts x轴 按照时间 datetime排序

1、我的配置文件代码&#xff1a; var chart Highcharts.chart(warningCharts, {chart: {type: line,},style: {fontSize: 12px,color: #006cee,padding: 10rpx,},title: {text: null,},subtitle: {text: null,},series: data,xAxis: {type: datetime,dateTimeLabelFormats: …

Android 起调系统功能,打开系统浏览器,拨打电话,发送短信,手机震动,跳转到设置通知开关页面

1、打开系统浏览器 try {startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/jaredrummler/MaterialSpinner"))); } catch (ActivityNotFoundException ignored) { } 2、拨打电话 Intent intent new Intent(Intent.ACTION_DIAL, Uri.pa…

B. 重载技术(overloading)

转载于:https://www.cnblogs.com/youyuanjuyou/p/8120968.html

Highchart series一次只显示一条

核心代码如下&#xff1a; plotOptions: {series: {events: {show: function () {const chart this.chartconst series chart.serieslet i series.lengthlet otherSerieswhile (i--) {otherSeries series[i];if (otherSeries ! this && otherSeries.visible) {oth…

android xml中设置水平虚线及竖直虚线

水平线背景 <?xml version"1.0" encoding"utf-8"?> <shape xmlns:android"http://schemas.android.com/apk/res/android"android:shape"line"><strokeandroid:width"1dp"android:color"color/colorA…

highcharts默认选中最后一个点数据

效果图如下&#xff1a; 核心代码如下&#xff1a; chart: {type: line,events: {load: function () {let chart thisconst points []Highcharts.each(chart.series, function (s) {if (s.visible) {points.push(s.points[s.points.length - 1])}})chart.tooltip.refresh(p…

Ajax——php基础知识(二)

header header(content-type:text/html; charset utf-8);//设置编码格式为:utf-8 header(location:http://www.baidu.com);//设置跳转到百度首页 header(refresh:3; urlhttp://www.xiaomi.com);//设置页面间隔刷新 数据类型 <?phpheader("content-type:text/html;char…

python utc 时间

python中&#xff0c;我们使用datetime处理日期、时间相关。 获取当前时间&#xff0c;主要有两个方法&#xff1a; datetime.now datetime.now()&#xff1a;读取的时间是系统的本地时间&#xff0c;也就是说&#xff0c;如果系统时区默认没有设置&#xff0c;那么读取的就是世…

[02] JSP内置对象

1、内置对象的来历JSP是由一些内置对象的&#xff0c;即不需要定义&#xff0c;也不需要我们主动创建&#xff0c;就可以直接使用的对象。当然&#xff0c;其对象名称也是固定的&#xff0c;无法修改&#xff0c;我们可以直接调用其相关方法。在 [01] JSP的基本认识 已经说过JS…

上传Android应用到腾讯应用宝,乐固加固应用使用

当我们开发完安卓系统APP之后。需要上传到应用市场 在上传到腾讯应用宝是&#xff0c;需要使用腾讯加固工具 乐固 加固apk。才能正常上架。 如没有加固应用会提示&#xff1a; 加固步骤: 1、下载乐固包&#xff1a;https://download.csdn.net/download/meixi_android/107534…