绵阳网站建设企业,网站内容页优化,发布,合肥 做网站准备工作需要在微信开放平台注册登录账户。还得办理开发者资质认证#xff0c;审核费用为300元。2.在微信开放平台创建移动应用#xff0c;填写相关信息后提交审核。简述业务流程1.获取appId和secret2.通过appId和secret调微信接口获取 code3.通过code和getAccessToken()方法…准备工作需要在微信开放平台注册登录账户。还得办理开发者资质认证审核费用为300元。2.在微信开放平台创建移动应用填写相关信息后提交审核。简述业务流程1.获取appId和secret2.通过appId和secret调微信接口获取 code3.通过code和getAccessToken()方法再获取accessToken和 openId。(通过 unionId即可区分微信用户实现登录)4.当然也可以通过 unionId与 用户手机号进行绑定。5.通过access_token和openid调用api.weixin.qq.com/sns/userinfo接口获取微信昵称、性别等信息。微信开放平台获取应用AppID及AppSecret注意事项a.若遇到重名请发起申诉b.在注册流程中请不要开通应用微信支付c.在注册流程中填写的包名、签名应与腾讯开放平台后台保持一致。2.点击“管理中心”或“移动应用开发-查看更多-创建应用”image.png进入创建移动应用流程。3.填写对应信息完成注册Step1填写基本信息Step2填写签名和包名Step3提交审核注册后等待审核。审核将于7天内完成集成流程Step1在 app 下的build.gradle里添加依赖即可dependencies {compile com.tencent.mm.opensdk:wechat-sdk-android-without-mta:}Step2在包名路径下新建wxapi文件夹再新建一个WXEntryActivity。(路径文件名必须和创建移动应用时填写的包名保持一致)创建包与文件Step3打开WXEntryActivitypublic class WXEntryActivity extends AppCompatActivity implements IWXAPIEventHandler重写两个方法Overridepublic void onReq(BaseReq baseReq) {}//请求回调结果处理//向微信开放平台发起请求后在此接收回调数据Overridepublic void onResp(BaseResp baseResp) {}Step4打开 MainActivity 或者 LoginActivity//注册apiprivate void regToWx() {api WXAPIFactory.createWXAPI(this, APP_ID, true);api.registerApp(APP_ID);}//先判断用户手机是否安装了微信客户端if (!api.isWXAppInstalled()) {Toast.makeText(MainActivity.this, 您的设备未安装微信客户端, Toast.LENGTH_SHORT).show();} else {//向微信开放平台发起请求final SendAuth.Req req new SendAuth.Req();req.scope snsapi_userinfo;req.state wechat_sdk_demo_test;api.sendReq(req);}Step5:在onRep()方法里获取回调,拿到返回的参数 code//请求回调结果处理Overridepublic void onResp(BaseResp baseResp) {//登录回调switch (baseResp.errCode) {case BaseResp.ErrCode.ERR_OK:String code ((SendAuth.Resp) baseResp).code;//获取accesstokengetAccessToken(code);Log.d(fantasychongwxlogin, code.toString() );break;case BaseResp.ErrCode.ERR_AUTH_DENIED://用户拒绝授权finish();break;case BaseResp.ErrCode.ERR_USER_CANCEL://用户取消finish();break;default:finish();break;}}Step6:根据返回码如果请求成功会返回BaseResp.ErrCode.ERR_OK:相等的值然后通过code和getAccessToken()方法再获取accessToken。private void getAccessToken(String code) {createProgressDialog();//获取授权StringBuffer loginUrl new StringBuffer();loginUrl.append(https://api.weixin.qq.com/sns/oauth2/access_token).append(?appid).append(wx45ccf8958a0a24c7).append(secret).append(e9c071f3326663856bc6cf02c2d6b657).append(code).append(code).append(grant_typeauthorization_code);Log.d(urlurl, loginUrl.toString());OkHttpClient okHttpClient new OkHttpClient();final Request request new Request.Builder().url(loginUrl.toString()).get()//默认就是GET请求可以不写.build();Call call okHttpClient.newCall(request);call.enqueue(new Callback() {Overridepublic void onFailure(Call call, IOException e) {Log.d(fan12, onFailure: );mProgressDialog.dismiss();}Overridepublic void onResponse(Call call, Response response) throws IOException {String responseInfo response.body().string();Log.d(fan12, onResponse: responseInfo);String access null;String openId null;try {JSONObject jsonObject new JSONObject(responseInfo);access jsonObject.getString(access_token);openId jsonObject.getString(openid);} catch (JSONException e) {e.printStackTrace();}getUserInfo(access, openId);}});}Step7:这里我们在请求之前新建一个progressDialog避免长时间白屏(因为在进行多次网络请求)造成卡死的假象private void createProgressDialog() {mContextthis;mProgressDialognew ProgressDialog(mContext);mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//转盘mProgressDialog.setCancelable(false);mProgressDialog.setCanceledOnTouchOutside(false);mProgressDialog.setTitle(提示);mProgressDialog.setMessage(登录中请稍后);mProgressDialog.show();}Step8:如果请求成功我们通过JSON解析获取access和token值再通过getUserInfo(access, openId)方法获取用户信息Overrideprotected void onResume() {super.onResume();SharedPreferences sp getSharedPreferences(userInfo, MODE_PRIVATE);String responseInfo sp.getString(responseInfo, );if (!responseInfo.isEmpty()){try {JSONObject jsonObject new JSONObject(responseInfo);nickname jsonObject.getString(nickname);headimgurl jsonObject.getString(headimgurl);} catch (JSONException e) {e.printStackTrace();}tv.setText(昵称 nickname \n 头像 headimgurl);SharedPreferences.Editor editor getSharedPreferences(userInfo, MODE_PRIVATE).edit();editor.clear();editor.commit();}}