首页 > 代码库 > 银联支付总结

银联支付总结

支付流程图:

Android 客户端  
1、 接口说明  
    upmp_android/UPPayAssistEx.jar包中定义了启动支付控件的接口,接口定义如 
下:  
 public static int startPay(Activity activity, String spId,  String sysProvider, String orderInfo, String mode)  
 参数说明:  
     activity  ——用于启动支付控件的活动对象  
     spId  ——保留使用,这里输入null  
     sysProvider ——保留使用,这里输入null  
     orderInfo   ——订单信息为交易流水号,即TN。   
     mode   —— 银联后台环境标识,“00”将在银联正式环境发起交易, “01”将在 
 银联测试环境发起交易  
 返回值:  
      UPPayAssistEx.PLUGIN_VALID  ——  该终端已经安装控件,并启动控件  
      UPPayAssistEx.PLUGIN_NOT_FOUND  ——  手机终端尚未安装支付控件,需要先 安装支付控件  
     其它辅助接口:  
 public static boolean installUPPayPlugin(Context context)  
 参数说明:  
          context  ——安装控件的上下文  
 返回值: true  ——安装正常,false ——安装失败  
2、 添加SDK 包  
  • 配置AndroidManifest.xml:
       <activity
                android:name="com.unionpay.uppay.PayActivity"
                android:configChanges="orientation|keyboardHidden"
                android:excludeFromRecents="true"
                android:screenOrientation="portrait"
                android:windowSoftInputMode="adjustResize" >
            </activity>  
  • asset和jar中配置:
ps:drawable中的data.bin;一定要有否则会出现payActivity空指针报错;内在网银apk-->UPPayPluginExPro.apk
  • 从服务器端返回流水号在---》代码中调用:---->详细见步骤三:/**
         * @description 方法详细描述:跳转到网银控件上
         * @author samy
         * @param @param mode "00"启动银联正式环境 ;"01"连接银联测试环境
         * @date 2014-4-29 下午5:52:16
         */
        protected void doStartUnionPayPlugin(String tn, String mode) {
            int ret = UPPayAssistEx.startPay(MyWithDrawUnionpayActivity.thisnullnull, tn, mode);
            if (ret == 0) {
                // UPPayAssistEx.startPay(this, null, null, tn, mode);
            } else {
                // 正常的有请求返回的
                UPPayAssistEx.startPayByJAR(MyWithDrawUnionpayActivity.this, PayActivity.classnullnull, tn, mode);
            }
            // UPPayAssistEx.startPayFromBrowser(arg0, arg1, arg2);
            // int ret = UPPayAssistEx.startPay(MyWithDrawUnionpayActivity.this, null, null, tn, mode);
            // if (ret != 0)
            // {
            // // 需要重新安装控件
            // AlertDialog.Builder builder = new AlertDialog.Builder(this);
            // builder.setTitle("提示");
            // builder.setMessage("完成购买需要安装银联支付控件,是否安装?");
            //
            // builder.setNegativeButton("确定", new DialogInterface.OnClickListener()
            // {
            // @Override
            // public void onClick(DialogInterface dialog, int which)
            // {
            // // 可做安装处理
            // dialog.dismiss();
            // UPPayAssistEx.installUPPayPlugin(MyWithDrawUnionpayActivity.this);
            // }
            // });
            //
            // builder.setPositiveButton("取消", new DialogInterface.OnClickListener()
            // {
            //
            // @Override
            // public void onClick(DialogInterface dialog, int which)
            // {
            // dialog.dismiss();
            // }
            // });
            // builder.create().show();
            // }
        }          
3、 调用支付控件  (官方的配置)
     a)   在调用支付控件的代码文件中引入UPPayAssistEx类如:  
 import com.unionpay.UPPayAssistEx ;  
     b)   接着可以通过以下方式调用支付控件:  
 //  “00”  – 银联正式环境  
 //  “01”  – 银联测试环境,该环境中不发生真实交易  
 String serverMode =  “01”;  
  int ret = UPPayAssistEx.startPay ( activity, null, null, tn, serverMode);  
  if( ret == UPPayAssist.PLUGIN_NOT_FOUND ){  
      //安装Asset中提供的UPPayPlugin.apk  
      // 此处可根据实际情况,添加相应的处理逻辑  
      UPPayAssistEx.installUPPayPlugin(activity);  
  }  
  支付完成后,获取支付控件支付结果,并添加相应处理逻辑,只需实现调用Activity 
中的onActivityResult()方法即可,实例代码如下:  
  protected void onActivityResult( int requestCode,    int resultCode,   Intent data)   
  {  
       if( data =http://www.mamicode.com/= null ){
           return;  
       }  
        String str =  data.getExtras().getString("pay_result");  
       if( str.equalsIgnoreCase(R_SUCCESS) ){  
           showResultDialog(" 支付成功! ");  
      }else if( str.equalsIgnoreCase(R_FAIL) ){  
           showResultDialog(" 支付失败! ");  
      }else if( str.equalsIgnoreCase(R_CANCEL) ){  
           showResultDialog(" 你已取消了本次订单的支付! ");  
      }     
  }  

最后看完整代码:
1:服务器返回拿到流水号后在触发控件:
    public void onResult(Integer taskKey, TaskResult<UinonPayTrade> result) {
            dismissLoadingDialog();
            if (result != null && result.getCode() != TaskResult.OK) {
                showToastMsg(result.getMsg());
                return;
            }
            if (result.getCode() == TaskResult.OK) {
                mUinonPayTrade = result.getData();
                doStartUnionPayPlugin(mUinonPayTrade.getTn(), "00");
            }
        }  
2:调控件:00"启动银联正式环境 ;"01"连接银联测试环境;
/**
     * @description 方法详细描述:跳转到网银控件上
     * @author samy
     * @param @param mode "00"启动银联正式环境 ;"01"连接银联测试环境
     * @date 2014-4-29 下午5:52:16
     */
    protected void doStartUnionPayPlugin(String tn, String mode) {
        int ret = UPPayAssistEx.startPay(MyWithDrawUnionpayActivity.thisnullnull, tn, mode);
        if (ret == 0) {
            // UPPayAssistEx.startPay(this, null, null, tn, mode);
        } else {
            // 正常的有请求返回的
            UPPayAssistEx.startPayByJAR(MyWithDrawUnionpayActivity.this, PayActivity.classnullnull, tn, mode);
        }
        // UPPayAssistEx.startPayFromBrowser(arg0, arg1, arg2);
        // int ret = UPPayAssistEx.startPay(MyWithDrawUnionpayActivity.this, null, null, tn, mode);
        // if (ret != 0)
        // {
        // // 需要重新安装控件
        // AlertDialog.Builder builder = new AlertDialog.Builder(this);
        // builder.setTitle("提示");
        // builder.setMessage("完成购买需要安装银联支付控件,是否安装?");
        //
        // builder.setNegativeButton("确定", new DialogInterface.OnClickListener()
        // {
        // @Override
        // public void onClick(DialogInterface dialog, int which)
        // {
        // // 可做安装处理
        // dialog.dismiss();
        // UPPayAssistEx.installUPPayPlugin(MyWithDrawUnionpayActivity.this);
        // }
        // });
        //
        // builder.setPositiveButton("取消", new DialogInterface.OnClickListener()
        // {
        //
        // @Override
        // public void onClick(DialogInterface dialog, int which)
        // {
        // dialog.dismiss();
        // }
        // });
        // builder.create().show();
        // }
    }
3:网银支付成功以否回调:
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode != Activity.RESULT_OK) {
            return;
        }
        String msg = "";
        String str = data.getExtras().getString("pay_result");
        if (str.equalsIgnoreCase("success")) {
            msg = "网银充值成功!";
        } else if (str.equalsIgnoreCase("fail")) {
            msg = "网银充值失败!";
        } else if (str.equalsIgnoreCase("cancel")) {
            msg = "取消了网银充值";
        }
        showToastMsg(msg);
        jumpToActivity(******.classtrue);
    }  

源码下载:http://download.csdn.net/detail/hongliuxing/7998801 
官方支付:http://download.csdn.net/detail/hongliuxing/7998821 
                                                   



来自为知笔记(Wiz)


银联支付总结