HuaWeiPayPresenter.java 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581
  1. package com.edufound.reader.presenter;
  2. import android.content.Intent;
  3. import android.content.IntentSender;
  4. import android.os.Handler;
  5. import android.os.Message;
  6. import android.text.TextUtils;
  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.HttpResultBean;
  21. import com.edufound.reader.bean.PayResultBean;
  22. import com.edufound.reader.contract.HuaWeiPayContract;
  23. import com.edufound.reader.cusview.CusToast;
  24. import com.edufound.reader.interfaces.EfunboxInterfaces;
  25. import com.edufound.reader.model.HuaWeiPayModel;
  26. import com.edufound.reader.util.Consts;
  27. import com.edufound.reader.util.EfunboxUtil;
  28. import com.google.gson.reflect.TypeToken;
  29. import com.huawei.hmf.tasks.OnFailureListener;
  30. import com.huawei.hmf.tasks.OnSuccessListener;
  31. import com.huawei.hmf.tasks.Task;
  32. import com.huawei.hms.iap.Iap;
  33. import com.huawei.hms.iap.IapApiException;
  34. import com.huawei.hms.iap.entity.ConsumeOwnedPurchaseReq;
  35. import com.huawei.hms.iap.entity.ConsumeOwnedPurchaseResult;
  36. import com.huawei.hms.iap.entity.InAppPurchaseData;
  37. import com.huawei.hms.iap.entity.IsEnvReadyResult;
  38. import com.huawei.hms.iap.entity.OrderStatusCode;
  39. import com.huawei.hms.iap.entity.OwnedPurchasesReq;
  40. import com.huawei.hms.iap.entity.OwnedPurchasesResult;
  41. import com.huawei.hms.iap.entity.PurchaseIntentReq;
  42. import com.huawei.hms.iap.entity.PurchaseIntentResult;
  43. import com.huawei.hms.iap.entity.PurchaseResultInfo;
  44. import com.huawei.hms.iap.util.IapClientHelper;
  45. import com.huawei.hms.support.api.client.Status;
  46. import com.okhttplib.HttpInfo;
  47. import com.okhttplib.callback.Callback;
  48. import com.orhanobut.logger.Logger;
  49. import org.json.JSONException;
  50. import org.json.JSONObject;
  51. import java.io.IOException;
  52. import java.util.HashMap;
  53. import java.util.List;
  54. import java.util.Map;
  55. public class HuaWeiPayPresenter extends BasePresenter<HuaWeiPayContract.View> implements HuaWeiPayContract.Presenter {
  56. HuaWeiPayModel mModel;
  57. OrderApiServerImpl mOrderApi;
  58. List<PayResultBean> mPayResult;
  59. HuaWeiPayBean payBean;
  60. String HuaWeiPayType = "";
  61. public HuaWeiPayPresenter() {
  62. this.mModel = new HuaWeiPayModel();
  63. mOrderApi = new OrderApiServerImpl();
  64. }
  65. @Override
  66. public void getProductInfo() {
  67. mOrderApi.getProductListInfo(mView.getActivity(), Consts.getUMengChannel(), new Callback() {
  68. @Override
  69. public void onSuccess(HttpInfo info) throws IOException {
  70. HttpResultBean<List<PayResultBean>> bean = info.getRetDetail(new TypeToken<HttpResultBean<List<PayResultBean>>>() {
  71. }.getType());
  72. mPayResult = bean.getData();
  73. mView.getProductSuccess();
  74. }
  75. @Override
  76. public void onFailure(HttpInfo info) throws IOException {
  77. Logger.e("error:" + info.getRetDetail());
  78. }
  79. });
  80. }
  81. @Override
  82. public void activityDestory() {
  83. if (handler != null) {
  84. handler.removeMessages(1);
  85. handler.removeMessages(2);
  86. handler = null;
  87. }
  88. }
  89. @Override
  90. public void initPayItem(LinearLayout itemFrame) {
  91. Logger.e("initPayItem");
  92. for (int i = 0; i < mPayResult.size(); i++) {
  93. Message message = new Message();
  94. message.obj = itemFrame;
  95. message.what = 1;
  96. message.arg1 = i;
  97. handler.sendMessageDelayed(message, 50 * i);
  98. }
  99. }
  100. void initItem(LinearLayout itemFrame, int position) {
  101. View view = LayoutInflater.from(mView.getActivity()).inflate(R.layout.activity_pay_tmail_item, null);
  102. view.setLayoutParams(new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.MATCH_PARENT, 1));
  103. view.animate().scaleX(0.9f).scaleY(0.9f).setDuration(0).start();
  104. PayItemHolder holder = new PayItemHolder(view);
  105. holder.mTitle.setText(mPayResult.get(position).getTitle());
  106. holder.mPayMoney.setText(String.valueOf(Integer.parseInt(mPayResult.get(position).getPrice()) / 100));
  107. holder.mRecommend.setVisibility(View.VISIBLE);
  108. holder.mOriginPrice.setText("原价¥ " + String.valueOf(Integer.parseInt(mPayResult.get(position).getOriginPrice()) / 100));
  109. if (mPayResult.get(position).getPayType().equals("YEAR")) {
  110. holder.mConstraintLayoutBg.setBackgroundResource(R.drawable.activity_pay_tmail_item_year);
  111. } else if (mPayResult.get(position).getPayType().equals("MONTH")) {
  112. holder.mConstraintLayoutBg.setBackgroundResource(R.drawable.activity_pay_tmal_item_month);
  113. holder.mRecommend.setVisibility(View.INVISIBLE);
  114. } else {
  115. holder.mConstraintLayoutBg.setBackgroundResource(R.drawable.activity_pay_tmal_item_month);
  116. holder.mRecommend.setVisibility(View.INVISIBLE);
  117. }
  118. view.setTag(holder);
  119. mView.addUiClick(view, o -> {
  120. Map<String, String> params = new HashMap<>();
  121. params.put("productId", mPayResult.get(position).getId());
  122. params.put("channel", Consts.getUMengChannel());
  123. params.put("payType", mPayResult.get(position).getPayType());
  124. params.put("uid", Consts.getmConstsUserBean().getUid());
  125. params.put("first", "false");
  126. //连续包月走单独接口
  127. //创建订单,然后调用华为支付
  128. //先判断是否登录华为账号了,然后再进行支付处理isEnvReady
  129. //0:消耗型商品; 1:非消耗型商品; 2:订阅型商品
  130. String json = ((BaseActivity) mView.getActivity()).getGson().toJson(params);
  131. if (mPayResult.get(position).getPayType().equals("CONSECUTIVE_MONTH")) {
  132. //连续包月
  133. HuaWeiPayType = "2";
  134. mModel.HuaWeiPayContinuous(mView.getActivity(), json, createOrderCallBack);
  135. } else {
  136. HuaWeiPayType = "0";
  137. mModel.HuaWeiPay(mView.getActivity(), json, createOrderCallBack);
  138. }
  139. });
  140. itemFrame.addView(view);
  141. if (position >= mPayResult.size() - 1) {
  142. // Logger.e("position:" + position);
  143. // Logger.e("mPayResult.size():" + mPayResult.size());
  144. // itemFrame.getChildAt(0).performClick();
  145. }
  146. }
  147. Callback createOrderCallBack = new Callback() {
  148. @Override
  149. public void onSuccess(HttpInfo info) throws IOException {
  150. Logger.e("创建订单返回信息成功:" + info.getRetDetail());
  151. Logger.e("创建订单返回信息成功:getParamJson-" + info.getParamJson());
  152. try {
  153. JSONObject object = new JSONObject(info.getRetDetail());
  154. JSONObject json = object.getJSONObject("data");
  155. Logger.e("json:" + json);
  156. //缺少参数
  157. payBean = new HuaWeiPayBean();
  158. payBean.orderId = json.getString("orderId");
  159. payBean.productIds = json.getString("productId");
  160. payBean.priceType = HuaWeiPayType;
  161. toPay(payBean);
  162. } catch (JSONException e) {
  163. e.printStackTrace();
  164. }
  165. }
  166. @Override
  167. public void onFailure(HttpInfo info) throws IOException {
  168. Logger.e("创建订单返回信息失败:" + info.getRetDetail());
  169. Logger.e("创建订单返回信息成功:getParamJson-" + info.getParamJson());
  170. Toast.makeText(mView.getActivity(), "创建订单失败", Toast.LENGTH_SHORT).show();
  171. }
  172. };
  173. Handler handler = new Handler(new Handler.Callback() {
  174. @Override
  175. public boolean handleMessage(@NonNull Message message) {
  176. switch (message.what) {
  177. case 1:
  178. initItem(((LinearLayout) message.obj), message.arg1);
  179. break;
  180. case 2:
  181. break;
  182. }
  183. return false;
  184. }
  185. });
  186. @Override
  187. public void isEnvReady() {
  188. // 获取调用接口的Activity对象
  189. Task<IsEnvReadyResult> task = Iap.getIapClient(mView.getActivity()).isEnvReady();
  190. task.addOnSuccessListener(new OnSuccessListener<IsEnvReadyResult>() {
  191. @Override
  192. public void onSuccess(IsEnvReadyResult result) {
  193. // 获取接口请求的结果
  194. String carrierId = result.getCarrierId();
  195. Logger.e("onSuccess=carrierId:" + carrierId);
  196. if (payBean != null) {
  197. toPay(payBean);
  198. } else {
  199. CusToast.getInstance(mView.getActivity()).show("payBean==null", 3000);
  200. }
  201. }
  202. }).addOnFailureListener(new OnFailureListener() {
  203. @Override
  204. public void onFailure(Exception e) {
  205. if (e instanceof IapApiException) {
  206. IapApiException apiException = (IapApiException) e;
  207. Status status = apiException.getStatus();
  208. if (status.getStatusCode() == OrderStatusCode.ORDER_HWID_NOT_LOGIN) {
  209. // 未登录帐号
  210. if (status.hasResolution()) {
  211. try {
  212. // 6666是您自定义的常量
  213. // 启动IAP返回的登录页面
  214. status.startResolutionForResult(mView.getActivity(), 6666);
  215. } catch (IntentSender.SendIntentException exp) {
  216. }
  217. }
  218. } else if (status.getStatusCode() == OrderStatusCode.ORDER_ACCOUNT_AREA_NOT_SUPPORTED) {
  219. // 用户当前登录的华为帐号所在的服务地不在华为IAP支持结算的国家/地区中
  220. }
  221. } else {
  222. // 其他外部错误
  223. }
  224. }
  225. });
  226. }
  227. //补单
  228. @Override
  229. public void checkOrder(int pricetype) {
  230. Logger.e("补单:" + pricetype);
  231. // 构造一个OwnedPurchasesReq对象
  232. OwnedPurchasesReq ownedPurchasesReq = new OwnedPurchasesReq();
  233. // priceType: 0:消耗型商品; 1:非消耗型商品; 2:订阅型商品
  234. ownedPurchasesReq.setPriceType(pricetype);
  235. // 获取调用接口的Activity对象
  236. // 调用obtainOwnedPurchases接口获取所有已购但未发货的消耗型商品的购买信息
  237. Task<OwnedPurchasesResult> task = Iap.getIapClient(mView.getActivity()).obtainOwnedPurchases(ownedPurchasesReq);
  238. task.addOnSuccessListener(new OnSuccessListener<OwnedPurchasesResult>() {
  239. @Override
  240. public void onSuccess(OwnedPurchasesResult result) {
  241. // 获取接口请求成功的结果
  242. if (result != null && result.getInAppPurchaseDataList() != null) {
  243. for (int i = 0; i < result.getInAppPurchaseDataList().size(); i++) {
  244. String inAppPurchaseData = result.getInAppPurchaseDataList().get(i);
  245. String inAppSignature = result.getInAppSignature().get(i);
  246. Logger.e("inAppPurchaseData:" + inAppPurchaseData);
  247. if (inAppPurchaseData != null) {
  248. sendProduct(inAppPurchaseData);
  249. }
  250. // 使用应用的IAP公钥验证inAppPurchaseData的签名数据
  251. // 如果验签成功,确认每个商品的购买状态。确认商品已支付后,检查此前是否已发过货,未发货则进行发货操作。发货成功后执行消耗操作
  252. }
  253. }
  254. }
  255. }).addOnFailureListener(new OnFailureListener() {
  256. @Override
  257. public void onFailure(Exception e) {
  258. if (e instanceof IapApiException) {
  259. IapApiException apiException = (IapApiException) e;
  260. Status status = apiException.getStatus();
  261. int returnCode = apiException.getStatusCode();
  262. } else {
  263. // 其他外部错误
  264. }
  265. }
  266. });
  267. }
  268. @Override
  269. public void checkAutoPay() {
  270. // 构造一个OwnedPurchasesReq对象
  271. OwnedPurchasesReq ownedPurchasesReq = new OwnedPurchasesReq();
  272. // priceType: 2:订阅型商品
  273. ownedPurchasesReq.setPriceType(2);
  274. // 调用obtainOwnedPurchases接口
  275. Task<OwnedPurchasesResult> task = Iap.getIapClient(mView.getActivity()).obtainOwnedPurchases(ownedPurchasesReq);
  276. task.addOnSuccessListener(new OnSuccessListener<OwnedPurchasesResult>() {
  277. @Override
  278. public void onSuccess(OwnedPurchasesResult result) {
  279. // 获取接口请求结果
  280. if (result != null && result.getInAppPurchaseDataList() != null) {
  281. for (int i = 0; i < result.getInAppPurchaseDataList().size(); i++) {
  282. String inAppPurchaseData = result.getInAppPurchaseDataList().get(i);
  283. String inAppSignature = result.getInAppSignature().get(i);
  284. // 您需要使用您的应用的IAP公钥验证inAppPurchaseData的签名
  285. // 如果验签成功,请检查支付状态和订阅状态
  286. try {
  287. InAppPurchaseData inAppPurchaseDataBean = new InAppPurchaseData(inAppPurchaseData);
  288. int purchaseState = inAppPurchaseDataBean.getPurchaseState();
  289. boolean isSubValid = inAppPurchaseDataBean.isSubValid();
  290. /**
  291. *
  292. * true:表示商品已经收费且未过期,也没有发生退款;商品处于宽限期。您可以基于该标志为顾客提供服务。
  293. * false:未完成购买或者已经过期,或者购买后已经退款。
  294. *
  295. * */
  296. if (isSubValid) {
  297. //已购买,刷新用户信息
  298. // MainActivity.getIntences().loadJsMehtod("HuaWeiAutoPayResult('" + true + "')");
  299. } else {
  300. //未购买,刷新用户信息
  301. // MainActivity.getIntences().loadJsMehtod("HuaWeiAutoPayResult('" + false + "')");
  302. }
  303. EfunboxUtil.getYFVip(mView.getActivity(), new EfunboxInterfaces.getYFVipInterfaces() {
  304. @Override
  305. public void success(long time) {
  306. }
  307. @Override
  308. public void error() {
  309. }
  310. });
  311. } catch (JSONException e) {
  312. }
  313. }
  314. }
  315. }
  316. }).addOnFailureListener(new OnFailureListener() {
  317. @Override
  318. public void onFailure(Exception e) {
  319. if (e instanceof IapApiException) {
  320. IapApiException apiException = (IapApiException) e;
  321. Status status = apiException.getStatus();
  322. int returnCode = apiException.getStatusCode();
  323. } else {
  324. // 其他外部错误
  325. }
  326. }
  327. });
  328. }
  329. @Override
  330. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  331. if (requestCode == 6666) {
  332. if (data != null) {
  333. // 使用parseRespCodeFromIntent方法获取接口请求结果
  334. int returnCode = IapClientHelper.parseRespCodeFromIntent(data);
  335. if (returnCode == OrderStatusCode.ORDER_STATE_SUCCESS) {
  336. //支持支付
  337. // 使用parseCarrierIdFromIntent方法获取接口返回的运营商ID
  338. String carrierId = IapClientHelper.parseCarrierIdFromIntent(data);
  339. Logger.e("onActivityResult--carrierId:" + carrierId);
  340. if (payBean != null) {
  341. toPay(payBean);
  342. } else {
  343. CusToast.getInstance(mView.getActivity()).show("payBean==null", 3000);
  344. }
  345. }
  346. }
  347. } else if (requestCode == 9999) {
  348. //支付返回
  349. // 调用parsePurchaseResultInfoFromIntent方法解析支付结果数据
  350. PurchaseResultInfo purchaseResultInfo = Iap.getIapClient(mView.getActivity()).parsePurchaseResultInfoFromIntent(data);
  351. switch (purchaseResultInfo.getReturnCode()) {
  352. case OrderStatusCode.ORDER_STATE_CANCEL:
  353. // 用户取消
  354. // Toast.makeText(mActivity, "用户取消支付", Toast.LENGTH_SHORT).show();
  355. CusToast.getInstance(mView.getActivity()).show("取消支付", 3000);
  356. break;
  357. case OrderStatusCode.ORDER_STATE_FAILED:
  358. case OrderStatusCode.ORDER_STATE_DEFAULT_CODE:
  359. case OrderStatusCode.ORDER_PRODUCT_OWNED:
  360. // 检查是否存在未发货商品
  361. Logger.e("\"支付失败:\" + purchaseResultInfo.getReturnCode():" + purchaseResultInfo.getReturnCode());
  362. CusToast.getInstance(mView.getActivity()).show("支付失败:" + purchaseResultInfo.getReturnCode(), 3000);
  363. break;
  364. case OrderStatusCode.ORDER_STATE_SUCCESS:
  365. // 支付成功
  366. String inAppPurchaseData = purchaseResultInfo.getInAppPurchaseData();
  367. String inAppPurchaseDataSignature = purchaseResultInfo.getInAppDataSignature();
  368. Logger.e("支付成功:" + inAppPurchaseData);
  369. CusToast.getInstance(mView.getActivity()).show("支付成功", 3000);
  370. // 使用您应用的IAP公钥验证签名
  371. // 若验签成功,则进行发货
  372. // 若用户购买商品为消耗型商品,您需要在发货成功后调用consumeOwnedPurchase接口进行消耗
  373. if (Integer.valueOf(payBean.priceType) == 0) {
  374. //消耗型产品
  375. //发货
  376. // MainActivity.getIntences().loadJsMehtod("HuaWeiPayResult(" + true + ")");
  377. sendProduct(inAppPurchaseData);
  378. } else if (Integer.valueOf(payBean.priceType) == 1) {
  379. //非消耗型产品
  380. } else if (Integer.valueOf(payBean.priceType) == 2) {
  381. //订阅型产品
  382. checkAutoPay();
  383. }
  384. // finish();
  385. break;
  386. default:
  387. Logger.e("支付default:purchaseResultInfo.getReturnCode():" + purchaseResultInfo.getReturnCode());
  388. break;
  389. }
  390. }
  391. }
  392. public void toPay(HuaWeiPayBean bean) {
  393. if (bean == null) {
  394. CusToast.getInstance(mView.getActivity()).show("payBean==null", 3000);
  395. return;
  396. }
  397. // 构造一个PurchaseIntentReq对象
  398. PurchaseIntentReq req = new PurchaseIntentReq();
  399. // 通过createPurchaseIntent接口购买的商品必须是您在AppGallery Connect网站配置的商品
  400. req.setProductId(bean.productIds);
  401. // priceType: 0:消耗型商品; 1:非消耗型商品; 2:订阅型商品
  402. if (TextUtils.isEmpty(bean.priceType)) {
  403. bean.priceType = "0";
  404. }
  405. req.setPriceType(Integer.valueOf(bean.priceType));
  406. req.setDeveloperPayload(bean.orderId);
  407. // 获取调用接口的Activity对象
  408. // 调用createPurchaseIntent接口创建托管商品订单
  409. Task<PurchaseIntentResult> task = Iap.getIapClient(mView.getActivity()).createPurchaseIntent(req);
  410. task.addOnSuccessListener(new OnSuccessListener<PurchaseIntentResult>() {
  411. @Override
  412. public void onSuccess(PurchaseIntentResult result) {
  413. // 获取创建订单的结果
  414. Status status = result.getStatus();
  415. if (status.hasResolution()) {
  416. try {
  417. // 启动IAP返回的收银台页面
  418. status.startResolutionForResult(mView.getActivity(), 9999);
  419. } catch (IntentSender.SendIntentException exp) {
  420. }
  421. }
  422. }
  423. }).addOnFailureListener(new OnFailureListener() {
  424. @Override
  425. public void onFailure(Exception e) {
  426. if (e instanceof IapApiException) {
  427. IapApiException apiException = (IapApiException) e;
  428. Status status = apiException.getStatus();
  429. int returnCode = apiException.getStatusCode();
  430. Logger.e("支付调用失败:" + status + "--returnCode=" + returnCode);
  431. } else {
  432. // 其他外部错误
  433. }
  434. CusToast.getInstance(mView.getActivity()).show("支付调用失败", 3000);
  435. }
  436. });
  437. }
  438. //发货
  439. public void sendProduct(String data) {
  440. InAppPurchaseData inAppPurchaseDataBean = null;
  441. try {
  442. inAppPurchaseDataBean = new InAppPurchaseData(data);
  443. int purchaseState = inAppPurchaseDataBean.getPurchaseState();
  444. int consumptionState = inAppPurchaseDataBean.getConsumptionState();
  445. if (purchaseState == 0 && consumptionState == 0) {
  446. //购买成功但是未消耗,开始发货
  447. //支付成功
  448. Logger.e("准备发货");
  449. String purchaseToken = inAppPurchaseDataBean.getPurchaseToken();
  450. ConsumeOwnedPurchaseReq req = new ConsumeOwnedPurchaseReq();
  451. req.setPurchaseToken(purchaseToken);
  452. Task<ConsumeOwnedPurchaseResult> task = Iap.getIapClient(mView.getActivity()).consumeOwnedPurchase(req);
  453. task.addOnSuccessListener(new OnSuccessListener<ConsumeOwnedPurchaseResult>() {
  454. @Override
  455. public void onSuccess(ConsumeOwnedPurchaseResult result) {
  456. // 获取接口请求结果
  457. Logger.e("发货成功");
  458. EfunboxUtil.getYFVip(mView.getActivity(), new EfunboxInterfaces.getYFVipInterfaces() {
  459. @Override
  460. public void success(long time) {
  461. }
  462. @Override
  463. public void error() {
  464. }
  465. });
  466. }
  467. }).addOnFailureListener(new OnFailureListener() {
  468. @Override
  469. public void onFailure(Exception e) {
  470. if (e instanceof IapApiException) {
  471. IapApiException apiException = (IapApiException) e;
  472. Status status = apiException.getStatus();
  473. int returnCode = apiException.getStatusCode();
  474. } else {
  475. // 其他外部错误
  476. }
  477. }
  478. });
  479. } else if (purchaseState == 0 && consumptionState == 1) {
  480. Logger.e("已购买并且已经发货了");
  481. EfunboxUtil.getYFVip(mView.getActivity(), new EfunboxInterfaces.getYFVipInterfaces() {
  482. @Override
  483. public void success(long time) {
  484. }
  485. @Override
  486. public void error() {
  487. }
  488. });
  489. } else {
  490. Logger.e("发货失败");
  491. Logger.e("purchaseState:" + purchaseState);
  492. Logger.e("consumptionState:" + consumptionState);
  493. }
  494. } catch (JSONException e) {
  495. e.printStackTrace();
  496. }
  497. }
  498. class PayItemHolder {
  499. FrameLayout mConstraintLayoutBg;
  500. TextView mTitle;
  501. TextView mOriginPrice;
  502. TextView mPayMoney;
  503. ImageView mRecommend;
  504. public PayItemHolder(View itemView) {
  505. mConstraintLayoutBg = itemView.findViewById(R.id.activity_pay_tmail_item_bg);
  506. mTitle = itemView.findViewById(R.id.activity_pay_tmail_item_title);
  507. mOriginPrice = itemView.findViewById(R.id.activity_pay_tmail_item_originprice);
  508. mPayMoney = itemView.findViewById(R.id.activity_pay_tmail_item_money);
  509. mRecommend = itemView.findViewById(R.id.activity_pay_tmail_item_recommend);
  510. }
  511. }
  512. class HuaWeiPayBean {
  513. public String productIds;
  514. public String priceType;
  515. public String orderId;
  516. }
  517. }