转载地址:http://www.devstore.cn/evaluation/testInfo/98-133.html
评测环境
3G/wifi网络下:
测试对象 | 银联手机手机支付 |
测试版本 | 银联手机支付2.1.3 |
测试系统 | Android 4.1.2 |
测试手机 | HTC ONE |
手机网络 | 3G/wifi |
测试方法 | 客户端集成银联手机支付资源并调用API进行支付测试 |
测试时长 | 1小时 |
测试难度 | 简单 |
测试环境 | Window7+Eclipse+HTC ONE |
测试效果 | 稳定,流畅,支付安全 |
基本参数:
集成难度 | SDK集成简单,但版本升级时需注意资源替换位置 |
操作难度 | 简单 |
支持系统 | Android、IOS |
稳定性 | 好 |
安全性 | 好 |
集成过程
客户端集成
一 客户端集成
银联手机支付SDK以分为无卡交易版本和有卡交易版本。有卡交易支持银联的迷你IC卡,智能SD卡及VIPOS等产品,普通手机客户端支付集成无卡交易版本即可。
1.获取SDK资源及文档
银联目前还未开放SDK下载,需和银联商务索取。
集成无卡交易支付需导入资源主要包括以下三部分:
1)UPPayAssistEx.jar,UPPayPluginEx.jar;
2)data.bin;
3)armeabi/libentryex.so
armeabi-v7a/libentryex.so
mips/libentryex.so
x86/libentryex
2.导入资源
1)将sdknocard/UPPayAssistEx.jar和sdknocard/jar/UPPayPluginEx.jar复制到工程目录libs下,将sdknocard/jar/ 下的armeabi,armeabi-v7a,mips和x86四个文件夹及文件夹下的.so文件复制到工程目录的libs下。集成完效果图如下:
2)data.bin为图片资源文件,必须放在工程的res/drawable目录下。
集成效果图:
3.修改Manifest
1)在工程的AndroidManifest.xml增加Activity声明:
1 | < activity |
2 | android:name = "com.unionpay.uppay.PayActivityEx" |
3 | android:configChanges = "orientation|keyboardHidden|screenSize" |
4 | android:excludeFromRecents = "true" |
5 | android:screenOrientation = "portrait" |
6 | android:windowSoftInputMode = "adjustResize" > |
7 | </ activity > |
8 | < activity android:name = "com.unionpay.uppay.PayActivity" > |
2)添加权限声明:
01 | < uses-permission |
02 | android:name = "android.permission.INTERNET" /> |
03 | < uses-permission |
04 | android:name = "android.permission.ACCESS_NETWORK_STATE" /> |
05 | < uses-permission |
06 | android:name = "android.permission.CHANGE_NETWORK_STATE" /> |
07 | < uses-permission |
08 | android:name = "android.permission.WRITE_EXTERNAL_STORAGE" /> |
09 | < uses-permission |
10 | android:name = "android.permission.READ_PHONE_STATE" /> |
11 | < uses-permission |
12 | android:name = "android.permission.ACCESS_WIFI_STATE" /> |
至此,银联SDK资源导入完毕。
二 订单支付流程
在调用客户端支付接口之前,商户服务器需先向银联服务器获取交易流水号(TN),该值将作为调用客户端API参数之一。商户消费流程图:
获取TN号后就可调用SDK的API发起支付操作。
1.服务器获取交易流水号
商户服务器根据商户属性及订单属性向银联换取交易流水号(TN)
01 | Map<String, String> req = new HashMap<String, String>(); |
02 | req.put( "version" , "2.1.3" ); // 版本号 |
03 | req.put( "charset" , "UTF-8" ); // 字符编码 |
04 | req.put( "transType" , "01" ); // 交易类型 |
05 | req.put( "merId" , "*******" ); // 商户代码 |
06 | req.put( "backEndUrl" , "**********" ); // 通知URL |
07 | req.put( "frontEndUrl" , "*********" ); // 前台通知URL(可选) |
08 | req.put( "orderDescription" , "订单描述" ); // 订单描述(可选) |
09 | req.put( "orderTime" , new SimpleDateFormat( "yyyyMMddHHmmss" ).format( new Date())); // 交易开始日期时间yyyyMMddHHmmss |
10 | req.put( "orderTimeout" , "" ); // 订单超时时间yyyyMMddHHmmss(可选) |
11 | req.put( "orderNumber" , "*******" ); // 订单号(商户根据自己需要生成订单号) |
12 | req.put( "orderAmount" , "**********" ); // 订单金额 |
13 | req.put( "orderCurrency" , "156" ); // 交易币种(可选) |
14 | req.put( "reqReserved" , "" ); // 请求方保留域(可选,用于透传商户信息) |
15 | req.put( "merReserved" , "" ); // 商户保留域(可选) |
16 | RequestParams params = new RequestParams(req); |
17 | //网络请求 |
18 | //... |
19 | //网络请求 |
20 | String tn = resp.get( "tn" ); |
2.客户端调用SDK支付API
1 | UPPayAssistEx.startPayByJAR( this ①, PayActivity. class ②, null ③, null ④, tn⑤, mode⑥); |
参数说明:
序号 | 说明 |
1 | 调用支付的Activity上下文 |
2 | 支付插件代表类,填入“PayActivity.class”即可 |
3 | 填null即可 |
4 | 填null即可 |
5 | 传入通过银联获取的交易流水号(TN) |
6 | 连接环境,传入则连接银联生产环境,传入则连接银联测试环境 |
3.支付结果获取和处理
1)客户端同步获取
客户端需在onActivityResult中监听银联支付结果。银联将支付结果包装到了Intent data中,且requestCode=10。
客户端支付结果回调信息:
1 | requestCode= 10 ,Bundle[{pay_result=success}] |
客户端支付结果代码示例:
01 | @Override |
02 | protected void onActivityResult( int requestCode, int resultCode, Intent data) { |
03 | switch (requestCode) { |
04 | case 10 : |
05 | Bundle b = data.getExtras(); |
06 | String str = b.getString( "pay_result" ); |
07 | if (str.equalsIgnoreCase( "success" )) { |
08 | Log.d( "UPTest" , "onActivityResult,银联支付成功" ); |
09 | } else if (str.equalsIgnoreCase( "fail" )) { |
10 | Log.d( "UPTest" , "onActivityResult,银联支付失败" ); |
11 | } else if (str.equalsIgnoreCase( "cancel" )) { |
12 | Log.d( "UPTest" , "onActivityResult,银联支付取消" ); |
13 | } |
14 | break ; |
15 | |
16 | default : |
17 | break ; |
18 | } |
19 | } |
2)商户服务器异步获取
成功进行支付操作后,银联会通过post形式将商品支付信息通知到商户服务器。银联为支付通知设置了10秒超时时间,所以商户接到银联支付结果并确认无误后应立即答复银联返回码为200的通知,否则银联会认为通知失败。此外,超过10秒未答复银联也会认为是通知失败。银联会多次发送通知失败的支付结果,次数最多为5次。此外,由于网络等客观环境原因,商户可能会多次通知同一次支付结果,这时需商户在自己服务器进行逻辑判断并处理。
主要功能
常用银行卡支付: