标签:
email:chentravelling@163.com
上一篇博文完成了服务器端的集成,可参考:
Android开发:app工程集成银联支付功能(服务器端) 。这一篇博文完成客户端的集成。
银联支付流程如下所示:
上一篇尝试了tn的获取,本篇将跑通整个流程。
先说一下我的IDE是as(Android Studio)+win7 64位
按照官方说明文档,就可以完成,我在这里贴上结构图,因为as的特殊性。
因为我的工程资源有点多了,一张图截不下,所以我只给出文件夹的结构图。
<!-- 银联支付相关配置 --> <uses-library android:name="org.simalliance.openmobileapi" android:required="false" /> <activity android:name="com.unionpay.uppay.PayActivity" android:configChanges="orientation|keyboardHidden" android:excludeFromRecents="true" android:label="@string/app_name" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize" /> <activity android:name="com.unionpay.UPPayWapActivity" android:configChanges="orientation|keyboardHidden" android:screenOrientation="portrait" android:windowSoftInputMode="adjustResize" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.NFC" /> <uses-feature android:name="android.hardware.nfc.hce" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="org.simalliance.openmobileapi.SMARTCARD" />
import com.unionpay.UPPayAssistEx; //在调用支付控件的代码按以下方式调用支付控件 //比如onclick或者handler等等... /*参数说明: activity —— 用于启动支付控件的活动对象 spId —— 保留使用,这里输入null sysProvider —— 保留使用,这里输入null orderInfo —— 订单信息为交易流水号,即TN,为商户后台从银联后台获取。 mode —— 银联后台环境标识,“00”将在银联正式环境发起交易,“01”将在银联测试环境发起交易 返回值: UPPayAssistEx.PLUGIN_VALID —— 该终端已经安装控件,并启动控件 UPPayAssistEx.PLUGIN_NOT_FOUND — 手机终端尚未安装支付控件,需要先安装支付控件 */ String serverMode = "01"; UPPayAssistEx.startPay (activity, null, null, tn, serverMode);
支付完成后,获取支付控件支付结果,并添加相应处理逻辑,只需实现调用Activity中的onActivityResult()方法即可,支付成功时会返回商户客户端支付结果的签名信息。
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(" 你已取消了本次订单的支付! ");
由此就基本完成了客户端的集成,当然还有一些:支付失败的处理、取消订单的处理,以及退货、退款等等处理,等有时间再完善了。
本想截图的!!手机暂时出现了无法截图的毛病...
标签:
原文地址:http://blog.csdn.net/chentravelling/article/details/51333289