Android银联控件支付开发流程

来源:互联网 发布:冯大辉 范凯 知乎 编辑:程序博客网 时间:2024/05/17 07:28

需要内容:

data.bin 、各型号的libentryexpro.so和libuptsmaddon.so

UPPayAssistEx.jar UPPayPluginExStd.jar(建议全部使用标准版)

编译版本建议19以上

开发步骤:

1、将所需bin文件,jar包,so文件拷入项目中,并AddLibrary

2、在清单文件中添加权限和银联支付插件权限

<uses-permissionandroid: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"/>

<uses-feature android:name="android.hardware.nfc.hce"/>

3、清单文件中注册银联支付activity(直接复制)

<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"/>

 

4、选择商品下单,将订单信息传给服务器,服务器返回交易流水号tn

5、调用支付控件开始支付:

serverMode 00表示正式环境,01表示测试环境

String serverMode ="01";
String tn="";//从服务器获取的流水号
UPPayAssistEx.startPayByJAR(MainActivity.this,  

PayActivity.class,"","",tn,serverMode);

 

6、Activity的onActivityResult中获取支付结果

收到控件返回结果后,建议无视结果中的内容和签名信息,直接到自己的后台查状态,如果后台此时未收到全渠道的后台通知,则主动发起查询接口到全渠道查状态。这样可既保证APP中展示的订单状态和后台记录一致,也可及时更新后台记录的订单状态。

如仍希望使用控件返回的信息,验签时建议送到后台去验签;如果需要在APP中验签,则需要自行实现验签公钥更新的机制,否则银联更新密钥后会验签失败。

示例代码如下:

@Override
protected void onActivityResult(intrequestCode, intresultCode,Intent data) {
    Log.e(TAG,"onActivityResult: ");
    if (data ==null) {
        Log.e(TAG,"onActivityResult: 是空");
        return;
    }

    String str = data.getExtras().getString("pay_result");
    if (str.equalsIgnoreCase("success")) {
        Log.e(TAG,"onActivityResult: 支付成功!");
    }else if (str.equalsIgnoreCase("fail")) {
        Log.e(TAG,"onActivityResult: 支付失败!");
    }else if (str.equalsIgnoreCase("cancel")) {
        Log.e(TAG,"onActivityResult: 支付取消!");
    }
}

 

result_data参数说明:

参数说明:

sign —— 签名后做Base64的数据

data —— 用于签名的原始数据

data中原始数据结构:

pay_result —— 支付结果successfailcancel

tn          —— 订单号

result_data示例如下:

{  "sign" : "Xo/pgkzSJSlRTX2e+CjW/k1IjIV1newqfb7p1sDIpK/yPQv9p1jQAdAdKwhBwtyjO3tkFC6I2aLcTaxLHlYQx6/xw9QE0eumkVqAhypk/VyoDWZXxWske+EcduwEkBTxyIgA0ZsbKlpS1JxsciOc6bT+f36jTLa05ZAKZTVErg9sAG3wMjae1TyKd2511Rvvi+tuihYgOmwuMnKzrqksEyqc69wloqi34qx0YqFolMeqQ1UfoglUhZy6s2s4ChKcxHjAFjp/rU/7iHudjAIGtO7+ySahArmw6ltuIxFWYEvpn5xI3Ceur1d11NBphK62it7kBZ1laxUFI98DzalVFQ==",  "data" : "pay_result=success&tn=899394085660622736701&cert_id=68759585097"}

支付流程图: