2:代码整合:
(1):
<!-- 支付部分 -->
<activity
android:name="com.unionpay.uppay.PayActivity"
android:configChanges="orientation|keyboardHidden"
android:excludeFromRecents="true"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" >
</activity>
<activity
android:name="com.alipay.android.app.sdk.WapPayActivity"
android:screenOrientation="portrait" >
</activity>
ResourceMap 文件:这个文件必须放在package com.alipay.android.app.lib;否则alipay.jar会反射找不到文件配置和支付宝加载的界面;
(2):
Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
Result result = new Result((String) msg.obj);
switch (msg.what) {
case RQF_LOGIN:
case RQF_PAY:
Toast.makeText(ExternalPartnerAct.this, result.parseResult(), Toast.LENGTH_SHORT).show();
break;
}
};
};
/**
* @description:直接调取支付宝
* @author samy
* @date 2014年10月16日 下午7:16:20
*/
private void payByZFBLocal() {
final String orderInfo = Result.getNewOrderInfo(orderId, shopItemBean.merchantName, tempNeedPrice >= 0 ? tempNeedPrice + "" : (-tempNeedPrice) + "");
new Thread() {
public void run() {
AliPay alipay = new AliPay(aty, mHandler);
// 设置为沙箱模式,不设置默认为线上环境;从这里开始跳转到支付宝界面;运行完支付pay()后回调;
// alipay.setSandBox(true);
String result = alipay.pay(orderInfo);
Message msg = new Message();
msg.what = RQF_PAY;
msg.obj = result;
mHandler.sendMessage(msg);
}
}.start();
}
/**
* @description:封装起来有多处用到;
* @author samy
* @date 2014年10月19日 下午12:10:45
*/
public static String getNewOrderInfo(String out_trade_no, String subject, String total_fee) {
StringBuilder sb = new StringBuilder();
sb.append("partner=\"");// 合作者身份ID
sb.append(Keys.DEFAULT_PARTNER);
sb.append("\"&out_trade_no=\"");// 商户网站唯一订单号
sb.append(out_trade_no);
sb.append("\"&subject=\"");// 商品名称
sb.append(subject);
// sb.append("\"&body=\"");// 商品详情
// sb.append("充100返5元");
sb.append("\"&total_fee=\"");// 总金额
sb.append(total_fee);
sb.append("\"?ify_url=\"");// 网址需要做URL编码; 异步通知;服务器异步通知页面路径;
// sb.append(URLEncoder.encode("http://notify.java.jpxx.org/index.jsp"));
sb.append(URLEncoder.encode("http://waimai.365sji.com/notify_url_client.jsp"));
sb.append("\"&service=\"mobile.securitypay.pay");// 接口名称 ,固定值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");// 支付类型;支付类型。默认值为:1(商品购买)
sb.append("\"&seller_id=\"");// 卖家支付宝账号
sb.append(Keys.DEFAULT_SELLER);
// 如果show_url值为空,可不传
// sb.append("\"&show_url=\"");
sb.append("\"&it_b_pay=\"1m");// 支付超时 时间;
sb.append("\"");
String sign = Rsa.sign(sb.toString(), Keys.PRIVATE);
sign = URLEncoder.encode(sign);
StringBuffer buffer = new StringBuffer(sb);
buffer.append("&sign=\"");
buffer.append(sign);
buffer.append("\"&sign_type=\"RSA\"");// 签名;签名方式,签名类型,目前仅支持RSA
return new String(buffer);
}
ps:
参照部分:
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
try {
String info = getNewOrderInfo(position);
String sign = Rsa.sign(info, Keys.PRIVATE);
sign = URLEncoder.encode(sign);
info += "&sign=\"" + sign + "\"&" + getSignType();// 签名;签名方式,签名类型,目前仅支持RSA
Log.i("ExternalPartner", "start pay");
Log.i("samy", "info = " + info);
final String orderInfo = info;
new Thread() {
public void run() {
AliPay alipay = new AliPay(ExternalPartnerAct.this, mHandler);
// 设置为沙箱模式,不设置默认为线上环境;从这里开始跳转到支付宝界面;运行完支付pay()后回调;
// alipay.setSandBox(true);
String result = alipay.pay(orderInfo);
Log.i(TAG, "result = " + result);
Message msg = new Message();
msg.what = RQF_PAY;
msg.obj = result;
mHandler.sendMessage(msg);
}
}.start();
}
catch (Exception ex) {
ex.printStackTrace();
Toast.makeText(ExternalPartnerAct.this, R.string.remote_call_failed, Toast.LENGTH_SHORT).show();
}
} /**
* @description:加载支付宝网页
* @author samy
* @date 2014年10月16日 下午7:16:41
*/
private void payByZFBWeb() {
// KJHttp kjHttp = GlobalApp.getKJHttp();
KJStringParams params = new KJStringParams();
params.put("trade_no", orderId);
params.put("subject", shopItemBean.merchantName);
params.put("total_fee", tempNeedPrice >= 0 ? tempNeedPrice + "" : (-tempNeedPrice) + "");
// kjHttp.urlGet(UrlConstants.PAY_SUBMIT, params, null);//现不做回调处理;
if (params != null) {
// StringBuilder是用来组拼请求地址和参数
StringBuilder str = new StringBuilder(UrlConstants.PAY_SUBMIT);
// str.append("?").append(params.toString());
str.append("?");
if (params != null && params.urlParams.size() != 0) {
for (ConcurrentHashMap.Entry<String, String> entry : params.urlParams.entrySet()) {
// 如果请求参数中有中文,需要进行URLEncoder编码 gbk/utf8
try {
str.append(entry.getKey()).append("=").append(URLEncoder.encode(entry.getValue(), "utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
str.append("&");
}
str.deleteCharAt(str.length() - 1);
}
confirm_order_btn.setEnabled(false);
Bundle bundle = new Bundle();
bundle.putString(BaseWebViewAct.PAGE_TITLE, "支付宝支付");
bundle.putString(BaseWebViewAct.PAGE_URL, str.toString());
showActivity(aty, PayByZFBAct.class, bundle);
}
} 原文地址:http://www.cnblogs.com/hongfeiliuxing/p/a8f5ad2ea6491fc16c106862c64176c5.html