zoukankan      html  css  js  c++  java
  • 银联支付集成之 ---- 安卓

    转载至:http://blog.csdn.net/wcsandlili/article/details/53467855

    本人也是新手,写这篇博客只是希望以后的哥们少走点弯路,网上的教程很多,但是我认为还是不够明确,可能没做过的要看半天才能看懂,废话不多说,直接讲讲我集成的过程吧!

    首先,进入银联开放平台,说实话,这个链接找的有点坑爹,不太好搜索,直接贴上https://open.unionpay.com/ajweb/help/file/techFile?productId=3

    进入网站,将官方的demo下载下来,说实话,我感觉看官方的demo有点冗余,直接照着我的步骤来吧:

    创建自己的工程,在project目录下操作,在main文件夹里面创建assert资产文件,将data.bin文件放进去,在创建jniLibs文件夹,将C语言的so库拷贝进去,这些文件在官方的压缩包里面都能找到,耐心找一找,实际效果如下图

    别忘了将UPPayAssistEx.jar拷贝到lib库里面去

    权限别忘了添加

    <!--银联权限-->  
       <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" />  
      
       <!--<!— 如果选择智能卡方式(即sdkPro)集成,需要额外定义以下权限 –>-->  
       <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" />  
     

    银联activity也别忘了注册

    <!--银联支付app-->  
          <activity android:name="com.unionpay.uppay.PayActivity"  
      
          android:label="@string/app_name"  
      
          android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden"  
      
          android:excludeFromRecents="true"  
      
          android:windowSoftInputMode="adjustResize"/>  



    照着上面的写就行,官方的demo里面也有,可以直接copy就行了

    "http://101.231.204.84:8091/sim/getacptn"

    利用上面的网址生成一个tn流水号,我们app'端支付主要就靠这个流水号(注意,在实际的项目中,这个tn流水账号是后台返给我们的)

    下面是支付的主要代码,调用支付的主要代码就是点击事件里面的startPayByJar
    /*****************************************************************  
         * mMode参数解释: "00" - 启动银联正式环境 "01" - 连接银联测试环境  
         *****************************************************************/  
        private final String mMode = "01";  
        private Button bt;  
        private static final String TN_URL_01 = "http://101.231.204.84:8091/sim/getacptn";  
      
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
            initView();  
        }  
      
        private void initView() {  
            bt = (Button) findViewById(R.id.bt);  
            bt.setOnClickListener(this);  
        }  
      
      
        //    回调  
        @Override  
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
            /*************************************************  
             * 步骤3:处理银联手机支付控件返回的支付结果  
             ************************************************/  
            if (data == null) {  
                return;  
            }  
            String msg = "";  
            /*  
             * 支付控件返回字符串:success、fail、cancel 分别代表支付成功,支付失败,支付取消  
             */  
            String str = data.getExtras().getString("pay_result");  
            if (str.equalsIgnoreCase("success")) {  
                // 支付成功后,extra中如果存在result_data,取出校验  
                // result_data结构见c)result_data参数说明  
                if (data.hasExtra("result_data")) {  
                    String result = data.getExtras().getString("result_data");  
                    //                try {  
                    //                    JSONObject resultJson = new JSONObject(result);  
                    //                    String sign = resultJson.getString("sign");  
                    //                    String dataOrg = resultJson.getString("data");  
                    //                    // 验签证书同后台验签证书  
                    //                    // 此处的verify,商户需送去商户后台做验签  
                    //                    boolean ret = verify(dataOrg, sign, mMode);  
                    //                    if (ret) {  
                    //                        // 验证通过后,显示支付结果  
                    //                        msg = "支付成功!";  
                    //                    } else {  
                    //                        // 验证不通过后的处理  
                    //                        // 建议通过商户后台查询支付结果  
                    //               msg = "支付失败!";  
                    //                    }  
                    //                } catch (JSONException e) {  
                    //                }  
                    //            } else {  
                    // 未收到签名信息  
                    // 建议通过商户后台查询支付结果  
                    //               msg = "支付成功!";  
                    //            }  
                    msg = "支付成功!";  
                } else if (str.equalsIgnoreCase("fail")) {  
                    msg = "支付失败!";  
                } else if (str.equalsIgnoreCase("cancel")) {  
                    msg = "用户取消了支付";  
                }  
      
                Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();  
                System.out.println("支付结果通知"+msg);  
      
                AlertDialog.Builder builder = new AlertDialog.Builder(this);  
                builder.setTitle("支付结果通知");  
                builder.setMessage(msg);  
                builder.setInverseBackgroundForced(true);  
                // builder.setCustomTitle();  
                builder.setNegativeButton("确定", new DialogInterface.OnClickListener() {  
                    @Override  
                    public void onClick(DialogInterface dialog, int which) {  
                        dialog.dismiss();  
                    }  
                });  
                builder.create().show();  
            }  
        }  
      
        @Override  
        public void onClick(View v) {  
            /*************************************************  
             * 步骤2:通过银联工具类启动支付插件  
             ************************************************/  
            UPPayAssistEx.startPayByJAR(this, PayActivity.class, null, null,  
                    "201612051739317670088", mMode);  
        } 

    上面的方法是支付的回调方法,你可以在回调里面编写自己的逻辑

    这只是一个测试的demo,如果在自己的实际项目中,要将上面的mode的01改成00;tn账号请求后台接口返回给我们,利用tn账号去实现支付的功能

    小弟菜鸟一枚,大神看了可能感觉太冗余,写这篇博客一是为了给自己做个笔记的作用,二是为了帮助和我一样在开发这条道路上奋力拼搏的兄弟们!如果中间有什么写的不对的地方欢迎指正

  • 相关阅读:
    git 的常用命令(未完待补充)
    Mysql占用内存过高参数优化
    mysql安全基线设置
    redis安全基线设置
    centos7安全基线设置
    检查shell脚本
    redis安装和配置
    TIME_WAIT状态全是3306解决办法
    PHP message: PHP Fatal error: Allowed memory size of 134217728 bytes exhausted 错误
    tcp的三次握手和四次挥手(二)
  • 原文地址:https://www.cnblogs.com/henusyj-1314/p/6513804.html
Copyright © 2011-2022 走看看