package com.idormy.sms.forwarder.utils; import android.os.Bundle; import android.os.Handler; import android.util.Base64; import android.util.Log; import java.io.IOException; import java.net.URLEncoder; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import okhttp3.Call; import okhttp3.Callback; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; import static com.idormy.sms.forwarder.SenderActivity.NOTIFY; public class SenderWebNotifyMsg { static String TAG = "SenderWebNotifyMsg"; public static void sendMsg(final Handler handError, String token, String secret, String from, String content) throws Exception { Log.i(TAG, "sendMsg token:" + token + " from:" + from + " content:" + content); if (token == null || token.isEmpty()) { return; } OkHttpClient client = new OkHttpClient().newBuilder() .build(); MediaType mediaType = MediaType.parse("text/plain"); MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM) .addFormDataPart("from", from) .addFormDataPart("content", content); if (secret != null && !secret.isEmpty()) { Long timestamp = System.currentTimeMillis(); String stringToSign = timestamp + "\n" + secret; Mac mac = Mac.getInstance("HmacSHA256"); mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256")); byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8")); String sign = URLEncoder.encode(new String(Base64.encode(signData, Base64.NO_WRAP)), "UTF-8"); Log.i(TAG, "sign:" + sign); builder.addFormDataPart("content", content); } RequestBody body = builder.build(); Request request = new Request.Builder() .url(token) .method("POST", body) .build(); // Response response = client.newCall(request).execute(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, final IOException e) { Log.d(TAG, "onFailure:" + e.getMessage()); if (handError != null) { android.os.Message msg = new android.os.Message(); msg.what = NOTIFY; Bundle bundle = new Bundle(); bundle.putString("DATA", "发送失败:" + e.getMessage()); msg.setData(bundle); handError.sendMessage(msg); } } @Override public void onResponse(Call call, Response response) throws IOException { final String responseStr = response.body().string(); Log.d(TAG, "Code:" + String.valueOf(response.code()) + responseStr); if (handError != null) { android.os.Message msg = new android.os.Message(); msg.what = NOTIFY; Bundle bundle = new Bundle(); bundle.putString("DATA", "发送状态:" + responseStr); msg.setData(bundle); handError.sendMessage(msg); Log.d(TAG, "Coxxyyde:" + String.valueOf(response.code()) + responseStr); } } }); } }