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 } }