码迷,mamicode.com
首页 > 移动开发 > 详细

Android开发:app工程集成银联支付功能(客户端)

时间:2016-05-07 07:06:37      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:

Android开发:app工程集成银联支付功能(客户端)

email:chentravelling@163.com


上一篇博文完成了服务器端的集成,可参考: Android开发:app工程集成银联支付功能(服务器端)   。这一篇博文完成客户端的集成。

一.功能描述

银联支付流程如下所示:
技术分享


上一篇尝试了tn的获取,本篇将跑通整个流程。


二.实现部分

先说一下我的IDE是as(Android Studio)+win7 64位


2.1配置,依旧是配置

按照官方说明文档,就可以完成,我在这里贴上结构图,因为as的特殊性。

  • jar包、.so文件和.bin文件

    因为我的工程资源有点多了,一张图截不下,所以我只给出文件夹的结构图。

  •  
    技术分享

    1. 拷贝upmp_android/sdkPro/jar/data.bin到工程的assets文件夹中;
    2. 拷贝upmp_android/sdkPro/jar/xxx/libentryexpro.so和upmp_android/sdkPro/jar/xxx/libuptsmaddon.so到工程的armeabi-v7a文件夹中(官方说v8 v7 abi都行)
    3. 拷贝upmp_android/sdkPro/UPPayAssistEx.jar到工程的libs/目录下;
    4. 拷贝upmp_android/sdkPro/jar/UPPayPluginExPro.jar到工程的libs/目录下;
  • AndroidManifest.xml添加配置

<!-- 银联支付相关配置 -->
        <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" />


2.2调用支付控件

2.2.1调用支付接口

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);

2.2.2接收支付结果

支付完成后,获取支付控件支付结果,并添加相应处理逻辑,只需实现调用Activity中的onActivityResult()方法即可,支付成功时会返回商户客户端支付结果的签名信息。

  • 官方Demo是这样的:
    其中有一句:此处的verify,商户需送去商户后台做验签 ,请注意并不是在这里向后台请求验签,因为后台也会接收到银联后台的支付结果通知,验签是在商户后台做,请参考上一篇博文的补充部分Android开发:app工程集成银联支付功能(服务器端)

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(" 你已取消了本次订单的支付! ");


由此就基本完成了客户端的集成,当然还有一些:支付失败的处理、取消订单的处理,以及退货、退款等等处理,等有时间再完善了。

本想截图的!!手机暂时出现了无法截图的毛病...

Android开发:app工程集成银联支付功能(客户端)

标签:

原文地址:http://blog.csdn.net/chentravelling/article/details/51333289

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!