银联支付是继支付宝于微信支付之后的第三大支付方式,如果你已经看过前两篇博文,学会支付宝和微信的支付集成方法,接下来,银联支付就很简单了。
支付宝支付流程博文
微信支付流程博文
1.银联支付流程图
2. 到银联开发者平台下载开发包
3. 安装“UPPayDemo.apk”,安装后运行效果如下:
4. 打开“中国银联手机支付控件接入指南Android.doc”,在这个文档中有测试账号(账号:6226090000000048,验证码:123456),使用测试账号进行测试,结果如下:
“UPPayDemo.apk”对应的源码也在开发包中,这个Demo可以完全支付了说明现在的Demo就已经完全配置好了银联的开发环境了,我们只需要参照这个Demo去配置我们自己的项目即可。
注:银联开发环境的编译不能在太老的环境下编译,否则会报类找不到异常
5. 创建一个Android项目,界面如下:
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();
}