{
    分享网正式开通,我们为大家提供免费资源,欢迎大家踊跃投稿!

android开发微信登录(android端+Java后台)实例源码

本实例项目运行条件:

开发环境: 【Android Studio】

1. 到微信开放平台注册帐号并且创建移动应用

   https://open.weixin.qq.com/cgi-bin/frame?t=home/app_tmpl&lang=zh_CN

 

2. 获得移动应用的权限【微信登录】

 

3. 配置应用签名, 这个签名通过 android打包文件jks生成或者keystore生成

   签名文件生成方法:

    3.1  keytool -list -v -keystore jks文件(或者keystore文件)

   3.2 获取指纹证书md5值, 将md5中的冒号去掉, 大写换成小写   (详情)

   总结: 微信开放平台Android应用签名的本质便是我们签名文件jks(或者keystore)的MD5值

 

4. 应用程序开发完成后,debug模式是无法自动登录的,应用程序必须由相应的jks签名之后生成的apk包才能进行分享(微信会校验应用签名)

 

 

2. 流程讲解

1.1 打开app(第一张图),点击【微信登录】,打开微信登录授权页面(第二张图),点击【确认登录】,授权成功后,获得登录人的详细信息(如: openid(微信帐号对应相应应用的唯一标志字符串), 昵称, 头像)

        
               

 

3. 代码详解

 3.1 Android端

  3.1.1 引入微信相应的jar包

  

 

  3.1.2 在应用程序包名对应的路径下,新建包 wxapi, 添加新类 WXEntryActivity, 注意这里的包名与类名必须唯一

  

WXEntryActivity代码:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 public class WXEntryActivity extends BaseActivity implements IWXAPIEventHandler {       private static final String TAG = "WXEntryActivity";     private static final int RETURN_MSG_TYPE_LOGIN = 1;     private static final int RETURN_MSG_TYPE_SHARE = 2;       UserServiceImpl userService;         @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         userService = new UserServiceImpl();         Constant.wxApi.handleIntent(getIntent(), this);     }       @Override     protected void onNewIntent(Intent intent) {         super.onNewIntent(intent);         setIntent(intent);         Constant.wxApi.handleIntent(intent, this);     }       @Override     public void onReq(BaseReq req) {     }            @Override     public void onResp(BaseResp resp) {         switch (resp.errCode) {             case BaseResp.ErrCode.ERR_AUTH_DENIED:             case BaseResp.ErrCode.ERR_USER_CANCEL:                 if (RETURN_MSG_TYPE_SHARE == resp.getType()) {                     showToast("分享失败");                 } else if(RETURN_MSG_TYPE_LOGIN == resp.getType()) {                     showToast("微信自动登录失败");                 }                 finish();                 break;             case BaseResp.ErrCode.ERR_OK:                 switch (resp.getType()) {                     case RETURN_MSG_TYPE_LOGIN:                         //拿到了微信返回的code,立马再去请求access_token                         String code = ((SendAuth.Resp) resp).code;                         //使用微信进行第三方登录                         userService                                 .wxlogin(code)                                 .subscribe(new Action1<User>() {                                     @Override                                     public void call(User user) {                                         showToast(user.getOpenid());                                         Constant.user = user;                                         finish();                                     }                                 }, new Action1<Throwable>() {                                     @Override                                     public void call(Throwable throwable) {                                         Toast.makeText(WXEntryActivity.this, throwable.getMessage(), Toast.LENGTH_SHORT).show();                                         finish();                                     }                                 });                         break;                     case RETURN_MSG_TYPE_SHARE:                         showToast("微信分享成功");                         finish();                         break;                 }                 break;         }     } }

 

3.1.3 点击登录按钮事件代码

      判断微信客户端是否安装, 如果未安装则给个提示, 如果已经安装, 拉起微信授权页面,获得相应的code, 根据code去后台获得用户相应的信息(用户信息中不含有微信号)

1 2 3 4 5 6 7 8 9 10 11 12 @OnClick(R.id.login) public void login(){     if (!Constant.wxApi.isWXAppInstalled()) {         showToast("您还未安装微信客户端");         return;     }     final SendAuth.Req req = new SendAuth.Req();     req.scope = "snsapi_userinfo";     req.state = "diandi_wx_login";     Constant.wxApi.sendReq(req);     //finish(); }

 

3.2 JAVA后台代码

  3.2.1 由于后台需要调用微信提供的接口函数获取用户信息, 故需要引入相应的jar包

1 2 3 4 5 <dependency>     <groupId>com.github.liyiorg</groupId>     <artifactId>weixin-popular</artifactId>     <version>2.8.5</version> </dependency>

 

  3.2.2 配置微信应用对应的 AppID, AppSecret, 注意这里的配置千万不能出错

        获取用户信息的操作也可以放在android端,但为了AppID, AppSecret不被盗取,强烈建议放在后台

        

  

 

 3.2.3 根据前台传递的 code 与 后台的 APPID, AppSecret 获取用户信息,传递给android端用于显示

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 @Controller @RequestMapping("/wx") public class WxController {               public WxController() {         System.out.println("WxController构造函数");     }          //访问此资源的url:  http://localhost:8080/AutoLogin/wx/wxLogin.htm     @RequestMapping(value = "/wxLogin.htm", produces = MediaType.APPLICATION_JSON_VALUE)     @ResponseBody     public Result wxreg(HttpServletRequest request, String code){         Result result = new Result();                  String strAppId = ConfigManager.getInstance().getConfigItem("WXAppID");         String strAppSecret = ConfigManager.getInstance().getConfigItem("WXAppSecret");         SnsToken token = SnsAPI.oauth2AccessToken(strAppId, strAppSecret, code);                  BaseResult baseResult = SnsAPI.auth(token.getAccess_token(), token.getOpenid());                  if("0".equals(baseResult.getErrcode()) && "ok".equals(baseResult.getErrmsg())){             User user = SnsAPI.userinfo(token.getAccess_token(), token.getOpenid(), "zh-CN");             System.out.println("user: " + user.toString());             result.setStateCode("0");             result.setDesc("成功获得信信登录用户");             result.setData(user);         }else{             result.setStateCode("-1");             result.setDesc("成功获得信信登录用户");         }                  return result;     }            //测试函数     public static void main(String[] args)      {         // TODO Auto-generated method stub     }   }


资源均来自第三方,谨慎下载,前往第三方网站下载


米微资源分享网 , 版权所有丨本站资源仅限于学习研究,严禁从事商业或者非法活动!丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:android开发微信登录(android端+Java后台)实例源码
喜欢 ()分享 (0)