流程讲解:
第一步:先去微信平台注册账号,填写应用信息,提交审核,大概需要三到五天的时间审核完成;
第二步:审核完成微信开放平台会生成一个appid,和sercet 这两个是唯一的id 需要妥善保管;
第三步:按照微信开放平台给的文档,下载相应的sdk以及签名工具,在此强调 必须是用签名打包的正式版的apk才可以调起微信的客户端进行授权登录,必须保证应用的签名(用签名工具可以获取)和开放平台上填写的信息一致。
以上三步完成后我们就可以开始支付的编写了
1.添加依赖
compile'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:1.0.2'
2.清单文件中添加权限
<uses-permission android:name="android.permission.INTERNET"/>
在清单文件中将exported="true",其中包名wxapi与类名WXEntryActivity不可随意更改。
<activity android:name=".wxapi.WXEntryActivity"android:exported="true"></activity>
3.进行微信注册
我们先在app中继承Application,在OnCreate中处理获取到的方法,在这个里面我们进行了对外暴露一个实例getApi,便于在其他类中进行调用。
public class app extends Application {
public static final String APP_ID = "此乃获得的appid";
private static IWXAPI mApi;
@Override
public void onCreate() {
super.onCreate();
//接收到分享以及登录的intent传递handleIntent方法,处理结果
mApi = WXAPIFactory.createWXAPI(this, APP_ID,true);
//注册到微信
mApi.registerApp(APP_ID);
}
public static IWXAPI getApi(){
return mApi;
}
}
4.调用登录页面
当我们点击微信图标进行微信登录时,触发点击事件在其中进行以下操作。
if (!app.getApi().isWXAppInstalled()) {
ToastUtils.setToastTextview(WXLoginActivity.this, "您的设备未安装微信客户端");
ToastUtils.show();
}else {
SendAuth.Req req = new SendAuth.Req();
//此处中"snsapi_userinfo"不可以更改
req.scope="snsapi_userinfo";
//此处可随意编写
req.state="wx_cc";
app.getApi().sendReq(req);
}
5.创建WXEntryActivity类实现微信登录接收响应
public class WXEntryActivity extends Activity implements IWXAPIEventHandler {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//调用app类中的getApi方法,获取mApi,切记这句必写
app.getApi().handleIntent(getIntent(),this);
}
@Override
public void onReq(BaseReq baseReq) {
}
@Override
public void onResp(BaseResp baseResp) {
switch (baseResp.errCode){
//登陆成功
case BaseResp.ErrCode.ERR_OK:
//登陆成功,获取code值
String code = ((SendAuth.Resp) baseResp).code;
Log.e("Code++", code);
//通过EventBus将获取到的code值,传递到登录页面
WXEventBean wxEventBean = new WXEventBean();
wxEventBean.setCode(code);
EventBus.getDefault().postSticky(wxEventBean);
break;
case BaseResp.ErrCode.ERR_AUTH_DENIED:
Toast.makeText(this, "授权出错", Toast.LENGTH_SHORT).show();
finish();
break;
case BaseResp.ErrCode.ERR_USER_CANCEL:
Toast.makeText(this, "取消登录", Toast.LENGTH_SHORT).show();
finish();
break;
default:
finish();
break;
}
}
}
总结经验:
1.登录所在的页面必须在我们注册时所提交的包中,包名必须一致若不一致必须更改,否则会提示包名出错。
2.在清单文件中必须添加android:exported="true",否则将获取不到code值。