商户账号管理

更新时间:2024-04-02 08:54:34下载pdf

概念介绍

名词 说明
商户 商户实体信息,主要关联一些商户信息,包括商户名和营业执照等
主账号 SaaS 体系主账号,等同于开发者账号
子账号 SaaS 体系子账号,会关联一个主账号

通过 ThingOSUser.getUserInstance(),获取对应 IThingUser 操作类。

账号密码登录

账号分为主账号和子账号,均可使用该密码登录功能。如果为预登录(当返回多个商户信息时),需要选择商户,并将选择的商户 Code 填入登录入参,重新进行密码登录。

接口说明

账号密码登录。

void loginWithPassword(ThingUserLoginWithPwdReqBean request, IThingUserLoginCallback<User> callback)

参数说明

参数 是否必填 描述
userName 必填 账号| 邮箱
password 必填 密码
countryCode 必填 国家区号,例如 86
merchantCode 非必填 商户 Code

示例代码

/**
* 账号密码登录
* @param view
*/
public void loginWithPwd(View view) {
    String username = etUsername.getText().toString();
    String merchantCode = etMerchant.getText().toString();
    String password = etPwd.getText().toString();
    ThingUserLoginWithPwdReqBean reqBean = new ThingUserLoginWithPwdReqBean();
    reqBean.setPassword(password);
    reqBean.setUsername(username);
    reqBean.setCountryCode("86");
    reqBean.setMerchantCode(merchantCode);

    ThingOSUser.getUserInstance().loginWithPassword(reqBean, new IThingUserLoginCallback<User>() {
        @Override
        public void onPreLogin(List<ThingMerchantBean> merchantBeanList) {
            StringBuilder sb = new StringBuilder();
            for (ThingMerchantBean item : merchantBeanList) {
                sb.append(item.getMerchantCode())
                        .append(item.getMerchantName())
                        .append("\n");
            }
            toast("需要输入商户code");
            L.d(TAG, "get merchantList");
            L.d(TAG, sb.toString());
            if(null != merchantBeanList && !merchantBeanList.isEmpty()){
                String merchantCode = merchantBeanList.get(0).getMerchantCode();
                etMerchant.setText(merchantCode);
                toast("填充商户code");
            }
        }

        @Override
        public void onSuccess(User data) {
            toast("login success");
        }

        @Override
        public void onError(String errorCode, String errorMessage) {
            L.e(TAG, errorMessage);
            toast(errorMessage);
        }
    });
}

账号验证码登录

验证码登录功能分为两步,先获取登录验证码,然后将验证码填入验证码登录入参。如果是预登录(有多商户)操作,则需要传入对应的商户 Code 来重新获取验证码,并将对应的验证码和商户 Code 传入进行登录。

接口说明

获取登录验证码。

void getValidateCode(ThingUserSendCodeReqBean request, IResultCallback callback)

参数说明

参数 说明
countryCode 国家区号,例如 86
username 手机号码 | 邮箱
codeType 获取验证码类型,登录类型传 0

接口说明

验证码登录。

void loginWithVerifyCode(ThingUserLoginWithCodeReqBean request, IThingUserLoginCallback<User> callback)
参数 描述
userName 账号,手机号码 | 邮箱
code 验证码
countryCode 国家区号,例如 86
merchantCode 商户 Code,非必填
/**
* 账号验证码登录
* @param view
*/
public void loginWithCode(View view) {
    String username = etUsername.getText().toString();
    String merchantCode = etMerchant.getText().toString();
    String code = etCode.getText().toString();
    ThingUserLoginWithCodeReqBean reqBean = new ThingUserLoginWithCodeReqBean();
    reqBean.setCode(code);
    reqBean.setUsername(username);
    reqBean.setCountryCode("86");
    reqBean.setMerchantCode(merchantCode);

    ThingOSUser.getUserInstance().loginWithVerifyCode(reqBean, new IThingUserLoginCallback<User>() {
        @Override
        public void onPreLogin(List<ThingMerchantBean> merchantBeanList) {
            StringBuilder sb = new StringBuilder();
            for (ThingMerchantBean item : merchantBeanList) {
                sb.append(item.getMerchantCode())
                        .append(item.getMerchantName())
                        .append("\n");
            }
            toast("需要输入商户code");
            L.d(TAG, "get merchantList");
            L.d(TAG, sb.toString());
            if(null != merchantBeanList && !merchantBeanList.isEmpty()){
                String merchantCode = merchantBeanList.get(0).getMerchantCode();
                etMerchant.setText(merchantCode);
                toast("填充商户code");
            }
        }

        @Override
        public void onSuccess(User data) {
            toast("login success");
        }

        @Override
        public void onError(String errorCode, String errorMessage) {
            L.e(TAG, errorMessage);
            toast(errorMessage);
        }
    });
}

三方系统授权登录

授权流程

  1. 三方系统服务端授权账户到涂鸦 IoT 开发平台,由三方系统决定授权账户的范围,可以是三方系统的用户或员工账号,也可以是内部任何业务形态对应一个账号授权到涂鸦 IoT 开发平台。例如,企业、门店和项目等。

  2. 已经授权的账户,三方系统服务端通过账户加国家码,向涂鸦 IoT 开发平台申请一个 Ticket。

    商户账号管理

使用场景

  1. 涂鸦的系统域名加上该 Ticket,可实现免登跳转。示例:lighting.console.tuyacn.com?ticket=xxx。例如,访问涂鸦的系统网站,或扫码访问设备控制 H5 页面。
  2. 涂鸦商照 SDK 获取会话接口,传入 Ticket,获取会话状态,访问完整的 SDK 能力。

接口说明

三方系统授权登录。

void loginByTicket(String ticket, IThingUserResultCallback<User> listener);

参数说明

参数 说明
ticket 通过授权流程获取 Ticket

示例代码

ThingOSUser.getUserInstance().loginByTicket(content, new IThingUserResultCallback<User>(){
    @Override
    public void onSuccess(User user) {
        Log.e(TAG,"登录成功")
    }

    @Override
    public void onError(String code, String error) {
        Log.e(TAG,"登录失败:" + error)
    }
});

找回密码/重置密码

用户登录前修改密码,分为三个步骤:

  1. 获取找回密码的验证码。
  2. 将验证码传入,查找商户列表。
  3. 获取对应单独商户,执行找回密码的方法。

接口说明

获取验证码。

void getValidateCode(ThingUserSendCodeReqBean request, IResultCallback callback)

参数说明

参数 说明
countryCode 国家区号,例如 86
username 手机号码 | 邮箱
codeType 获取验证码类型,类型传 2

接口说明

查找商户列表。

void loginWithVerifyCode(ThingUserLoginWithCodeReqBean request, IThingUserLoginCallback<User> callback);

参数说明

参数 说明
countryCode 国家区号,例如 86
username 手机号码 | 邮箱
code 验证码

接口说明

找回密码。

void findPassword(ThingUserFindPwdReqBean request, IThingUserFindPasswordCallback callback);
参数 描述
username 账号,手机号码 | 邮箱
newPassword 新密码
code 验证码
countryCode 国家区号,例如 86
merchantCode 商户 Code
/**
 * 1.0 获取验证码
 * @param v
 */
public void getCode(View v){
  String username = etUsername.getText().toString();
  String merchantCode = etMerchant.getText().toString();
  ThingUserSendCodeReqBean reqBean = new ThingUserSendCodeReqBean();
  reqBean.setCountryCode("86");
  reqBean.setUsername(username);
  reqBean.setCodeType(codeType);
  reqBean.setMerchantCode(merchantCode);

  ThingOSUser.getUserInstance().getValidateCode(reqBean, new IResultCallback() {
    @Override
    public void onError(String code, String error) {
      L.e(TAG, error);
      toast(error);
    }

    @Override
    public void onSuccess() {
      toast("getCode success");
    }
  });
}

/**
 * 2.0 查询商户列表
 * @param view
 */
public void queryMerchants(View view) {
  String username = etUsername.getText().toString();
  String code = etCode.getText().toString();

  ThingUserQueryMerchantWithCodeReqBean reqBean = new ThingUserQueryMerchantWithCodeReqBean();
  reqBean.setCode(code);
  reqBean.setCountryCode("86");
  reqBean.setUsername(username);
  ThingOSUser.getUserInstance().queryMerchantList(reqBean, new IThingUserResultCallback<List<ThingMerchantBean>>() {
    @Override
    public void onSuccess(List<ThingMerchantBean> data) {
      if(null == data ){
        toast("商户列表为空");
        return;
      }
      int size = data.size();
      if(0 <= size){
        String merchantCode = data.get(0).getMerchantCode();
        etMerchant.setText(merchantCode);
        toast("queryMerchants success 填充第0个商户code");
      }
    }

    @Override
    public void onError(String errorCode, String errorMessage) {
      toast(errorMessage);
    }
  });
}

/**
 * 找回密码
 * @param view
 */
public void resetPwd(View view) {
  String username = etUsername.getText().toString();
  String merchantCode = etMerchant.getText().toString();
  String code = etCode.getText().toString();
  String password = etPwd.getText().toString();

  ThingUserFindPwdReqBean reqBean = new ThingUserFindPwdReqBean();
  reqBean.setUsername(username);
  reqBean.setNewPassword(password);
  reqBean.setCode(code);
  reqBean.setCountryCode("86");
  reqBean.setMerchantCode(merchantCode);

  ThingOSUser.getUserInstance().findPassword(reqBean, new IResultCallback() {
    @Override
    public void onError(String code, String error) {
      toast(error);
    }

    @Override
    public void onSuccess() {
      toast("findPassword success");
    }
  });
}

修改密码

用户登录后修改密码,可以直接通过传递旧密码和新密码来修改密码。

接口说明

修改密码。

void modifyPassword(ThingUserModifyPwdReqBean request, IResultCallback callback);
参数 描述
oldPassword 旧密码
newPassword 新密码

示例代码

public void modifyPwd(View view) {
  String oldPwd = etPwd.getText().toString();
  String newPwd = etNewPwd.getText().toString();
  ThingUserModifyPwdReqBean reqBean = new ThingUserModifyPwdReqBean();
  reqBean.setOldPassword(oldPwd);
  reqBean.setNewPassword(newPwd);

  ThingOSUser.getUserInstance().modifyPassword(reqBean, new IResultCallback() {
    @Override
    public void onError(String code, String error) {
      toast(error);
      L.e(TAG, error);
    }

    @Override
    public void onSuccess() {
      toast("modify success");
    }
  });
}

账号登出

接口说明

账号登出。

void logout(IResultCallback callback)

账号注销

接口说明

账号注销。

void cancelAccount(IResultCallback callback)

获取用户信息

当用户信息发生变更,例如修改了用户头像、昵称等,需要调用同步用户信息接口,保持用户信息是最新的状态。如果多台设备同时登录,一台设备修改了用户信息,另外一台设备也需要同步用户信息。可以在查看用户信息时调用同步接口,同步最新的用户信息。

接口说明

用于获取和同步用户信息。

void updateUserInfo(IResultCallback callback);

参数说明

参数 说明
callback 回调

示例代码

ThingOSUser.getUserInstance().updateUserInfo(new IResultCallback() {
  @Override
  public void onError(String code, String error) {

  }

  @Override
  public void onSuccess() {
    User user = ThingOSUser.getUserInstance().getUser();
  }
});