206 lines
8.5 KiB
Java
206 lines
8.5 KiB
Java
package com.uiuios.aios.activity;
|
|
|
|
import android.content.Intent;
|
|
import android.util.Log;
|
|
import android.view.View;
|
|
|
|
import androidx.databinding.DataBindingUtil;
|
|
|
|
import com.trello.rxlifecycle4.RxLifecycle;
|
|
import com.trello.rxlifecycle4.android.ActivityEvent;
|
|
import com.uiuios.aios.R;
|
|
import com.uiuios.aios.base.BaseDataBindingActivity;
|
|
import com.uiuios.aios.bean.BaseResponse;
|
|
import com.uiuios.aios.bean.OrderBean;
|
|
import com.uiuios.aios.bean.WxpayBean;
|
|
import com.uiuios.aios.databinding.ActivityPayBinding;
|
|
import com.uiuios.aios.network.NetInterfaceManager;
|
|
import com.uiuios.aios.utils.BitmapUtils;
|
|
import com.uiuios.aios.utils.ToastUtil;
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers;
|
|
import io.reactivex.rxjava3.annotations.NonNull;
|
|
import io.reactivex.rxjava3.core.Observable;
|
|
import io.reactivex.rxjava3.core.Observer;
|
|
import io.reactivex.rxjava3.disposables.Disposable;
|
|
import io.reactivex.rxjava3.functions.Consumer;
|
|
import io.reactivex.rxjava3.schedulers.Schedulers;
|
|
|
|
public class PayActivity extends BaseDataBindingActivity {
|
|
private static final String TAG = PayActivity.class.getSimpleName();
|
|
|
|
private ActivityPayBinding mBinding;
|
|
|
|
private OrderBean mOrderBean;
|
|
|
|
@Override
|
|
protected int getLayoutId() {
|
|
return R.layout.activity_pay;
|
|
}
|
|
|
|
@Override
|
|
protected boolean setNightMode() {
|
|
return true;
|
|
}
|
|
|
|
@Override
|
|
protected boolean setfitWindow() {
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* 初始化视图
|
|
*/
|
|
@Override
|
|
public void initView() {
|
|
mBinding = DataBindingUtil.setContentView(this, getLayoutId());
|
|
mBinding.tvRefresh.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
getWechatPayQrcode(mOrderBean);
|
|
}
|
|
});
|
|
mBinding.ivExit.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
finish();
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 初始化数据
|
|
*/
|
|
@Override
|
|
public void initData() {
|
|
Intent intent = getIntent();
|
|
if (intent == null) return;
|
|
OrderBean orderBean = (OrderBean) intent.getSerializableExtra("OrderBean");
|
|
if (orderBean == null) return;
|
|
mOrderBean = orderBean;
|
|
getWechatPayQrcode(mOrderBean);
|
|
}
|
|
|
|
private Disposable mCountdownSubscribe;
|
|
|
|
private void getWechatPayQrcode(OrderBean orderBean) {
|
|
if (orderBean == null) return;
|
|
NetInterfaceManager.getInstance()
|
|
.getOrderPayObservable(orderBean.getOrder_sn(), orderBean.getOrder_id())
|
|
.compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
|
|
.subscribe(new Observer<BaseResponse<WxpayBean>>() {
|
|
@Override
|
|
public void onSubscribe(@NonNull Disposable d) {
|
|
Log.e("getOrderPayObservable", "onSubscribe: ");
|
|
}
|
|
|
|
@Override
|
|
public void onNext(@NonNull BaseResponse<WxpayBean> wxpayBeanBaseResponse) {
|
|
Log.e("getOrderPayObservable", "onNext: " + wxpayBeanBaseResponse);
|
|
if (wxpayBeanBaseResponse.code == 200) {
|
|
WxpayBean wxpayBean = wxpayBeanBaseResponse.data;
|
|
mBinding.setWxpayBean(wxpayBean);
|
|
mBinding.tvOrderId.setText("订单编号:" + wxpayBean.getOrder_sn());
|
|
long expireTime = wxpayBean.getTime_expire();
|
|
mBinding.ivWxQrcode.setImageBitmap(BitmapUtils.createQRImage(wxpayBean.getCode_url(), 400, 400));
|
|
initCountdown(expireTime);
|
|
checkOrder(wxpayBean);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onError(@NonNull Throwable e) {
|
|
Log.e("getOrderPayObservable", "onError: " + e.getMessage());
|
|
}
|
|
|
|
@Override
|
|
public void onComplete() {
|
|
Log.e("getOrderPayObservable", "onComplete: ");
|
|
}
|
|
});
|
|
}
|
|
|
|
private void initCountdown(long second) {
|
|
if (mCountdownSubscribe != null && !mCountdownSubscribe.isDisposed()) {
|
|
mCountdownSubscribe.dispose();
|
|
}
|
|
mCountdownSubscribe = Observable.interval(1, TimeUnit.SECONDS)
|
|
.compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
|
|
.subscribeOn(Schedulers.io())
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|
.subscribe(new Consumer<Long>() {
|
|
|
|
@Override
|
|
public void accept(Long aLong) throws Exception {
|
|
long timestamp = System.currentTimeMillis() / 1000;
|
|
Log.e("initCountdown", "accept: time_expire = " + second);
|
|
Log.e("initCountdown", "accept: aLong = " + aLong);
|
|
Log.e("initCountdown", "accept: timestamp = " + timestamp);
|
|
if (timestamp >= second) {
|
|
mBinding.ivWxQrcode.setImageDrawable(getDrawable(R.drawable.qrcode_expired));
|
|
if (mCountdownSubscribe != null && !mCountdownSubscribe.isDisposed()) {
|
|
mCountdownSubscribe.dispose();
|
|
}
|
|
} else {
|
|
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
private Disposable mCheckOrderSubscribe;
|
|
|
|
private void checkOrder(WxpayBean wxpayBean) {
|
|
if (mCheckOrderSubscribe != null && !mCheckOrderSubscribe.isDisposed()) {
|
|
mCheckOrderSubscribe.dispose();
|
|
}
|
|
mCheckOrderSubscribe = Observable.interval(5, TimeUnit.SECONDS)
|
|
.compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
|
|
.subscribeOn(Schedulers.io())
|
|
.observeOn(AndroidSchedulers.mainThread())
|
|
.subscribe(new Consumer<Long>() {
|
|
@Override
|
|
public void accept(Long aLong) throws Exception {
|
|
NetInterfaceManager.getInstance()
|
|
.getOrderPayCheckObservable(wxpayBean.getOrder_sn(), wxpayBean.getOrder_id())
|
|
.compose(RxLifecycle.bindUntilEvent(getLifecycleSubject(), ActivityEvent.DESTROY))
|
|
.subscribe(new Observer<BaseResponse>() {
|
|
@Override
|
|
public void onSubscribe(@NonNull Disposable d) {
|
|
Log.e("checkOrder", "onSubscribe: ");
|
|
}
|
|
|
|
@Override
|
|
public void onNext(@NonNull BaseResponse baseResponse) {
|
|
Log.e("checkOrder", "onNext: " + baseResponse);
|
|
if (baseResponse.code == 200) {
|
|
if (mCountdownSubscribe != null && !mCountdownSubscribe.isDisposed()) {
|
|
mCountdownSubscribe.dispose();
|
|
}
|
|
if (mCheckOrderSubscribe != null && !mCheckOrderSubscribe.isDisposed()) {
|
|
mCheckOrderSubscribe.dispose();
|
|
}
|
|
ToastUtil.show("支付成功");
|
|
finish();
|
|
} else {
|
|
Log.e("checkOrder", "onNext: " + "支付失败");
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onError(@NonNull Throwable e) {
|
|
Log.e("checkOrder", "onError: " + e.getMessage());
|
|
}
|
|
|
|
@Override
|
|
public void onComplete() {
|
|
Log.e("checkOrder", "onComplete: ");
|
|
}
|
|
});
|
|
}
|
|
});
|
|
}
|
|
}
|