package com.payment.ktb;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import com.payment.ktb.utils.HttpUtils;
import com.sdsmdg.tastytoast.TastyToast;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
import rx.Subscriber;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
Map<String,String> map = new HashMap<>();
map.put("os","ANDROID");
map.put("version","8");
HttpUtils.getInstance().getResult("shopSdkVersionState", map, new Subscriber<JSONObject>() {
@Override
public void onCompleted() {
TastyToast.makeText(getApplicationContext(), "商户已经注册成功", TastyToast.LENGTH_SHORT, TastyToast.ERROR);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(JSONObject jsonObject) {
}
});
}
}
package com.payment.ktb.utils;
import android.util.Base64;
import android.util.Log;
import com.payment.ktb.constant.HttpUrls;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
import retrofit2.converter.scalars.ScalarsConverterFactory;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;
import rx.Observable;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
/**
* Created by syd on 2016/8/22.
*/
public class HttpUtils {
private static final int DEFAULT_TIMEOUT = 20;
private Retrofit retrofit;
private RequestSerives RequestSerives;
private static HttpUtils instance;
/**
* 1.Service接口
*/
public interface RequestSerives {
@FormUrlEncoded
@POST("api/action")
Observable<String> getString(@Field("action") String action,
@Field("data") String data);
}
/**
* 2.Retrofit实例
*/
//构造方法私有
private HttpUtils() {
OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
httpClientBuilder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);
retrofit = new Retrofit.Builder()
.client(httpClientBuilder.build())
.addConverterFactory(ScalarsConverterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(HttpUrls.URL)
.build();
RequestSerives = retrofit.create(RequestSerives.class);
}
public synchronized static HttpUtils getInstance() {
if (instance == null) {
instance = new HttpUtils();
}
return instance;
}
/**
*
* @param postAction
* @param postData
* @param subscriber
*/
public void getResult(String postAction, Map<String,String> postData, Subscriber<JSONObject> subscriber) {
/**
* 将map转成json串
*/
String unAESPostData = new JSONObject(postData).toString();
Log.e("sydlog","unAESPostData=" + unAESPostData);
String base64unAESPostData = Base64.encodeToString(unAESPostData.getBytes(),Base64.DEFAULT);
/**
* 对数据进行AES加密
*/
String AESPostData = null;
try {
AESPostData = AESUtils.encode(base64unAESPostData);
} catch (Exception e) {
}
RequestSerives.getString(postAction,AESPostData)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.map(new Func1<String, JSONObject>() {
@Override
public JSONObject call(String s) {
try {
return new JSONObject(AESUtils.decode(s.toString()));
} catch (Exception e) {
e.printStackTrace();
Map<String,String> AESDecodeErrorRespnse = new HashMap<String, String>();
AESDecodeErrorRespnse.put("code","AESDecodeErrorRespnse");
AESDecodeErrorRespnse.put("msg","AES解密异常!");
return new JSONObject(AESDecodeErrorRespnse);
}
}
})
.subscribe(subscriber);
}
}