进入银联支付的开发者平台:https://open.unionpay.com/ajweb/help/file ,下载银联最新sdk
先看下支付流程:
流程图说明:
(1)用户在客户端中点击购买商品,客户端发起订单生成请求到商户后台;
(2)商户后台收到订单生成请求后,按照《手机控件支付产品接口规范》组织并推送订单信息至银联后台;
(3)银联后台接收订单信息并检查通过后,生成对应交易流水号(即TN),并回复交易流水号至商户后台(应答要素:交易流水号等);
(4)商户后台接收到交易流水号,将交易流水号返回给客户端;
(5)客户端通过交易流水号(TN)调用支付控件;
(6)用户在支付控件中输入相关支付信息后,由支付控件向银联后台发起支付请求;
(7)支付成功后,银联后台将支付结果通知给商户后台;
(8)银联将支付结果通知支付控件;
(9)支付控件显示支付结果并将支付结果返回给客户端;
可以看到银联的Demo是es的,那在as里面如何导包呢?
es中:
as中:
接下来,在工程的AndroidManifest.xml文件中注册支付插件使用的Activity和权限,接口文档中有,就不贴出来了。
post请求到流水账号,再调用支付控件,并处理支付结果
// “00” – 银联正式环境
// “01” – 银联测试环境,该环境中不发生真实交易
String serverMode = "01";
UPPayAssistEx.startPay (activity, null, null, tn, serverMode);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (data == null) {
return;
}
String str = data.getExtras().getString("pay_result");
if (str.equalsIgnoreCase(R_SUCCESS)) {
// 支付成功后,extra中如果存在result_data,取出校验
// result_data结构见c)result_data参数说明
if (data.hasExtra("result_data")) {
String sign = data.getExtras().getString("result_data");
// 验签证书同后台验签证书
// 此处的verify,商户需送去商户后台做验签
if (verify(sign)) {
//验证通过后,显示支付结果
showResultDialog(" 支付成功! ");
} else {
// 验证不通过后的处理
// 建议通过商户后台查询支付结果
}
} else {
// 未收到签名信息
// 建议通过商户后台查询支付结果
}
} else if (str.equalsIgnoreCase(R_FAIL)) {
showResultDialog(" 支付失败! ");
} else if (str.equalsIgnoreCase(R_CANCEL)) {
showResultDialog(" 你已取消了本次订单的支付! ");
}
}
银联支付还提供测试账号,相比支付宝,微信支付简单些。