# JS集成Nabox指南

# 简介

该文档提供给Dapp接入Nabox钱包使用,Nabox提供支付、离线组装合约调用、查询钱包信息等接口能力。

安卓实例对象:NaboxPay
已有方法:
-naboxPay  (发起钱包支付)
-getDefaultAddress (获取当前默认钱包地址)
-getAddressBalance (获取钱包余额)
-transferOffline(离线组装转账交易)
-contractCallOffline(离线组装合约交易)
-switchingUsers(APP底部唤起当前钱包列表)
-authorization(APP底部唤起当前钱包列表,进行输入密码授权,返回keystore-加密私钥)

JS代码:
/**
 * NaboxJSBridge方法必须在H5作为一个全局方法暴露出去
 * app处理完事物后会通过调用NaboxJSBridge方法的appPayResponse函数将处理后的数据传给H5
 * 所以在H5端要将NaboxJSBridge方法作为全局方法挂在window下面
 *
 * 返回值	描述
 *  requestCode:
 *     ok	成功
 *     notfound	 未找到NaboxApp
 *     cancel	支付过程中用户取消
 *     fail	失败
 */
var NaboxJSBridge = {
	_callBack : null,

	/**
	 * 返回callBack{
	 *     requestCode:ok
	 *     txHash:  当返回成功时,有txHash值
	 *     payAddress: 支付人
	 * }
	 * @param params
	 * @param callBack
	 */
	appRequest : function(method, params,callBack) {
		var paramStr =  JSON.stringify(params);
		if (NaboxPay == undefined) {
			callBack({"request_code":"notfound"})
		}
		this._callBack = callBack;
		if ("naboxPay" == method){
			NaboxPay.naboxPay(paramStr);
		}
		if ("transferOffline" == method) {
			NaboxPay.transferOffline(paramStr);
		}
		if ("contractCallOffline" == method) {
			NaboxPay.contractCallOffline(paramStr);
		}
		if ("switchingUsers" == method){
			NaboxPay.switchingUsers();
		}
        if ("getDefaultAddress" == method){
            NaboxPay.getDefaultAddress(); 
        }
        if ("getAddressBalance" == method){
            NaboxPay.getAddressBalance(paramStr); 
        }
        if("authorization" == method){
            NaboxPay.authorization();
        }
	},
	/**
	 * 返回callBack{
	 *     requestCode:ok
	 *     address: Nabox当前默认钱包地址
	 * }
	 * @param params
	 * @param callBack
	 */
	getDefaultAddress : function(callBack) {
		if (NaboxPay == undefined) {
			callBack({"request_code":"notfound"})
		}
		this._callBack = callBack;
		NaboxPay.getDefaultAddress();
	},

	appPayResponse : function(data) {
		if (this._callBack != undefined) {
			this._callBack(data)
		}
	},

	invoke : function(method,params,callBack) {
		if (method == undefined) {
			return ;
		}
		if ("appPayResponse" == method) {
			this.appPayResponse(params);
		} else {
            this.appRequest(method,params, callBack);
        }
	}

};

# 接口说明

# naboxPay

唤起Nabox钱包向商户发起转账,由Nabox直接广播交易

NaboxJSBridge.invoke(
    "naboxPay",//调用方法
    //业务数据
    {
        "shopId":"15669589240005", //商户id,由nabox分配,对应商户地址
        "payAmount":10000,//转账金额,单位Na
        "remark":"{'orderNo':'asdasdasdasd'}"//转账备注
    },
    function(data){
    });

# 接口返回格式

正常返回
//example
{      
     requestCode:ok
     txHash:  当返回成功时,有txHash值
     payAddress: 支付人
}
异常返回
//example
{
     requestCode:fail
}

# getDefaultAddress

获取Nabox钱包当前默认钱包地址

NaboxJSBridge.invoke(
    "getDefaultAddress",//调用方法
    //业务数据
    null,
    function(data){
    });

# 接口返回格式

正常返回
//example
{      
     requestCode:ok
     address:  //nabox钱包当前默认钱包地址
}
异常返回
//example
{
     requestCode:fail
}

# getAddressBalance

获取钱包余额信息,默认查询NULS资产

NaboxJSBridge.invoke(
    "getAddressBalance",//调用方法
    //业务数据
    {
       address: //查询钱包地址,必填
       contractAddress:// 合约地址,如果需要查询TOKEN资产填写资产合约地址,非必填
    },
    function(data){
    }); //回调函数

# 接口返回格式

正常返回
//example
{      
     requestCode:ok
     address:  //钱包地址
     symbol:  //资产单位缩写如NULS、CB
     decimals: //支持的小数位数
     totalBalance://资产总额,返回最小单位number,例如地址有1NULS,NULS的decimals=8则该参数返回100000000
     balance://可用资产,同上
}
异常返回
//example
{
     requestCode:fail
}

# transferOffline

离线组装转账并进行签名

NaboxJSBridge.invoke(
    "transferOffline",//调用方法
    //业务数据
    {
        "shopId":"15669589240005", //商户id,由nabox分配,对应商户地址
        "payAmount":10000,//转账金额转,单位是Na(1NULS=100000000Na)
        "remark":"{'orderNo':'asdasdasdasd'}"//转账备注
    },
    function(data){
    });

# 接口返回格式

正常返回
//example
{      
     requestCode:ok
     txHex: "",// 交易完整序列化16进制字符串数据,可以由游戏自行广播
     txHash:""//交易的hash值
}
异常返回
//example
{
     requestCode:fail
}

# contractCallOffline

离线组装调用合约方法并进行签名

NaboxJSBridge.invoke(
    "contractCallOffline",//调用方法
    //业务数据
    {
        "shopId":"15669589240005", //商户id,由nabox分配,对应合约地址,必填
        "value":10000,//转给合约的金额,单位NULS,没有填0
        "methodName":"buy",//合约方法名称,必填
        "methodDesc":"",//合约方法描述,若合约内方法没有重载,则此参数可以为空
        "args":[1,"tNULSeBaMvw2QtYPhLjgCFuBQefpXDczAdd49C"], //参数列表,必填
        "argsType":["Long","String"],// 参数类型列表,必填
        "sender":"tNULSeBaMvw2QtYPhLjgCFuBQefpXDczAdd49C"//调用人地址,,必填
    },
    function(data){
    });

# 接口返回格式

正常返回
//example
{      
     requestCode:ok
     txHex: "",// 合约交易完整序列化16进制字符串数据,可以由游戏自行广播
     txHash:""//合约交易的hash值
}
异常返回
//example
{
     requestCode:fail
}

# switchingUsers

唤起APP当前钱包列表进行选择

NaboxJSBridge.invoke(
    "switchingUsers",//调用方法
    //业务数据
    null,
    function(data){
    });

# 接口返回格式

正常返回
//example
{      
     requestCode:ok,
     address: "" //选中钱包地址
    
}
异常返回
//example
{
     requestCode:fail
}

# authorization

唤起APP当前钱包列表进行选择

NaboxJSBridge.invoke(
    "authorization",//调用方法
    //业务数据
    null,
    function(data){
    });

# 接口返回格式

正常返回
//example
{      
     requestCode:ok,
     address:, //选中地址
     alias:,   //钱包名称
     encryptedPrivateKey://加密后的私钥
     pubKey:  //公钥
}
异常返回
//example
{
     requestCode:fail
}
Last Updated: 2020/3/6 下午5:55:02