package com.bigdo.app;
import org.json.JSONObject;
import com.bigdo.alipay.AliPayHelper;
import com.bigdo.alipay.Result;
import com.bigdo.common.Login;
import com.bigdo.common.RConfig;
import com.bigdo.common.RState;
import com.bigdo.common.User;
import com.bigdo.util.PayResult;
import com.bigdo.util.WSCheck;
import com.bigdo.util.WSHelper;
import com.bigdo.util.WSResult;
import android.annotation.SuppressLint;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.content.Intent;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class PayActivity extends BaseActivity {
private int orderno;
private float amount;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.payactivity);
View com_title = findViewById(R.id.com_title_host);
Button back = (Button) com_title.findViewById(R.id.sub_com_title_back);
back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
finish();
}
});
TextView title_msg = (TextView) com_title
.findViewById(R.id.sub_com_title_context);
title_msg.setText("充值");
TextView pay = (TextView) findViewById(R.id.pay);
pay.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
createOrder();
}
});
setUserInfo(true);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("orderno", orderno);
outState.putFloat("amount", amount);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
orderno = savedInstanceState.getInt("orderno", -1);
amount = savedInstanceState.getFloat("amount", 0);
setUserInfo(false);
}
private void setUserInfo(boolean isCreate) {
if (isCreate) {
orderno = this.getIntent().getIntExtra("orderno", -1);
amount = this.getIntent().getFloatExtra("amount", 0);
}
if (orderno >= 0) {
EditText amountObj = (EditText) findViewById(R.id.pay_amount);
amountObj.setEnabled(false);
amountObj.setBackgroundDrawable(null);
amountObj.setText(amount + "");
amountObj.setTextColor(0xfff08300);
}
String name = "";
TextView username = (TextView) findViewById(R.id.pay_username);
User user = Login.get(this);
if (user != null) {
name = user.alias;
if (name == null || name.equals("")) {
name = user.user;
} else {
name += "(" + user.user + ")";
}
} else {
showInfo("请登录");
}
username.setText(name);
}
private void createOrder() {
User user = Login.get(this);
if (user != null) {
EditText amountObj = (EditText) findViewById(R.id.pay_amount);
String amount_v = amountObj.getText().toString();
float amount = 0;
try {
amount = Float.parseFloat(amount_v);
} catch (Exception e) {
amountObj.setError("输入的金额有误");
amountObj.requestFocus();
showInfo("输入的金额有误");
return;
}
if (amount <= 0) {
amountObj.setError("金额必需大于零");
amountObj.requestFocus();
showInfo("金额必需大于零");
return;
}
String userdesc = user.alias;
if (userdesc == null || userdesc.equals("")) {
userdesc = user.user;
} else {
userdesc += "(" + user.user + ")";
}
JSONObject jparam = new JSONObject();
try {
jparam.put("orderno", orderno);
jparam.put("user", user.user);
jparam.put("userdesc", userdesc);
jparam.put("amount", Double.parseDouble(Float.toString(amount)));
jparam.put("paytype", "alipay");
jparam.put("notes", user.user + " 充值.");
} catch (Exception e) {
this.showInfo("准备充值参数出错.");
return;
}
showProgress("提交单中...");
String url = RConfig.createOrder(this);
String data = jparam.toString();
WSHelper ws = new WSHelper(this, "", false, handler, url, "",
WSHelper.getStringEntity(data), 1, 0, 0, 0, WSHelper.POST);
ws.start();
Log.e("createOrder", url);
Log.e("createOrder_data", data);
} else {
showInfo("请先登录");
}
}
@SuppressLint("HandlerLeak")
protected Handler handler = new Handler() {
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.arg1 == RState.WSCall) {
hiddenProgress();
WSResult result = (WSResult) msg.getData().getParcelable(
WSResult.ResultKey);
if (result.RequestCode == 1) {
JSONObject jresult = WSCheck.Json(PayActivity.this, result);
createOrderFinish(jresult);
} else if (result.RequestCode == 2) {
JSONObject jresult = WSCheck.Json(PayActivity.this, result);
payOffFinish(jresult);
}
} else if (msg.arg1 == PayResult.pay_request_code) {
handlerPayResult(msg);
}
}
};
/**
* 处理支付通知
*
* @param msg
* @param handler
* @return
*/
protected boolean handlerPayResult(Message msg) {
if (msg != null && msg.arg1 == PayResult.pay_request_code) {
hiddenPayProgress();
PayResult resul = (PayResult) msg.getData().getParcelable(
PayResult.ResultKey);
if (resul != null) {
if ("2".equals(resul.PayType)) {
Result result = new Result(resul.PayResult);
if ("9000".equals(result.getResultStatus())) {
setResult(1);
showInfo("支付成功,等待结算");
if (resul.UserData != null) {
int orderno = resul.UserData.getInt("orderno");
float amount = resul.UserData.getFloat("amount");
payFinish(orderno, amount);
return true;
}
finish();
return true;
} else {
String resultInfo = result.getResult();
if (resultInfo != null && !resultInfo.equals("")
&& !"".equals(resultInfo.trim())) {
messageBox("支付消息:" + resultInfo,
new OnDismissListener() {
@Override
public void onDismiss(
DialogInterface dialog) {
finish();
}
});
return false;
}
finish();
}
}
}
}
return false;
}
private void payFinish(int orderno, float amount) {
if (orderno >= 0 && amount > 0) {
User user = Login.get(this);
if (user != null) {
JSONObject jparam = new JSONObject();
try {
jparam.put("orderno", orderno);
jparam.put("user", user.user);
jparam.put("amount", amount);
jparam.put("status", 2);
} catch (Exception e) {
this.showInfo("准备结算参数出错.");
return;
}
showProgress("结算中...");
String url = RConfig.updateOrderStatus(this);
String data = jparam.toString();
WSHelper ws = new WSHelper(this, "", false, handler, url, "",
WSHelper.getStringEntity(data), 2, 0, 0, 0,
WSHelper.POST);
ws.start();
Log.e("payFinish", url);
Log.e("payFinish_data", data);
} else {
showInfo("请先登录");
}
}
}
private void payOffFinish(JSONObject jresult) {
if (jresult != null) {
messageBox("结算成功", new OnDismissListener() {
@Override
public void onDismiss(DialogInterface arg0) {
setResult(1);
finish();
}
});
}
}
private void createOrderFinish(JSONObject jresult) {
if (jresult != null) {
try {
int orderno = jresult.getInt("orderno");
float amount = (float) jresult.getDouble("amount");
if (orderno >= 0) {
setResult(1);
AliPay(orderno, amount);
} else {
showInfo("订单号不正确,请查看订单页面.");
}
} catch (Exception e) {
}
}
}
/**
* 开始支付宝支付
*
* @param orderno
* @param curpay
*/
@SuppressLint("SimpleDateFormat")
public void AliPay(int orderno, float amount) {
User user = Login.get(this);
if (user != null) {
try {
if (amount <= 0) {
messageBox("支付金额必须大于零.");
return;
}
String userdesc = user.alias;
if (userdesc == null || userdesc.equals("")) {
userdesc = user.user;
} else {
userdesc += "(" + user.user + ")";
}
String oederInfo = AliPayHelper.getNewOrder(this, orderno + "",
userdesc + "-充值", userdesc, amount);
showPayProgress();
Bundle b = new Bundle();
b.putInt("orderno", orderno);
b.putString("user", user.user);
b.putFloat("amount", amount);
acquireWakeLock("com_bigdo_app_wake_lock_alipay");
if (!AliPayHelper.startPay(this, handler, oederInfo, b, 0)) {
hiddenPayProgress();
messageBox("支付失败.");
}
} catch (Exception ex) {
messageBox("支付发生错误.");
}
} else {
showInfo("请先登录");
}
}
public void showPayProgress() {
RelativeLayout p = (RelativeLayout) findViewById(R.id.pay_progress);
if (p != null) {
p.setVisibility(RelativeLayout.VISIBLE);
}
}
public void hiddenPayProgress() {
RelativeLayout p = (RelativeLayout) findViewById(R.id.pay_progress);
if (p != null) {
p.setVisibility(RelativeLayout.GONE);
}
}
@Override
public void onClearData() {
// TODO Auto-generated method stub
}
@Override
public void onVideoBroadcast(Intent intent) {
// TODO Auto-generated method stub
}
}