银联支付是继支付宝于微信支付之后的第三大支付方式,如果你已经看过前两篇博文,学会支付宝和微信的支付集成方法,接下来,银联支付就很简单了。

支付宝支付流程博文


微信支付流程博文



1.银联支付流程图

android 集成支付宝步骤 android 银行卡支付集成_android 集成支付宝步骤



2.     到银联开发者平台下载开发包

3.     安装“UPPayDemo.apk”,安装后运行效果如下:


android 集成支付宝步骤 android 银行卡支付集成_银联支付集成流程大全_02


4.     打开“中国银联手机支付控件接入指南Android.doc”,在这个文档中有测试账号(账号:6226090000000048,验证码:123456),使用测试账号进行测试,结果如下:

android 集成支付宝步骤 android 银行卡支付集成_银联支付bug_03


“UPPayDemo.apk”对应的源码也在开发包中,这个Demo可以完全支付了说明现在的Demo就已经完全配置好了银联的开发环境了,我们只需要参照这个Demo去配置我们自己的项目即可。
注:银联开发环境的编译不能在太老的环境下编译,否则会报类找不到异常

5.     创建一个Android项目,界面如下:


android 集成支付宝步骤 android 银行卡支付集成_Android支付bug_04


activity_main.xml如下


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="银联支付"
        android:onClick="unionPay" />

</RelativeLayout>


MainActivity.java 如下:


public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
	
	public void unionPay(View v) {
		
	}

}
6.     配置银联开发环境:
a)     按照前面运行的apk的提示把相应的资源复制到相应的目录下
b)     导入银联Demo,把银联Demo中的清单文件中的权限复制到我们的项目中
c)     把银联Demo中的清单文件中声明的支付相关的Activity声明复制到我们的项目中
7.     把购物车中的内容提交给服务器并获取支付序列号,代码如下:



public void unionPay(View v) {
    // 把购物车中的内容提交给服务器获取支付序列号
    String TN_URL_01 = "http://101.231.204.84:8091/sim/getacptn";
    Response.Listener<String> listener = new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            unionPay(response);
        }
    };
    Response.ErrorListener errorListener = new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, "onErrorResponse: 请求失败", error);
        }
    };
    StringRequest request = new StringRequest(TN_URL_01, listener, errorListener);
    Volley.newRequestQueue(this).add(request);
}

private void unionPay(String tn) {
    Log.i(TAG, "tn: " + tn);
}


8.      把支付序列号提交给银联进行支付(可以参考银联官方 Demo 的代码),如下:


private void unionPay(String tn) {
    // mMode参数解释: "00" - 启动银联正式环境 "01" - 连接银联测试环境
    UPPayAssistEx.startPay(this, null, null, tn, "01");
}

@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,取出校验
        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.setCustomTitle();
    builder.setNegativeButton("确定", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });
    builder.create().show();
}