package ezy.sdk3rd.social.platforms.weixin;
import android.app.Activity;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.modelmsg.SendAuth;
import com.tencent.mm.opensdk.modelmsg.SendMessageToWX;
import com.tencent.mm.opensdk.modelpay.PayResp;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.IWXAPIEventHandler;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;
import java.util.WeakHashMap;
import ezy.sdk3rd.social.sdk.IResult;
import ezy.sdk3rd.social.sdk.OnCallback;
import ezy.sdk3rd.social.sdk.Platform;
import ezy.sdk3rd.social.sdk.ResultCode;
/**
* Created by ezy on 17/3/18.
*/
abstract class WXBase implements IResult, IWXAPIEventHandler {
public static final String TAG = "ezy.sdk3rd.wx";
public static int REQUEST_CODE = 1999;
static WeakHashMap<IResult, Boolean> services = new WeakHashMap<>();
final protected Activity mActivity;
final protected Platform mPlatform;
protected OnCallback mCallback;
IWXAPI mApi;
protected WXBase(Activity activity, Platform platform) {
mActivity = activity;
mPlatform = platform;
if (!TextUtils.isEmpty(platform.getAppId())) {
mApi = WXAPIFactory.createWXAPI(activity.getApplicationContext(), platform.getAppId(), true);
mApi.registerApp(platform.getAppId());
}
services.put(this, true);
}
@Override
public void onResult(int requestCode, int resultCode, Intent data) {
if (mApi != null && requestCode == REQUEST_CODE) {
mApi.handleIntent(data, this);
}
}
@Override
public void onReq(BaseReq req) {
Log.e(TAG, "transaction = " + req.transaction + ", type = " + req.getType() + ", openId = " + req.openId);
}
@Override
public void onResp(BaseResp resp) {
Log.e(TAG, "transaction = " + resp.transaction + ", type = " + resp.getType() + ", errCode = " + resp.errCode + ", err = " + resp.errStr);
if (resp.errCode == BaseResp.ErrCode.ERR_OK) {
switch (resp.getType()) {
case ConstantsAPI.COMMAND_SENDAUTH:
onResultOk((SendAuth.Resp) resp);
break;
case ConstantsAPI.COMMAND_PAY_BY_WX:
onResultOk((PayResp) resp);
break;
case ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX:
onResultOk((SendMessageToWX.Resp) resp);
break;
}
} else if (resp.errCode == BaseResp.ErrCode.ERR_USER_CANCEL) {
mCallback.onFailed(mActivity, ResultCode.RESULT_CANCELLED, toMessage(resp));
} else {
mCallback.onFailed(mActivity, ResultCode.RESULT_FAILED, toMessage(resp));
}
mCallback.onCompleted(mActivity);
}
String toMessage(BaseResp resp) {
return "[" + resp.errCode + "]" + (resp.errStr == null ? "" : resp.errStr);
}
protected void onResultOk(PayResp resp) {
}
protected void onResultOk(SendAuth.Resp resp) {
}
protected void onResultOk(SendMessageToWX.Resp resp) {
}
}