TmailPayPresenter.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. package com.edufound.reader.presenter;
  2. import android.app.ActionBar;
  3. import android.app.Activity;
  4. import android.content.Intent;
  5. import android.os.Handler;
  6. import android.os.Message;
  7. import android.view.LayoutInflater;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import android.widget.FrameLayout;
  11. import android.widget.ImageView;
  12. import android.widget.LinearLayout;
  13. import android.widget.TextView;
  14. import android.widget.Toast;
  15. import androidx.annotation.NonNull;
  16. import com.edufound.reader.R;
  17. import com.edufound.reader.apiserver.OrderApiServerImpl;
  18. import com.edufound.reader.base.BaseActivity;
  19. import com.edufound.reader.base.BasePresenter;
  20. import com.edufound.reader.bean.ChannelCodeEnum;
  21. import com.edufound.reader.bean.HttpResultBean;
  22. import com.edufound.reader.bean.PayResultBean;
  23. import com.edufound.reader.contract.TmailPayContract;
  24. import com.edufound.reader.util.miutil.MiSoundSDKUtil;
  25. import com.edufound.reader.model.TmailPayModel;
  26. import com.edufound.reader.util.tmailsdk.TMailSDKUtil;
  27. import com.edufound.reader.util.Consts;
  28. import com.edufound.reader.util.DeviceUtil;
  29. import com.edufound.reader.util.DeviceUuidFactory;
  30. import com.google.gson.Gson;
  31. import com.google.gson.reflect.TypeToken;
  32. import com.okhttplib.HttpInfo;
  33. import com.okhttplib.callback.Callback;
  34. import com.orhanobut.logger.Logger;
  35. import org.json.JSONException;
  36. import org.json.JSONObject;
  37. import java.io.IOException;
  38. import java.util.HashMap;
  39. import java.util.List;
  40. import java.util.Map;
  41. public class TmailPayPresenter extends BasePresenter<TmailPayContract.View> implements TmailPayContract.Presenter {
  42. TmailPayModel mModel;
  43. OrderApiServerImpl mOrderApi;
  44. List<PayResultBean> mPayResult;
  45. Map<String, String> createOrderMap;
  46. String nowOrderId = null;
  47. public TmailPayPresenter() {
  48. this.mModel = new TmailPayModel();
  49. mOrderApi = new OrderApiServerImpl();
  50. }
  51. @Override
  52. public void getProductInfo() {
  53. mOrderApi.getProductListInfo(mView.getActivity(), Consts.getUMengChannel(), new Callback() {
  54. @Override
  55. public void onSuccess(HttpInfo info) throws IOException {
  56. HttpResultBean<List<PayResultBean>> bean = info.getRetDetail(new TypeToken<HttpResultBean<List<PayResultBean>>>() {
  57. }.getType());
  58. mPayResult = bean.getData();
  59. mView.getProductSuccess();
  60. }
  61. @Override
  62. public void onFailure(HttpInfo info) throws IOException {
  63. }
  64. });
  65. }
  66. @Override
  67. public void activityDestory() {
  68. if (handler != null) {
  69. handler.removeMessages(1);
  70. handler.removeMessages(2);
  71. handler = null;
  72. }
  73. }
  74. @Override
  75. public void initPayItem(LinearLayout itemFrame) {
  76. Logger.e("initPayItem");
  77. for (int i = 0; i < mPayResult.size(); i++) {
  78. Message message = new Message();
  79. message.obj = itemFrame;
  80. message.what = 1;
  81. message.arg1 = i;
  82. handler.sendMessageDelayed(message, 50 * i);
  83. }
  84. }
  85. @Override
  86. public void isPaySuccess() {
  87. // mModel.isPay(mView.getActivity(), nowOrderId, new Callback() {
  88. // @Override
  89. // public void onSuccess(HttpInfo info) throws IOException {
  90. // HttpResultBean<PayResultBean> bean = info.getRetDetail(new TypeToken<HttpResultBean<PayResultBean>>() {
  91. // }.getType());
  92. // Logger.e("bean.get:" + info.getRetDetail());
  93. // Logger.e("status:" + bean.getData().getPayStatus());
  94. // if (bean.getData().getPayStatus().equals("SUCCESS")) {
  95. // handler.removeMessages(2);
  96. // } else {
  97. // handler.sendEmptyMessageDelayed(2, 3000);
  98. // }
  99. //
  100. // }
  101. //
  102. // @Override
  103. // public void onFailure(HttpInfo info) throws IOException {
  104. //
  105. // }
  106. // });
  107. }
  108. @Override
  109. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  110. if (requestCode == TMailSDKUtil.TMAIL_PAY_RESULT_CODE && resultCode == Activity.RESULT_OK) {
  111. if (data != null) {
  112. boolean isPaySuccess = data.getBooleanExtra("isPaySuccess", false);
  113. String paySuccessDataJson = data.getStringExtra("paySuccessData");
  114. int payErrorCode = data.getIntExtra("payErrorCode", -1);
  115. String payErrorMsg = data.getStringExtra("payErrorMsg");
  116. Logger.e("qrcode, isPaySuccess=" + isPaySuccess +
  117. ";paySuccessDataJson=" + paySuccessDataJson +
  118. ";payErrorCode=" + payErrorCode +
  119. ";payErrorMsg=" + payErrorMsg);
  120. }
  121. }
  122. }
  123. void initItem(LinearLayout itemFrame, int position) {
  124. View view = LayoutInflater.from(mView.getActivity()).inflate(R.layout.activity_pay_tmail_item, null);
  125. view.setLayoutParams(new LinearLayout.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, 1));
  126. TmailPayPresenter.PayItemHolder holder = new TmailPayPresenter.PayItemHolder(view);
  127. holder.mTitle.setText(mPayResult.get(position).getTitle());
  128. holder.mPayMoney.setText(String.valueOf(Double.parseDouble(mPayResult.get(position).getPrice()) / 100));
  129. holder.mRecommend.setVisibility(View.VISIBLE);
  130. holder.mOriginPrice.setText("原价¥ " + String.valueOf(Double.parseDouble(mPayResult.get(position).getOriginPrice()) / 100));
  131. if (mPayResult.get(position).getPayType().equals("YEAR")) {
  132. holder.mConstraintLayoutBg.setBackgroundResource(R.drawable.activity_pay_tmail_item_year);
  133. } else if (mPayResult.get(position).getPayType().equals("MONTH")) {
  134. holder.mConstraintLayoutBg.setBackgroundResource(R.drawable.activity_pay_tmal_item_month);
  135. holder.mRecommend.setVisibility(View.INVISIBLE);
  136. } else {
  137. holder.mConstraintLayoutBg.setBackgroundResource(R.drawable.activity_pay_tmal_item_month);
  138. holder.mRecommend.setVisibility(View.INVISIBLE);
  139. }
  140. view.setTag(holder);
  141. mView.addUiClick(view, o -> {
  142. Logger.e("选择了...." + ((TmailPayPresenter.PayItemHolder) view.getTag()).mPayMoney.getText().toString());
  143. Map<String, String> params = new HashMap<>();
  144. params.put("productId", mPayResult.get(position).getId());
  145. params.put("channel", Consts.getUMengChannel());
  146. params.put("payType", mPayResult.get(position).getPayType());
  147. params.put("uid", Consts.getmConstsUserBean().getUid());
  148. params.put("first", "false");
  149. if (Consts.getUMengChannel().equals(ChannelCodeEnum.TMAIL.getChannelCode())) {
  150. //去天猫支付
  151. mModel.TMailPayGenie(mView.getActivity(), ((BaseActivity) mView.getActivity()).getGson().toJson(params), new Callback() {
  152. @Override
  153. public void onSuccess(HttpInfo info) throws IOException {
  154. Logger.e("创建订单返回信息成功:" + info.getRetDetail());
  155. Logger.e("创建订单返回信息成功:getParamJson-" + info.getParamJson());
  156. try {
  157. JSONObject object = new JSONObject(info.getRetDetail());
  158. JSONObject json = object.getJSONObject("data");
  159. Logger.e("json:" + json);
  160. TMailSDKUtil.tmailPay(mView.getActivity(), json.toString());
  161. } catch (JSONException e) {
  162. e.printStackTrace();
  163. }
  164. }
  165. @Override
  166. public void onFailure(HttpInfo info) throws IOException {
  167. Logger.e("创建订单返回信息失败:" + info.getRetDetail());
  168. Logger.e("创建订单返回信息成功:getParamJson-" + info.getParamJson());
  169. Toast.makeText(mView.getActivity(), "创建订单失败", Toast.LENGTH_SHORT).show();
  170. }
  171. });
  172. } else if (Consts.getUMengChannel().equals(ChannelCodeEnum.MISOUND.getChannelCode())) {
  173. //小米支付
  174. //获取shortkey
  175. Logger.e("小米支付");
  176. mModel.MiSoundPay(mView.getActivity(), ((BaseActivity) mView.getActivity()).getGson().toJson(params), new Callback() {
  177. @Override
  178. public void onSuccess(HttpInfo info) throws IOException {
  179. try {
  180. JSONObject object = new JSONObject(info.getRetDetail());
  181. JSONObject json = object.getJSONObject("data");
  182. String orderId = json.getString("orderId");
  183. String price = json.getString("price");
  184. String orderDesc = json.getString("title");
  185. Map<String, String> getShortKeyJsonMap = new HashMap<>();
  186. getShortKeyJsonMap.put("country", "CN");
  187. getShortKeyJsonMap.put("deviceID", DeviceUuidFactory.getUuid().toString());
  188. getShortKeyJsonMap.put("language", "zh");
  189. getShortKeyJsonMap.put("platform", "13201");
  190. getShortKeyJsonMap.put("sdk_version", String.valueOf(android.os.Build.VERSION.SDK_INT));
  191. getShortKeyJsonMap.put("codever", "3");
  192. getShortKeyJsonMap.put("biz", "136");
  193. getShortKeyJsonMap.put("mac", DeviceUtil.getLocalMacAddressFromIp(mView.getActivity()));
  194. getShortKeyJsonMap.put("appId", "2882303761519930481");
  195. getShortKeyJsonMap.put("customerOrderId", orderId);
  196. getShortKeyJsonMap.put("trxAmount", price);
  197. getShortKeyJsonMap.put("orderDesc", orderDesc);
  198. getShortKeyJsonMap.put("bizChannel", "MI_SOUND");
  199. getShortKeyJsonMap.put("rid", "1");
  200. new Thread() {
  201. @Override
  202. public void run() {
  203. try {
  204. String shortKeyJson = new Gson().toJson(getShortKeyJsonMap);
  205. JSONObject resultObject = new JSONObject(MiSoundSDKUtil.getShortKey(shortKeyJson));
  206. JSONObject shortKeyObject = new JSONObject(resultObject.getString("data"));
  207. String shortKey = shortKeyObject.getString("shortKey");
  208. String url = "https://h5.tv.mi.com/store/thirdparty/pricetag/shortkey/" + shortKey;
  209. mView.MiSoundPayUrlSuccess(url);
  210. } catch (Exception e) {
  211. e.printStackTrace();
  212. }
  213. }
  214. }.start();
  215. } catch (JSONException e) {
  216. e.printStackTrace();
  217. }
  218. }
  219. @Override
  220. public void onFailure(HttpInfo info) throws IOException {
  221. Logger.e("创建订单返回信息失败:" + info.getRetDetail());
  222. Logger.e("创建订单返回信息成功:getParamJson-" + info.getParamJson());
  223. Toast.makeText(mView.getActivity(), "创建订单失败", Toast.LENGTH_SHORT).show();
  224. }
  225. });
  226. }
  227. });
  228. itemFrame.addView(view);
  229. if (position >= mPayResult.size() - 1) {
  230. // Logger.e("position:" + position);
  231. // Logger.e("mPayResult.size():" + mPayResult.size());
  232. // itemFrame.getChildAt(0).performClick();
  233. }
  234. }
  235. Handler handler = new Handler(new Handler.Callback() {
  236. @Override
  237. public boolean handleMessage(@NonNull Message message) {
  238. switch (message.what) {
  239. case 1:
  240. initItem(((LinearLayout) message.obj), message.arg1);
  241. break;
  242. case 2:
  243. isPaySuccess();
  244. break;
  245. }
  246. return false;
  247. }
  248. });
  249. class PayItemHolder {
  250. FrameLayout mConstraintLayoutBg;
  251. TextView mTitle;
  252. TextView mOriginPrice;
  253. TextView mPayMoney;
  254. ImageView mRecommend;
  255. public PayItemHolder(View itemView) {
  256. mConstraintLayoutBg = itemView.findViewById(R.id.activity_pay_tmail_item_bg);
  257. mTitle = itemView.findViewById(R.id.activity_pay_tmail_item_title);
  258. mOriginPrice = itemView.findViewById(R.id.activity_pay_tmail_item_originprice);
  259. mPayMoney = itemView.findViewById(R.id.activity_pay_tmail_item_money);
  260. mRecommend = itemView.findViewById(R.id.activity_pay_tmail_item_recommend);
  261. }
  262. }
  263. }