这几天开发要用到微信授权的功能,所以就研究了一下。可是微信开放平台接入指南里有几个地方写的不清不楚。在此总结一下,以便需要的人。

很多微信公众平台的应用如果移植到app上的话就需要微信授权登陆了。

目前移动应用上微信登录只提供原生的登录方式,需要用户安装微信客户端才能配合使用。也就是如果第三方应用需要微信授权登陆的话就必须在本机上安装了微信。而后续授权登陆或调用接口之类的相当于app和微信两个应用之间通话。

1、首先需要注册微信开放平台,然后获取开发者认证。审批通过之后再创建一个移动应用同样还是需要审批。通过之后就可以给这个应用添加微信授权登陆以及相应功能了。这里移动应用审批通过之后会给你两个参数,一个叫AppId,一个叫Secret。这两个参数在后面用的到。

补充:写这篇文章有一段时间了。在这补充下大家容易出问题的几个地方。

1)大家在创建移动应用的时候注意的地方。

上面图片是申请移动应用时候的第二步,令我想不明白的是很多开发者还不知道应用包名和应用签名指的是什么。。。。。。。。

包名是你manifest文件里面顶层的那个package啊。

就是这个东西啊,这个东西啊少年。

2)应用签名。好吧我真不想啰嗦了。应用签名就是你同过ks文件得到的那个应用签名。如果你不知道如何获得这个签名。请按下面步骤走:

1,先把你的应用程序打包安装在你的手机上。

2,下载官网上提供的签名生成工具并安装在手机上。下面这个地方下载:

3、打开签名生成工具输入你的app的包名就生成你的应用签名了。

2、在需要微信授权的项目中导入微信的第三方JAR包,这个在微信开放平台接入指南里面说的很清楚,不再啰嗦。

3、注册到微信:

这一步也没什么课解释的,相当于两人要联系的时候先打通了电话,然后开始沟通。这一步在需要和微信通话的界面之前注册了就行。我的是在欢迎界面注册的。

4、开始和微信通话

首先和微信通话之前,要在项目代码中新建一个Activity,并提供相应的回调方法供微信调用。但是这一点在接入指南上写的就不清不楚导致我浪费了好几个小时。一下内容是我在接入指南里复制来的。

a. 在你的包名相应目录下新建一个wxapi目录,并在该wxapi目录下新增一个WXEntryActivity类,该类继承自Activity(例如应用程序的包名为net.sourceforge.simcpux,则新添加的类如下图所示)

并在manifest文件里面加上exported属性,设置为true。

一定要注意上面这句话:在你的包名相应目录下新建一个wxapi目录。说的是在包名相应目录下建一个wxapi目录。也就是是包名目录的子目录,千万不要直接在src下面建个包就完了。(粗心这毛病害死人啊。)

然后再这个包下面建一个类:

[java]  view plain copy
  1. <pre name="code" class="java">public class WXEntryActivity extends Activity implements IWXAPIEventHandler{

  2. private IWXAPI api;

  3. @Override

  4. protected void onCreate(Bundle savedInstanceState) {

  5. // TODO Auto-generated method stub

  6. super.onCreate(savedInstanceState);

  7. setContentView(R.layout.flash_activity);

  8. <span style="color:#3366ff;">api = WXAPIFactory.createWXAPI(this, Property.wxLoginInfo.getAppid(), false);

  9. api.handleIntent(getIntent(), this);</span>

  10. }

  11. @Override

  12. public void onReq(BaseReq arg0) {

  13. // TODO Auto-generated method stub

  14. }

  15. @Override

  16. public void onResp(BaseResp resp) {

  17. Bundle bundle = new Bundle();

  18. switch (resp.errCode) {

  19. case BaseResp.ErrCode.ERR_OK:

  20. //      可用以下两种方法获得code

  21. //      resp.toBundle(bundle);

  22. //      Resp sp = new Resp(bundle);

  23. //      String code = sp.code;<span style="white-space:pre">

  24. //      或者

  25. String code = ((SendAuth.Resp) resp).code;

  26. //上面的code就是接入指南里要拿到的code

  27. break;

  28. default:

  29. break;

  30. }

  31. }

  32. }

注意:上面是获取code。现在最新的官方jar包好像不支持获得code了。直接就能得到token,省略了获取code 这一步。所以方法不变,大家取的时候直接resp.token就行了。不用再去取code了。但是,但是,这样直接拿到token了好像按照官方文档上的方法就不能获得openid了。我也没尝试有什么新的方法,反正是jar包更新了但是文档还没更新,大家弄不成功的话可以先用旧的jar和上面获取code的方法。点击下载旧版jar包

这是那个WXEntityAcitivity的部分代码。结合接入指南,大家应该都看的懂。

然后开始和微信通话,

[java]  view plain copy
  1. </pre><pre name="code" class="java">{

  2. // send oauth request

  3. Final SendAuth.Req req = new SendAuth.Req();

  4. req.scope = "snsapi_userinfo";

  5. req.state = "wechat_sdk_demo_test";

  6. api.sendReq(req);

  7. }

这一步就是和微信要code。执行了这一段代码之后。微信会调用刚才WXEntityActivity类里面的onResp()方法。并且把code返回来了。见上面那一段代码。获取到code之后就可以通过code获取access_token了。

请求以下链接获取access_token:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

这步和微信通信获得access_token就是普通的访问链接。 用httpClient就行了,而不是接入指南里说的那个和微信通信的方法onReq().然后还是这样的方式通过access_token.就可以调用接口获得用户基本信息了。具体返回参数什么的接入指南里面说的很清楚。至此微信授权基本是成功了。

不过在开发的过程中要注意一下debug keystore。就是Window->Preferences->Android->Build里面。

这里,我们要添加Custom debug keystore。上面的那个debug keystore不会和微信通信。

而我们添加的这个keystore 也要符合一些规范所以要改一改。

那就是keystore的密码改为:android

keytool -storepasswd -keystore my.keystore (在cmd里执行的命令)

其中,my.keystore是要修改的证书文件,执行后会提示输入证书的当前密码,和新密码以及重复新密码确认。这一步需要将密码改为android。

alias的名称要改为:androiddebugkey

keytool -changealias -keystore my.keystore -alias my_name -destalias androiddebugkey

这一步中,my_name是证书中当前的alias,-destalias指定的是要修改为的alias,这里按规矩来,改为androiddebugkey!这个命令会先后提示输入keystore的密码和当前alias的密码。

keystore的alias密码也改为:android

keytool -keypasswd -keystore my.keystore -alias androiddebugkey

这一步执行后会提示输入keystore密码,alias密码,然后提示输入新的alias密码,同样,按规矩来,改为android!

这样修改完keystore之后把这个keystore放到上面ADT的custom debug keystore里面。就可以直接调试微信相关的功能了。

提示:

有时候需要用到第三方API的时候,需要一个key store 的SH1值,例如使用百度地图API,如果是协同开发,就需要所有Eclipse使用同一keystore。

如下图所示:

  1. 以管理员身份运行window中的cmd.exe

  2. 2
  3. 找到jdk的bin目录

  4. 3
  5. 输入keytool -genkey -alias androiddebugkey -keyalg RSA -validity 20000 -keystore debug.keystore -storepass android -keypass android

    并根据中文提升输入基本信息(测速key可以随便填)。最后输入y确认

  6. 4
  7. 最后在jdk的bin目录下可以找到生成的debug.keystore

    END

实用debug.keystore

  1. 1

    在eclipse中window-preference中找到android build,选择我们自定义的debug.keystore,并点击apply应用

这里需要注意的是,自定义keystore名称必须是debug.keystore.不然会报

Keystore was tampered with, or password was incorrect,这个错误。另外,还要保证keystore的alias(别名)和alias密码都要和default debug keystore相同。

可以使用一下命令行:

keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -validity 14000

其信息主要是:

Keystore name: “debug.keystore”

Keystore password: “

android

Key alias: “

android

debugkey”

Key password: “android”

CN: “CN=Android Debug,O=Android,C=US”

确保如上信息相同,生成keystore,即可使用

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

问题、可以进入微信登陆界面,但是输完之后,不能拉起 微信打开授权登录页: 不知道是怎么回事?

解决方法1:

你需要修改你在平台上的应用签名:你测试的时候不要用手机上生成的应用签名,要用eclipse里面的签名:

签名的位置在:选中你的项目然后点击:Window----Preferences-------然后点击android-----Build,然后看到SHA1 然后复制,这个就是签名了,(注释:如果你那只显示一个默认的就用默认的,两个SHA1后面都有数据,你就把复制后面的。),这样你的授权页面就可以拉起了。

解决方法2:

在微信开放平台创建应用时我填的签名是带有冒号的MD5,但是用微信提供的签名生成apk测试发现它生成的是不带冒号的MD5,

所以我把开放平台上注册的应用签名改成不带冒号的MD5,就可以了。

第三方登录-wechat相关推荐

  1. 从零玩转第三方登录之WeChat公众号登陆-cong-ling-wan-zhuan-di-san-fang-deng-lu-zhi-wechat-gong-zhong-hao-deng-lu...

    title: 从零玩转第三方登录之WeChat公众号登陆 date: 2022-09-03 16:32:57.876 updated: 2022-09-03 16:32:57.876 url: htt ...

  2. 【第三方互联】16、微信(wechat)授权第三方登录

    第三方平台系列文章,今天终于又开始更新了,今天继续学习微信(wechat)授权第三方登录 一.准备工作 1.申请微信公众测试号 由于我们是个人开发者,我们需要去注册申请一个微信公众平台的测试号 htt ...

  3. sdk没有登录什么意思_不需要接入SDK的第三方登录及分享

    讲到第三方登录分享,第一反应大概就是友盟.ShareSDK之类.集成微信.QQ.微博三个平台的话,友盟的SDK有62.9M,ShareSDK的包有74M.如果直接集成最原始的三个平台的SDK,大小总共 ...

  4. Symfony 使用 hwi/oauth-bundle 实现第三方登录

    hwi/oauth-bundle插件官方文档只简单给出了登录示例,实际工作中往往需要对获取到的用户信息进行存库处理.那如何来处理呢,下面给出我在项目中处理步骤希望能帮助到大家. 首先创建hwi/oau ...

  5. (0013)iOS 开发之集成友盟第三方登录

    第三方登录的原理和流程 用户采用第三方登录的时候,用户会发送哪些信息到我的后台,后台会进行哪些比对操作?首次使用第三方登录和再次使用第三方登录时验证有哪些不同,后台如何保存用户的登录信息尼? 对于用户 ...

  6. php 微信第三方登录demo,第三方登录 - 快速接入微信、QQ、微博等第三方登录方式 – 基于ThinkPHP和Bootstrap的极速后台开发框架...

    此插件基于FastAdmin和Thinkphp5开发的第三方登录插件,可用于对接微.微博.QQ等第三方登录,目前CMS中的小程序账号登录绑定就是基于此插件开发,在使用CMS中的小程序登录功能之前请务必 ...

  7. 第三方登录如何给前台返回token_如何设计优雅的第三方账号登录?

    # 前言 在互联网应用中,我们构建一个网站或APP,如果没有用户,那就没有价值.所以,如何吸引用户注册和登录,是一个重要问题,而这就涉及到账号体系了. 在应用构建初期,用户量较少,那么自建系统的账号体 ...

  8. 网站如何接入第三方登录,微信登录和QQ登录:注册认证篇

    第三方登录平台接入 (QQ\微信登录) QQ登录接入 第一步成为QQ应用开发者,审核期限七天 一.所需材料 1.公司注册相关信息 2.营业执照扫描件 微信登录接入 第一步成为微信开发平台开发者,认证费 ...

  9. .netcore 极速接入第三方登录

    新年新气象,趁着新年的喜庆,肝了十来天,终于发了第一版,希望大家喜欢. 如果有不喜欢看文字的童鞋,可以直接看下面的地址体验一下: Github: https://github.com/mrhuo/Mr ...

最新文章

  1. paramiko 模块封装
  2. html中item属性,项目id(属性) | itemid (attribute)
  3. python定义一个变量_Python新手上车3:Python第一个程序和变量
  4. NET问答: 如何避免在 EmptyEnumerable 上执行 Max() 抛出的异常 ?
  5. [编程入门]阶乘求和:求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。
  6. java \t怎么从头开始_如何从头开始以正确的面向对象方式创建Java Web Framework
  7. FocusBI:租房分析可视化(PowerBI网址体验)
  8. C#.NET验证码智能识别学习笔记---05C#.Net图片预处理
  9. tomcat 8.5 远程登录管理页面
  10. 写一个自己的QQ签名
  11. 数据结构-03-队列
  12. 工控行业各品牌程序扩展格式和软件
  13. 如何卸载office201032位_win7卸载office2010的步骤_win7如何完美卸载office2010-win7之家...
  14. 【MySQL基础篇】MySQL数据库安装教程
  15. Android开发 个人开发者几大后端云比较
  16. mysql 中间表 性能_mysql性能优化
  17. 计算机中的数(二):定点数的移位运算和加减运算
  18. 文件同步是什么?解析6个最佳的文件同步应用软件
  19. sql中笛卡尔积现象以及运用
  20. 上海异地期满换驾驶证的一天

热门文章

  1. 拟上市公司发公示是什么意思
  2. CCF201412-1门禁系统(C语言)
  3. 微软允许员工永久在家办公的背后或许暗藏杀机
  4. float理解(三)
  5. BS(Brower/Server)浏览器/服务器 和 C/S (Client/Server)客户端/服务器 的区别
  6. 当你开始建站的时候,首先你得先弄懂整个网站的建站流程
  7. Powershell管理系列(三)2012 AD域用户UPN名称还原
  8. 存下吧,很难找到的!早晚有人问你!
  9. EMC (电磁兼容性)
  10. ubuntu刷新自己dns