Android app支付-银联支付

来源:互联网 发布:用聚类分析矩阵matlab 编辑:程序博客网 时间:2024/04/29 07:34

前段时间集成了银联、微信和支付宝,感觉银联和微信的集成过程都是比较容易的,只有支付宝在和后台进行加签的过程中容易出错,导致支付失败。自己总结了集成的过程,希望可以分享和记录下来。

一.银联的demo和jar包下载流程就不细讲了,可以到官网进行下载。

二.支付流程:

1.银联支付流程图:



三.支付流程文字讲解:

1.在客户端提交用户选择的产品信息,如:价格、产品名称等信息到我们的服务端。

2.我们的服务端会从银联服务端返回一个流水号(21位纯数字)给客户端。

3.客户端通过这个流水号(即是tn)调用起银联的支付界面。

4.然后我们在银联的支付控件填写银行卡等信息,支付控件会把这些信息发送到银联服务端。

5.最终银联服务端把支付结果返回我支付控件,支付控件会调用当前Activity的onActivityResult()方法。

四.开发步骤:(在AndroidStudio中开发)

一.导入jar包、.so文件、bin文件和在AndroidManifest配置一些信息。

1.添加资源文件

在我们中银联官网下载的文件中找到libentryexpro.so和ibuptsmaddon.so文件,并拷贝到

工程的libs/xxx/目录下,其中xxx为 armeabi-v7a、armeabi、arm64-v8a、x86x86_64中之一;拷贝UPPayAssistEx.jar和UPPayPluginExPro.jar到libs目录下;在工程中新建一个assets目录,把data.bin复制到该目录下。

2.在AndroidManifest文件下配置。

<application><!--工程其它配置此处省略…--><uses-library android:name="org.simalliance.openmobileapi" android:required="false"/><activityandroid:name="com.unionpay.uppay.PayActivity"android:label="@string/app_name"android:screenOrientation="portrait"        android:configChanges="orientation|keyboardHidden"android:excludeFromRecents="true"android:windowSoftInputMode="adjustResize"/> <activity    android:name="com.unionpay.UPPayWapActivity"    android:configChanges="orientation|keyboardHidden"    android:screenOrientation="portrait"    android:windowSoftInputMode="adjustResize"/></application> <textarea readonly="readonly" name="code" class="java"> 配置一些权限:<uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.CHANGE_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.NFC" /><uses-feature android:name="android.hardware.nfc.hce"/><uses-permissionandroid:name="android.permission.RECORD_AUDIO"/><uses-permissionandroid:name="android.permission.MODIFY_AUDIO_SETTINGS"/><uses-permissionandroid:name="org.simalliance.openmobileapi.SMARTCARD" /></textarea>
二.前期工作都做好了,是时候开始写代码了。

1.第一步是向后台发送请求,把金额和订单信息传给后台。
2.我使用的是retrofit和Rxjava网络请求,这是我请求后台成功后调用的方法。
// “00” – 银联正式环境
// “01” – 银联测试环境,该环境中不发生真实交易

@Override    public void getBankPayCodeSuccess(String model) {        int ret = UPPayAssistEx.startPay(PayMentActivity.this, null, null, model, "00");        if (ret == PLUGIN_NEED_UPGRADE || ret == PLUGIN_NOT_INSTALLED) {            // 需要重新安装控件            NormalAlertDialog dialog = new NormalAlertDialog.Builder(PayMentActivity.this)                    .setBoolTitle(true)                    .setContentText("完成购买需要安装银联支付控件,是否安装?")                    .setLeftText("取消")                    .setRightText("确认")                    .setHeight(0.23f)                    .setWidth(0.75f)                    .setOnclickListener(new DialogInterface.OnLeftAndRightClickListener<NormalAlertDialog>() {                        @Override                        public void clickLeftButton(NormalAlertDialog dialog, View view) {                            dialog.dismiss();                        }                        @Override                        public void clickRightButton(NormalAlertDialog dialog, View view) {                            UPPayAssistEx.installUPPayPlugin(PayMentActivity.this);                            dialog.dismiss();                        }                    }).setTouchOutside(true)                    .build();            dialog.show();        }    }
model就是我们的服务端返回的流水号,然后我们通过银联jar的
UPPayAssistEx.startPay(PayMentActivity.this, null, null, model, "00")方法去调起银联支付控件。

3.重写onActivityResult(intrequestCode,intresultCode, Intent data)方法,在该方法中判断支付的结果。

if( data == null ){return;}String str =  data.getExtras().getString("pay_result");if( str.equalsIgnoreCase(R_SUCCESS) ){        // 支付成功后,extra中如果存在result_data,取出校验// result_data结构见c)result_data参数说明        if(data.hasExtra("result_data")) {String sign =  data.getExtras().getString("result_data");  } else {// 未收到签名信息// 建议通过商户后台查询支付结果}}else if( str.equalsIgnoreCase(R_FAIL) ){showResultDialog(" 支付失败! ");}else if( str.equalsIgnoreCase(R_CANCEL) ){showResultDialog(" 你已取消了本次订单的支付! ");


到这一步,银联支付基本完成了,在官方的demo中,会有一个验签证书的过程,我们在开发时你不需要,直接删掉
好,不然会支付失败。


原创博客,转载请注明:
http://blog.csdn.net/lgl5785592

0 0