“深入浅出,人人都是程序员”
本文章参考:http://blog.youkuaiyun.com/dashentao1989/article/details/48680377
银联开发者地址:https://open.unionpay.com/ajweb/help/file
1.工程环境配置
(1) 引入jar包
分别新建两个文件夹 assets 和 jniLibs (注意文件夹级别分布)
在build.gradle文件注意要引用到libs 和jar 包
2.在AndroidMainfest.xml中设置手机权限
<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" />
<uses-permission android:name="android.permission.NFC" />
这是跳转到银联支付页面(官方写法,估计也没什么变动)
<activity
android:name="com.unionpay.uppay.PayActivity"
android:configChanges="orientation|keyboardHidden"
android:excludeFromRecents="true"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:windowSoftInputMode="adjustResize" />
3.代码实现
在主activity类的代码
public class YinLianActivity extends AppCompatActivity {
private Button yinlianPayBtn;
private RelativeLayout container;
private static final String TN_URL_01 = "http://101.231.204.84:8091/sim/getacptn";
private static final String R_SUCCESS = "success";
private static final String R_FAIL = "fail";
private static final String R_CANCEL = "cancel";
private Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
// “00” – 银联正式环境
// “01” – 银联测试环境,该环境中不发生真实交易
String tn = (String) msg.obj;
if (!TextUtils.isEmpty(tn)) {
// 测试环境
String serverMode = "01";
UPPayAssistEx.startPayByJAR(YinLianActivity.this,
PayActivity.class, null, null, tn, serverMode);
}
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_yinlian);
yinlianPayBtn = (Button) findViewById(R.id.button1);
container = (RelativeLayout) findViewById(R.id.container1);
yinlianPayBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new MyThread().start();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data == null) {
return;
}
String str = data.getExtras().getString("pay_result");
if (str.equalsIgnoreCase(R_SUCCESS)) {
Snackbar.make(container, R.string.pay_success, Snackbar.LENGTH_LONG).show();
} else if (str.equalsIgnoreCase(R_FAIL)) {
Snackbar.make(container, R.string.pay_fail, Snackbar.LENGTH_LONG).show();
} else if (str.equalsIgnoreCase(R_CANCEL)) {
Snackbar.make(container, R.string.pay_cancel, Snackbar.LENGTH_LONG).show();
}
}
/**
* 获取tn线程
*
* @author JamesTao
*/
private class MyThread extends Thread {
public MyThread() {
}
@Override
public void run() {
super.run();
String tn = null;
InputStream is;
try {
String url = TN_URL_01;
URL myURL = new URL(url);
URLConnection ucon = myURL.openConnection();
ucon.setConnectTimeout(120 * 1000);
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();
}
Message msg = mHandler.obtainMessage();
msg.obj = tn;
mHandler.sendMessage(msg);
}
}
}
4.布局文件activity_yinlian.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:id="@+id/container1"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="打开银联支付页面" />
</RelativeLayout>
应用截图: