其实支付并没有想象中的难,只是在签约上一大堆麻烦事,需要各种证件,需要审核...

首先申明该文章写于2014年12月初,大家可以参考.

先说说步骤:


一、签约


1. 银联商户入网申请,商家服务 --- 申请成商户 --- 在线产品

  * 为了给您提供更好的服务,请耐心填写以下信息,提交申请后,我们的工作人员会及时与您取得联系。

 认真填写、然后等电话吧,(1-2 个工作日)

2.客服会让你填写一堆文件,认证信息,然后快递到他们那里。

3.审核通过,技术接入。

4.先调试测试环境

5.上传商户测试环境报告(审核,发放正式环境参数)。



二、支付流程

银联支付 sdk Java 银联支付客服电话_银联支付 sdk Java

相信这张流程图介绍的很清楚了..

1.Android客户端,给后台发送商品信息参数

2.然后台去推送订单,后台拿到交易流水号(tn)

3.Android客户端拿到tn后,才能启动银联

4.银联会根据tn查询订单信息,也就是我们后台推送的信息,给予显示

5.用户支付-操作

6.操作完毕,分别回调客户端、异步返回后台。


三、银联SDK接入

要把银联接入客户端非常简单,前提你要签约成功。

这里银联对Android有俩种方式接入


① Apk接入方式 :调用startPay方法,调起手机中单独安装的控件

② 静态库集成 :调用startPayByJar方法,调起内置在商户app里的控件

官方是推荐Apk接入,自己更新,方便接入,只需要一个jar包,相比静态酷一大堆so文件、太过麻烦,不易更新。

启动银联时候,监测不存在 需要提示安装,把银联UPPayPluginEx.apk (银联手机支付服务)放到assets 目录下,免流量下载,保证apk最新就ok!


四、简单Dome案例

---看代码不说话:

public class MainActivity extends Activity {


	final String LOG_TAG = "MainActivity";

	//模拟tn 流水号
	private String tn ="201412111131390051642";

	/**
	 *  mMode参数解释:
	 *  "00" - 启动银联正式环境 
	 *  "01" - 连接银联测试环境
	 */
	private final String mMode = "01";

	public static final int PLUGIN_VALID = 0;
	public static final int PLUGIN_NOT_INSTALLED = -1;
	public static final int PLUGIN_NEED_UPGRADE = 2;

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


	public void onButton(View view){
		doStartUnionPayPlugin();
	}


	private void doStartUnionPayPlugin() {
		// 用于启动前监测,如(银联支付服务apk),如果 tn 和 环境匹配会直接启动银联插件
		int ret = UPPayAssistEx.startPay(this, null, null, tn, mMode);
		Log.i(LOG_TAG, "状态:"+ (ret == UPPayAssistEx.PLUGIN_VALID));

		//监测不存在 需要提示安装,把银联UPPayPluginEx.apk 放到assets 目录下,免流量下载,保证apk最新就ok
		if (ret == PLUGIN_NEED_UPGRADE || ret == PLUGIN_NOT_INSTALLED) {
			AlertDialog.Builder builder = new AlertDialog.Builder(this);
			builder.setTitle("提示");
			builder.setMessage("完成购买需要安装银联支付控件,是否安装?");

			builder.setNegativeButton("确定",
					new DialogInterface.OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
					boolean isUPPay = UPPayAssistEx.installUPPayPlugin(MainActivity.this);
					Log.e(LOG_TAG, "是否安装成功: "+isUPPay);
				}
			});

			builder.setPositiveButton("取消",
					new DialogInterface.OnClickListener() {

				@Override
				public void onClick(DialogInterface dialog, int which) {
					dialog.dismiss();
				}
			});
			builder.create().show();
		}
	}



	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		if (data == null) {
			return;
		}

		String msg = "";
		/*
		 * 支付控件返回字符串:success、fail、cancel 分别代表支付成功,支付失败,支付取消
		 */
		String str = data.getExtras().getString("pay_result");
		System.out.println("返回:"+str);
		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();
	}

}