package com.itbox.grzl.engine;
import java.net.URLEncoder;
import android.app.Activity;
import android.os.Handler;
import com.itbox.fx.core.AppException;
import com.itbox.fx.core.L;
import com.itbox.fx.net.Net;
import com.itbox.grzl.Const;
import com.itbox.grzl.bean.OrderInfoModel;
import com.itbox.grzl.engine.alipay.Rsa;
import com.loopj.android.http.RequestParams;
/**
* @author hyh creat_at:2014-2-28-下午4:54:19
*/
public class PayEngine {
private static String getOrderInfo(OrderInfoModel model) {
StringBuilder sb = new StringBuilder();
sb.append("partner=\"");
sb.append(Const.ALIPAY_PARTNER);
sb.append("\"&out_trade_no=\"");
sb.append(model.getOut_trade_no());
sb.append("\"&subject=\"");
sb.append(model.getSubject());
sb.append("\"&body=\"");
sb.append(model.getBody());
sb.append("\"&total_fee=\"");
sb.append(model.getTotal_fee());
sb.append("\"¬ify_url=\"");
// 网址需要做URL编码
sb.append(URLEncoder.encode(model.getNotify_url()));// TODO 缺少
sb.append("\"&service=\"mobile.securitypay.pay");
sb.append("\"&_input_charset=\"UTF-8");
sb.append("\"&return_url=\"");
sb.append(URLEncoder.encode("http://m.alipay.com"));
sb.append("\"&payment_type=\"1");
sb.append("\"&seller_id=\"");
sb.append(model.getSeller_id());
// 如果show_url值为空,可不传
// sb.append("\"&show_url=\"");
// sb.append("\"&it_b_pay=\"");
// sb.append(model.getIt_b_pay());
sb.append("\"");
// start the pay.
return new String(sb);
}
private static String getOrderInfoWithoutNull(OrderInfoModel model) {
RequestParams params = Net.getRequestParamsWithoutNull(model);
String info = params.toString();
info = info.replace("=", "=\"").replace("&", "\"&") + "\"";
return info;
}
private static String getSignType() {
return "sign_type=\"RSA\"";
}
private static String signInfo2(String orderInfo) {
String sign = Rsa.sign(orderInfo, Const.ALIPAY_PUBLIC);
sign = URLEncoder.encode(sign);
orderInfo += "&sign=\"" + sign + "\"&" + getSignType();
return orderInfo;
}
private static String signInfo(String orderInfo, String sign) {
// String sign = Rsa.sign(orderInfo, Const.ALIPAY_PRIVATE);
// String newSign = URLEncoder.encode(sign);
orderInfo += "&sign=\"" + sign + "\"&" + getSignType();
// orderInfo += "&" + getSignType();
return orderInfo;
}
public static void startAliPayClient(Activity context, String model,
String sign, Handler handler) {
try {
// String info = getOrderInfo(model);
String info = model;
// String info2 = signInfo2(info);
info = signInfo(info, sign);
L.i(info);
new AlipayThread(context, info, handler).start();
} catch (Exception ex) {
AppException.handle(ex);
}
}
public static void startAliPayClient(Activity context,
OrderInfoModel model,Handler handler) {
try {
// String info = getOrderInfo(model);
String info = getOrderInfoWithoutNull(model);
// String info2 = signInfo2(info);
info = getOrderInfo(model);
info = signInfo(info, URLEncoder.encode(model.getSign()));
L.i("order info = " + model.toString());
L.i("order info = " + info);
new AlipayThread(context, info, handler).start();
} catch (Exception ex) {
AppException.handle(ex);
}
}
public static void startAliPayClient2(Activity context, String result,
Handler handler) {
try {
// String info = getOrderInfo(model);
// String info = getOrderInfoWithoutNull(model);
// info = signInfo(info);
new AlipayThread(context, result, handler).start();
} catch (Exception ex) {
AppException.handle(ex);
}
}
}