当前位置:首页 > 安卓源码 > VIP源码 > 安卓应用 >

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

时间:2018-01-27 11:37 来源:互联网 作者:源码搜藏 浏览: 收藏 挑错 推荐 打印

  • 源码类别:安卓应用
  • 源码大小:未知
  • 编码格式:gbk
  • 运行环境:Android studio
  • 官方网址:暂无
  • 下载权限:单独购买10金币
  • 欢迎加入QQ群讨论学习
  • Android学习交流
  • IDC/源码/项目-广告推荐

本实例项目运行条件:

开发环境: 【Android Studio】

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

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

blob.png

 

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

blob.png

 

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

   签名文件生成方法:

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

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

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

blob.png

 

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

 

 

2. 流程讲解

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

blob.pngblob.png        blob.png
               

 

3. 代码详解

 3.1 Android端

  3.1.1 引入微信相应的jar包

  blob.png

 

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

  blob.png

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不被盗取,强烈建议放在后台

        

  blob.png

 

 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
    }
 
}

本站资源仅限于学习研究,严禁从事商业或者非法活动!android开发微信登录(android端+Java后台)实例源码转载请注明出处https://www.codesocang.com/appvip-yy/38393.html 源码搜藏网所有源码来自互联网转载与用户上传分享,如果侵犯了您的权益请与我们联系,我们将在24小时内删除!谢谢!

安卓应用下载排行

最新文章