亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述银联支付集成之 ---- 安卓相关的知识,希望能为你提供帮助。
转载至:http://blog.csdn.net/wcsandlili/article/details/53467855
本人也是新手,写这篇博客只是希望以后的哥们少走点弯路,网上的教程很多,但是我认为还是不够明确,可能没做过的要看半天才能看懂,废话不多说,直接讲讲我集成的过程吧!
首先,进入银联开放平台,说实话,这个链接找的有点坑爹,不太好搜索,直接贴上https://open.unionpay.com/ajweb/help/file/techFile?productId=3
文章图片
进入网站,将官方的demo下载下来,说实话,我感觉看官方的demo有点冗余,直接照着我的步骤来吧:
创建自己的工程,在project目录下操作,在main文件夹里面创建assert资产文件,将data.bin文件放进去,在创建jniLibs文件夹,将C语言的so库拷贝进去,这些文件在官方的压缩包里面都能找到,耐心找一找,实际效果如下图
文章图片
别忘了将UPPayAssistEx.jar拷贝到lib库里面去
权限别忘了添加
【银联支付集成之 ---- 安卓】
文章图片
< !--银联权限--> < 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" /> < !--< !— 如果选择智能卡方式(即sdkPro)集成,需要额外定义以下权限 –> --> < uses-permission android:name="android.permission.RECORD_AUDIO" /> < uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> < uses-permission android:name="org.simalliance.openmobileapi.SMARTCARD" />
银联activity也别忘了注册
文章图片
< !--银联支付app--> < activity android:name="com.unionpay.uppay.PayActivity"android:label="@string/app_name"android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden"android:excludeFromRecents="true"android:windowSoftInputMode="adjustResize"/>
照着上面的写就行,官方的demo里面也有,可以直接copy就行了
"http://101.231.204.84:8091/sim/getacptn"
利用上面的网址生成一个tn流水号,我们app‘端支付主要就靠这个流水号(注意,在实际的项目中,这个tn流水账号是后台返给我们的)
下面是支付的主要代码,调用支付的主要代码就是点击事件里面的startPayByJar
/***************************************************************** * mMode参数解释: "00" - 启动银联正式环境 "01" - 连接银联测试环境 *****************************************************************/ private final String mMode = "01"; private Button bt; private static final String TN_URL_01 = "http://101.231.204.84:8091/sim/getacptn"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); }private void initView() { bt = (Button) findViewById(R.id.bt); bt.setOnClickListener(this); }//回调 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { /************************************************* * 步骤3:处理银联手机支付控件返回的支付结果 ************************************************/ if (data =https://www.songbingjia.com/android/= null) { return; } String msg =""; /* * 支付控件返回字符串:success、fail、cancel 分别代表支付成功,支付失败,支付取消 */ String str = data.getExtras().getString("pay_result"); if (str.equalsIgnoreCase("success")) { // 支付成功后,extra中如果存在result_data,取出校验 // result_data结构见c)result_data参数说明 if (data.hasExtra("result_data")) { String result = data.getExtras().getString("result_data"); //try { //JSONObject resultJson = new JSONObject(result); //String sign = resultJson.getString("sign"); //String dataOrg = resultJson.getString("data"); //// 验签证书同后台验签证书 //// 此处的verify,商户需送去商户后台做验签 //boolean ret = verify(dataOrg, sign, mMode); //if (ret) { //// 验证通过后,显示支付结果 //msg = "支付成功!"; //} else { //// 验证不通过后的处理 //// 建议通过商户后台查询支付结果 //msg = "支付失败!"; //} //} catch (JSONException e) { //} //} else { // 未收到签名信息 // 建议通过商户后台查询支付结果 //msg = "支付成功!"; //} msg = "支付成功!"; } else if (str.equalsIgnoreCase("fail")) { msg = "支付失败!"; } else if (str.equalsIgnoreCase("cancel")) { msg = "用户取消了支付"; }Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); System.out.println("支付结果通知"+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(); } }@Override public void onClick(View v) { /************************************************* * 步骤2:通过银联工具类启动支付插件 ************************************************/ UPPayAssistEx.startPayByJAR(this, PayActivity.class, null, null, "201612051739317670088", mMode); }
上面的方法是支付的回调方法,你可以在回调里面编写自己的逻辑
这只是一个测试的demo,如果在自己的实际项目中,要将上面的mode的01改成00;tn账号请求后台接口返回给我们,利用tn账号去实现支付的功能
小弟菜鸟一枚,大神看了可能感觉太冗余,写这篇博客一是为了给自己做个笔记的作用,二是为了帮助和我一样在开发这条道路上奋力拼搏的兄弟们!如果中间有什么写的不对的地方欢迎指正
推荐阅读
- 深入了解Android蓝牙Bluetooth——《进阶篇》
- Android 蓝牙扫描代码
- Android Matrix图像变换处理
- Android井字游戏游戏界面
- Android TransactionTooLargeException 解析,思考与监控方案
- Freeline - Android平台上的秒级编译方案
- 举例说明android源代码调试中加入的log方法
- Android各种获取代码调用栈的方法[补]
- Android开发(《Gradle Recipes for Android》阅读笔记(翻译)6.1——推荐配置)