参考链接:
微信开发文档:
https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Development_Guide.html多类传递参数:https://blog.csdn.net/Mr_Tony/article/details/78988281
前置条件:微信上面的AppKey已经申请完毕
注意:这里面只是获取了access_token值,没有获取用户信息,因为程序原有的代码写了,所以这里就没有再写。用户可以根据最终获取的access_token和openId来获取微信用户信息
dependencies { //微信分享、登录、收藏、支付 implementation 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:5.5.8'}截图如下:
WXEntryActivity.java(名字要叫这个,否则监听不到,微信支付的可以起别的名字)
/** * 微信登录功能 */public class WXEntryActivity extends Activity implements IWXAPIEventHandler { private IWXAPI api;@Overrideprotected void onCreate(Bundle bundle) { super.onCreate(bundle);DqLog.e("YM-----------WXEntryActivity>回调登录");api = WXAPIFactory.createWXAPI(this, BuildConfig.WX_PAY_APPID);api.handleIntent(getIntent(), this);}@Overrideprotected void onNewIntent(Intent intent) { super.onNewIntent(intent);tIntent(intent);api.handleIntent(intent, this);}@Overridepublic void onReq(BaReq baReq) { Log.3 19枪声e("YM", "onPayFinish, errCode = onReq");}@Overridepublic void onResp(BaResp baResp) { int errCode = baResp.errCode;switch (errCode){ ca BaResp.ErrCode.ERR_OK:String code = ((SendAuth.Resp) baResp).code;getRefreshToken(code);Log.d("fantasychongwxlogin", code.toString()+ "");break;ca BaResp.ErrCode.ERR_AUTH_DENIED://用户拒绝授权ca BaResp.ErrCode.ERR_USER_CANCEL://用户取消default:finish();break;}}private void getAccessToken(String code) { DqLog.e("YM--------微信登录的code:"+code);//获取授权StringBuffer loginUrl = new StringBuffer();loginUrl.append("https://api.weixin.qq.com/sns/oauth2/access_token").append("?appid=").append("*****************").append("&cret=").append("*****************************").append("&code=").append(code).append("&grant_type=authorization_code");Log.d("urlurl", loginUrl.toString());OkHttpUtil.simpleGet(loginUrl.toString(), new StringCallback() { @Overridepublic void onError(Call call, Exception e, i赚钱排行nt id) { e.printStackTrace();DqLog.e("YM---------->请求失败:");finish();}@Overridepublic voiood onRespon(String respon, int id) { DqLog.e("YM---------->getAccessToken:",respon);try { JSONObject jsonObject = new JSONObject(respon);ModuleMgr.getCenterMgr().saveWxRefreshToken(jsonObject.optString("refresh_token",""));} catch (JSONException e) { e.printStackTrace();}CallBackUtils.getInstance().ndMessageSingle(MsgType.WX_LOGIN_RESULT,respon);finish();}});// /d/file/titlepic/refresh_token void getRefreshToken(String code){ //先判断本地有没有refreshToken,有的话调用微信的refreshToken接口,没有的话再调用accessToken接口,如果一直调accessToken接口的话会出现code已经被使用的问题(错误码为40163)String refreshToken = ModuleMgr.getCenterMgr().getWxRefreshToken();DqLog.e("YM---------->获取的refreshToken:",refreshToken);if (!TextUtils.isEmpty(refreshToken)){ StringBuffer loginUrl = new StringBuffer();loginUrl.append("https://api.weixin.qq.com/sns/oauth2/refresh_token").append("?appid=").append("**********************").append("&refresh_token=").append(refreshToken).append("&grant_type=refresh_token");Log.d("urlurl", loginUrl.toString());OkHttpUtil.simpleGet(loginUrl.toString(), new StringCallback() { @Overridepublic void onError(Call call, Exception e, int id) { e.printStackTrace();DqLog.e("YM---------->请求失败:");finish();}@Overridepublic void onRespon(String respon, int id) { DqLog.e("YM---------->getRefreshToken:",respon);JSONObject jsonObject = null;try { jsonOb缺点有哪些ject = new JSONObject(respon);int errorCode = jsonObject.optInt("errcode",-1);if (errorCode == 40030){ getAccessToken(code);return;}ModuleMgr.getCenterMgr().saveWxRefreshToken(jsonObject.optString("refresh_token",""));} catch (JSONException e) { e.printStackTrace();}finish();//获取结果后要结束掉页面,否则,其余页面上会有一个透明的弹窗CallBackUtils.getInstance().ndMessageSingle(MsgType.WX_LOGIN_RESULT,respon);//这个是用于多个类之间回调的,可以在没有上下文的类中接收参数}});return;}getAccessToken(code);}}AndroidManifest.xml
<!-- 微信登录,主题使用为全屏透明,要使用这种主题使用户无感微信回调页启动的过程 --><activity android:name=".wxapi.WXEntryActivity" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />WxLoginHelper.java
public class WXLoginHelper { private static IWXAPI api;/** * WXLoginListener可以在一个页面进行回调给其他程序,方便多模块公用微信登录 */public static void WxLogin(Activity context, WXLoginListener loginListener) { CallBackUtils.getInstance().tListener(MsgType.WX_LOGIN_RESULT, new CallBackUtils.MessageCallBack() { @Overridepublic void callBack(String value) { DqLog.e("YM--------->接收的获取微信AccessToken的值:",value.toString());Map<String,String> map = new HashMap<>();try { JSONObject jsonObject = new JSONObject(value);Iterator<String> iterable = jsonObject.keys();while (iterable.hasNext()){ String jsonKey = iterable.next();国际学校课程String jsonValue = jsonObject.optString(jsonKey,"");map.put(jsonKey,jsonValue);}} catch (JSONException e) { e.printStackTrace();}if(null != loginListener) { loginListener.loginWX(map);}}});api = WXAPIFactory.createWXAPI(context, BuildConfig.WX_PAY_APPID, fal);api.registerApp(BuildConfig.WX_PAY_APPID);if (!api.isWXAppInstalled()){ DqToast.showShort("您还未安装微信客户端!");return;}final SendAuth.Req req = new SendAuth.Req();req.scope = "snsapi_urinfo";req.state = "dqApp";api.ndReq(req);}}本文地址:https://blog.csdn.net/Mr_Tony/article/details/108734837
本文发布于:2023-04-07 13:56:33,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/a3877b596b106b6eb0f2631e34fa4e13.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:微信登录开发流程.doc
本文 PDF 下载地址:微信登录开发流程.pdf
| 留言与评论(共有 0 条评论) |