一、移动开票概述

百望移动开票对外开发接口,完成发票开具等相关功能。另外移动开票为了保证接口安全性以及数据传输安全性,分别使用了应用授权认证以及数据的访问、传输采用百望特有的动态加密方式。

1.接口概述

1) 本接口用于Android第三方应用调用移动开票进行增值税发票开具、上传。

2) 接口设计为以JSON格式字符串作为参数传递。

3) 本接口适用于android4.4及以上系统。

4) 终端设备上需安装移动开票App。

2.适用范围

本接口规范仅适用移动开票。

二、接口调用

Activity接口调用主要分为3步:

1) 创建一个Activity远程通讯的实例。

2) 初始化init(),并设置类型type。

3) 调用接口,将Json格式的字符串作为参数传递。

4) 等待接口返回值,处理相应业务。

5) 完成所有调用后关闭实例,回收资源并保证安全。

*注意:使用过程中,需开启蓝牙设备。

1.SDK依赖

sdk采用java开的,需要的运行在jdk1.6及以上,依赖一下jar包:

fastjson-1.1.33.jar

BestWonderKp.jar

2.SDK方法

表明接口开发中。

1) 获取实例方法

在com.baiwang.bwkp路径下:public BestWonderKp(Context context) {}

参数:

成功:无返回值

2) 调试模式

在com.baiwang.bwkp路径下:public BestWonderKp(Context context) {}

参数:

成功:无返回值

*注:正式发布需关闭该模式。

3) 初始化init

在com.baiwang.bwkp 路径下:public void init(int type) {}

参数:

成功:无返回值

4) 获取应用授权

在com.baiwang.bwkp路径下:public String getAppdata{}

成功:返回授权信息。

出错:抛出异常

*注:1.开票参数中不带发票抬头信息,那么自动进入扫码界面,扫码解析抬头二维码或手动输入发票抬头。

      2.开票参数中带发票抬头信息,那么直接接入口令校验界面,完成开票交易。

5) 获取开票数据格式

在com.baiwang.bwkp路径下:public String getKpdata(String kpdata ) {return kpdata;}

参数:

成功:返回开票数据格式

出错:抛出异常

6) 关闭实例方法

在com.baiwang.bwkp 路径下:public boolean release() {}

成功:true

出错:抛出异常

7) 开票返回信息

在调用方activity的onActivityResult下:public boolean release() {}

bwkj_return_message返回信息为:{“code”:”0000”,”msg”:”交易成功”},具体使用请看代码样例。

成功:true

出错:抛出异常

8) 开票地址设置方法

在com.baiwang.bwkp路径下:public int setnetadress(String ip,String port,String server) {}

参数:

成功:0 表示成功 -1或其他 表示失败

出错:抛出异常

3.代码样例

清单文件配置:

<uses-permission android:name="com.cpos.invoice.permission.INVOKE" />

<meta-data android:name="BAIWANG_KP_APPID" android:value="百望云提供的实际ID"></meta-data>

<meta-data android:name="BAIWANG_KP_APPSERCRET" android:value="百望云提供的实际秘钥"></meta-data>

代码示例:

private BestWonderKp beWonderKp;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

beWonderKp = new BestWonderKp(this);

beWonderKp.init(1);

}

public void start() throws Exception{

List<RemoteMxinfo> mxInfos = new ArrayList<RemoteMxinfo>();

mxInfos.add(new RemoteMxinfo("苹果", "红富士", "斤", 10.00, "1", "", 10.00, 0, 0, "", "","", "", ""));

RemoteFpinfoSimkey fpinfo = new RemoteFpinfoSimkey("", "", "", "", "","123456789", "发票抬头", "", "", "","", "1", "", mxInfos);

String jsonString = JSON.toJSONString(fpinfo);

Intent i = new Intent(BestWonderKp.actionName);

Bundle b = new Bundle();

b.putString("appdata",beWonderKp.getAppdata())

b.putString("kpdata",beWonderKp.getKpdata(jsonString));

i.putExtras(b);

startActivityForResult(i, REQUST_CODE);

}

@Override

protected void onActivityResult(int arg0, int arg1, Intent arg2) {

super.onActivityResult(arg0, arg1, arg2);

if(arg0 == REQUST_CODE){

if(arg1 == Activity.RESULT_OK){

Bundle b = arg2.getExtras();

String state = b.getString("bwkj_return_message", "");

Log.e("state", state);

}

}

}

4.数据基本格式

1) 开票交易数据格式

{

"bmb_bbh": "",

"bz": "",

"hjje": 50,

"hjse": 0,

"jshj": 50,

"jshjdx": "",

"jylsh": "1234567890123456",

"mxinfos": [{

"dj": 50,

"ggxh": "",

"hs": 0,

"je": 50,

"jldw": "",

"lslbs": "",

"se": 0,

"sl": "1",

"spbm": "",

"spmc": "",

"spsl": "",

"yhzcbs": "",

"zxbm": "",

"zzstsgl": ""

}],

"packageName": "",

"simKey_caPin": "",

"simKey_phone": "",

"simKey_sksbkl": "",

"spfDm": "",

"spfdz": "",

"spfemail": "",

"spfmc": "",

"spfphone": "",

"spfyhmc": "",

"spfyhzh": "",

"status": "",

"token": "",

"yfp_dm": "",

"yfp_hm": ""

}

2) 错误码对照表