Android中的支付(银联篇)

虽然银联在手机支付方面用处不多 ,但因为他集成简单,费率较低 ,我公司在app开发中调用发了银联支付
首先 第一步 导入包
这里写图片描述
关于上面的几个so文件 我在做测试的时候知保留了armeabi文件夹下的so文件,如果全加上的话只有华为的手机能够跑的起来,自己百度了一下,原来那几个文件夹是针对不同的手机处理器的,最简单的办法,就是只添加armeabi下的SO文件,,不管你信不信 反正我信了
第二部 清单文件中必要的权限,以及银联支付界面Activity
前几天有人问我 在jar包中封装的Activity怎么办 我当时还不知道,,直到用到了银联 银联的jar包中也封装了一个用于支付的Activity 只需要在清单文件中申明他的路径就行了,比如

<activity android:name="com.unionpay.uppay.PayActivity">
        </activity>

还有 在jar包中还应提供方法,能够打开这个Activity

正常的银联支付流程应该是这样
1向服务器后台发请求,传递参数—>2服务器后台向银联发送请求,获取交易所需的TN号—>3服务器给前端返回结果(包括TN号,交易流水号等等)—>4前端拿着TN号向银联发送支付请求—>5银联返回交易结果(交易成功还是失败)

包括支付宝,微信支付等,,所有的MD5,base64加密,订单信息拼接等都是在服务器后台完成的,如果在前台的话安全性无法得到保证
//代码

package com.longyue.plugindemo2;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import com.unionpay.UPPayAssistEx;
import com.unionpay.uppay.PayActivity;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.view.View;
import android.widget.Button;
public class BaseActivity extends Activity implements Callback,
        Runnable {
    private Handler mHandler = null;
    private ProgressDialog mLoadingDialog = null;
    /*****************************************************************
     * mMode参数解释: "00" - 启动银联正式环境 "01" - 连接银联测试环境
     *****************************************************************/
     //在正式开发环境中要将参数置为01
    private final String mMode = "01";
    private static final String TN_URL_01 = "http://101.231.204.84:8091/sim/getacptn";

    private final View.OnClickListener mClickListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            mLoadingDialog = ProgressDialog.show(BaseActivity.this,//上下文
                    "提示信息", // title
                    "正在努力的获取tn中,请稍候...", // message
                    true); // 进度是否是不确定的,这只和创建进度条有关

            /*************************************************
             * 步骤1:从网络开始,获取交易流水号即TN
             ************************************************/
            new Thread(BaseActivity.this).start();//启动线程向银联和后台发送请求
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mHandler = new Handler(BaseActivity.this);
        Button btn0 = (Button) findViewById(R.id.btn0);
        btn0.setTag(0);
        btn0.setOnClickListener(mClickListener);
    }
    @Override
    public boolean handleMessage(Message msg) {
        if (mLoadingDialog.isShowing()) {
            mLoadingDialog.dismiss();
        }
        String tn = "";
        if (msg.obj == null || ((String) msg.obj).length() == 0) {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("错误提示");
            builder.setMessage("网络连接失败,请重试!");
            builder.setNegativeButton("确定",
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            dialog.dismiss();
                        }
                    });
            builder.create().show();
        } else {
            tn = (String) msg.obj;
            /*************************************************
             * 步骤2:通过银联工具类启动支付插件
             ************************************************/
            doStartUnionPayPlugin(this, tn, mMode);
        }

        return false;

    }
//处理银联支付结果回调
    @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")) {
            msg = "支付成功!";
        } else if (str.equalsIgnoreCase("fail")) {
            msg = "支付失败!";
        } else if (str.equalsIgnoreCase("cancel")) {
            msg = "用户取消了支付";
        }

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("支付结果通知");
        builder.setMessage(msg);
        builder.setInverseBackgroundForced(true);
        builder.setNegativeButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });
        builder.create().show();
    }
//在正式的开发环境中,用自己的网络请求框架访问服务器,获得TN号
    @Override
    public void run() {
        //向服务器发送请求,获取交易流水号即TN
        String tn = null;
        InputStream is;
        try {

            String url = TN_URL_01;

            URL myURL = new URL(url);
            URLConnection ucon = myURL.openConnection();
            ucon.setConnectTimeout(120000);
            is = ucon.getInputStream();
            int i = -1;
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            while ((i = is.read()) != -1) {
                baos.write(i);
            }
            tn = baos.toString();
            is.close();
            baos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        //拿到交易流水号,向handler发送消息
        Message msg = mHandler.obtainMessage();
        msg.obj = tn;
        mHandler.sendMessage(msg);
    }
    public void doStartUnionPayPlugin(Activity activity, String tn, String mode) {
        //银联工具类,用于启动银联,向服务器发送请求
        UPPayAssistEx.startPayByJAR(activity, PayActivity.class, null, null,tn, mode);
    }
}

Demo下载

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值