银联手机POS
手机闪付
收单机构
商户
开发者
发卡机构
银联手机POS是中国银联严格依据人民银行的相关标准,并经过银联安全认证,同时通过BCTC等专业机构安全检测的一款新型金融科技产品,集合了二维码、手机闪付、银行卡等目前市面上主流的支付方式,更便于持卡人支付。


1. 控件的下载和绑定

        

        手机POS控件需要预先下载,商户的App启动时判断手机里是否存在包名为 com.unionpay.mobileposservice的控件,如不存在,则发起一次HTTP POST网络请求,手机POS后台根据手机型号返回手机POS控件APK的下载地址商户App获取下载地址后自行下载并安装。 

        测试环境地址:http://180.169.111.154/managementService/queryPos


        示例

        //组装JSON请求体

        JSONObject json = new JSONObject();

        json.put("deviceModel", android.os.Build.MODEL);                  

        json.put("deviceType", "01");                                                    

        json.put("deviceOs", "android");                                                

        json.put("osVersion", android.os.Build.VERSION.SDK_INT);      

        //网络请求

        OkHttpUtil.getInstance().doJsonRequest(Constant.APP_UPDATE_API, json.toJSONString(), callback);

4.png

        成功下载安装了手机POS控件以后,商户App获取控件实例对象,用该实例绑定控件。


        示例

        // 1. 获取对象实例

        UPPosAddon mUPAddon = UPPosAddon.getInstance(this);

        // 2. 绑定控件

        mUPAddon.bind(new UPPosConnectionListener() {

            @Override

            public void onConnected() {

                Log.i(TAG, "控件Service connected.");

        //   3. 绑定控件成功后,初始化控件

        mUPPosAddon.init(new UPPosAddon.IUPCallback() {

                    @Override

                    public void onProgress(String progress) {}

                    @Override

                    public void onSuccess(Bundle result) {}

                    @Override

                    public void onError(String errorCode, String result) {}

        });

            }

            @Override

            public void onDisconnected() {

                Log.i(TAG, "控件Service disconnected.");

            }

        };

        );

        // 4. 调用控件API

        int ret = mUPAddon.xxxMethod(bundle, callback);

        // 5. 无需控件时,解绑服务

        mUPAddon.unbind();

        

注意:部分华为手机可能存在绑定控件失败的情况,请检查手机POS控件在华为手机系统里的自启动设置,

方法是”手机管家"->"应用启动管理"->"银联安全服务",设置成如下图所示,

WechatIMG24.png



2. 手机的激活和验证


        App每次绑定控件后必须调用接口:初始化控件(API 3.1.1)。

        控件负责在第一次使用POS时激活手机,以及每次使用POS时验证手机。    

image.png

App每次绑定控件后必须初始化控件(API 3.1.1)。

App若从未调用初始化接口,第一次调用时,POS控件会激活设备。

App每次调用初始化接口,手机POS控件会验证设备,并检查控件的版本。


        示例

        // 控件初始化

        int ret = mUPPosAddon.init(new UPPosAddon.IUPCallback() {

                   @Override

                    public void onProgress(String progress) {

                        // 在这里处理初始化的中间过程

                    }

                    @Override

                    public void onSuccess(Bundle result) {

                        // 在这里处理初始化成功后的返回结果

                    }

                    @Override

                    public void onError(String errorCode) {

                        // 在这里处理初始化失败后的返回结果

                    }

        });



3. 查询当前用户信息


        App调用接口:查询用户(API 3.1.5)可获得当前用户信息,包括该用户是否已经开通了小微商户,是否经绑定主设备等。

        开发者需要提供商户App的用户名userId给手机POS控件,作为手机POS对商户App用户的唯一标识。    

image.png

App绑定控件后开始交易前可以先查询当前用户的账号状态(API 3.1.5)。

如用户已开通商户已绑定当前设备,可以开始交易(API 3.2)。

如用户从未注册,先开通商户(API 3.3.1)。

如用户为店主已开通商户未绑定当前设备,先绑定主设备(API 3.1.2)。


如用户为店员且已绑定子设备,等同已注册,可以开始交易。

如用户为店员但未绑定子设备,先绑定子设备(API 3.1.4)。

        

        示例

        // 查询当前帐号下的注册状态,商户信息,店主店员信息和设备信息。

        String userId = “mike”; 

        Bundle info = mUPPosAddon.getInfo(userId);

        if (info != null) {

        String statusCode = info.getString("statusCode");

        String respCode = info.getString("respCode");

        String respMsg = info.getString("respMsg");

        String reserve = info.getString("reserve");

        // 获取注册状态

        String regStatus = info.getString("regStatus");

        if (“0”.equals(regStatus)) {

              // 已注册,可以开始交易

        } else if (“1”.equals(regStatus)) {

             // 已开通商户未绑定设备,先去绑定设备

        } else if (“2”.equals(regStatus)) {

             // 未开通商户,先去开通商户

        } else if (“3”.equals(regStatus)) {

            // 商户正在审核中,不能交易

        } } else if (“4”.equals(regStatus)) {

            // 店员账户,可以开始交易

        } else {

            // 异常情况

        }

        }



4. 商户开通/入网/进件


捕获.png    

        示例

        // API 3.3.1商户开通为例

        Bundle bundle = new Bundle();

                bundle.putString("userId", "jin");                             // 用户名

                bundle.putString("expandcode", "48690000");     // 拓展机构代码

                bundle.putString("phoneNo", "15800123456");   // 手机号

                bundle.putString("mchntType", "0203");              // 商户类型

                bundle.putString("merName", "星巴克");            // 商户名称

                bundle.putString("certifTp", "01");                        // 证件类型

                bundle.putString("certifId", "310104199007032811");   // 证件号

                bundle.putString("customerNm", "小明");           // 店主姓名

                bundle.putString("accNo", "622512345678901218");  // 银行卡号

                bundle.putString("accType", "1");        // 账号类型

                bundle.putString("cityCd", "1900");     // 城市代码

         

                int result = mUPPosAddon.merchantRegister(bundle, new IUPCallback() {

                    @Override

                    public void onProgress(String progress) {

                    }

                    @Override

                    public void onSuccess(Bundle result) {

                          // 商户开通成功,获取商户编号

        String merId = result.get("merId")

                    }

                    @Override

                    public void onError(String errorCode, String progress) {

                    }

                });

    


5. 二维码收款和NFC收款


        商户App不用开发收单界面,手机POS控件已经提供以下三种场景的收单界面,分别是NFC收款,二维码主扫和被扫收款。

    

捕获.png


6. 店主店员管理


        使用手机POS提供的店主店员管理方案建议的开通流程如下:


          1) 店主填写店员信息(App用户名,店员姓名,手机号)开始“添加店员”

           2) 店员手机收到短信验证码,将短信告知店主 

           3) 店主填写短信验证码,并通过验证,调用接口添加店员  (API 3.3.16)

           4) 店员在手机上进行“子设备绑定”  (API 3.1.4) 

image.png

    请在“文档下载”板块下载“中国银联手机POS产品控件接口指南”了解更多详情。




联系我们

技术咨询: 021-20637043

钱进

qianjin@unionpay.com

咨询与服务