概述
TLS后台API我们提供了6个包供开发者下载,内容分别是windows下64位预编译文件包、windows下32位预编译文件包、linux下64位预编译文件包、linux下32位预编译文件包、zip格式的源代码文件和tar.gz格式的源代码文件。
linux平台
工具使用
工具的主要作用是在本地手动生成公私钥,手动生成sig和验证sig。
进入预编译文件包的tools目录,可以看到下面的几个文件,

├── genkey.sh 生成公私钥的批处理文件 
 ├── openssl.cnf openssl配置文件,默认不要修改 
 ├── openssl openssl工具可执行文件文件 
 └── tls_licence_tools 生成sig和校验sig的工具 
 生成公私钥 
 进入tools目录,执行下面的命令, 
 ./genkey.sh 
 输出 
 read EC key 
 writing EC key 
 表示生成公私钥成功,公私钥分别为当前目录下的 public.pem 和 ec_key.pem。下面是演示的截图,生成sig和校验sig 
 首先不带参数执行 tls_licence_tools,即执行下面的命令 
 ./tls_licence_tools 
 输出 
 current version: 1.7 
 Usage: 
 get sig: ./tls_licence_tools 1 pri_key_file sig_file expire sdkappid acctype appid3rd identifier 
 get sig e.g.: ./tls_licence_tools 1 ec_key.pem sig 3600 1104620500 107 1104620500 group_root 
 verify sig: ./tls_licence_tools 2 pub_key_file sig_file sdkappid acctype appid3rd identifier 
 verify sig e.g.: ./tls_licence_tools 2 public.pem sig 1104620500 107 1104620500 group_root


下面是演示截图,

输出实际上是参数模板和示例。
执行类似于下面的命令可以生成 sig,
./tls_licence_tools 1 ec_key.pem sig 3600 1104620500 107 1104620500 group_root
执行类似于下面的命令可以校验 sig,
./tls_licence_tools 2 public.pem sig 1104620500 107 1104620500 group_root
下面演示截图,

下面解释下参数模板中参数的意义,
pri_key_file:私钥文件的路径
pub_key_file:公钥文件的路径
sig_file:sig 文件的路径,如果是生成 sig,那么会将 sig 写入这个文件,如果是校验 sig,那么会从这个文件读取 sig 的内容
expire:sig 的有效期
sdkappid:创建应用时页面上分配的 sdkappid
acctype:账号集成管理页面上配置之后显示的 accounttype
appid3rd:独立模式下与 sdkappid 一样,集成模式下第三方开放平台账号的 appid
identifier:用户标识,即用户 id
C++接口
首先包含include/tls_sig_api目录下的tls_signature.h。头文件中包含的接口,tls_gen_signature_ex和tls_check_signature_ex,前者是生成sig的接口,后者是校验sig的接口,详细的参数和返回值说明请参考头文件tls_signature.h。
然后是链接静态库,在lib目录下有下列目录,
├── jni
├── jsoncpp
├── openssl
└── tls_sig_api
需要链接的静态库是libjsoncpp.a、openssl目录下的libcrypto.a和libtlsignature.a。另外还需要链接系统的-ldl和-lz,典型的编译配置如下,
假设我们的代码的目录结构如下,

demo目录结构 
 |—include 
 |—lib 
 |—src 
 Makefile和demo.cpp源文件在 src 中,典型的工程配置如下 
 CFLAGS= -I../include/tls_sig_api -Wall -fPIC 
 LIBS= ../lib/jsoncpp/libjsoncpp.a ../lib/openssl/libcrypto.a -ldl -lz 
 g++ -o demo demo.cpp (CFLAGS)(LIBS)


下面的截图是我们开发时编译tls_licence_tools的命令行,由于是我们这边的开发环境,链接库的路径可以按照开发者自己的实际情况给出,

【特别注意】
如果程序有多线程调用TLS后台API的用法,请在程序初始化时和结束时分别调用下面的接口,
int multi_thread_setup(void);
void multi_thread_cleanup(void);
Java接口
目前java接口使用jni的方式实现。Java目录下tls_sigcheck.class,是由tls_sigcheck.java编译得到,如果有jdk兼容性问题,开发者可自行重新编译此文件,编译命令为,
javac -encoding utf-8 tls_sigcheck.java
请注意接口的包路径为com.tls.sigcheck,典型的使用方法是example目录下java版本demo的组织方式,

├── com 
 │ └── tls 
 │ └── sigcheck 
 │ └── tls_sigcheck.class 
 ├── Demo.class 
 ├── Demo.java 
 ├── ec_key.pem 
 ├── public.pem 
 └── README


之前提到java接口目前使用的jni的方式,所以Demo.java调用了载入so的语句,
demo.loadJniLib(“/home/jnisigcheck.so”);
开发者根据自己的存放jnisigcheck.so实际路径进行修改,预编译的jnisigcheck.so存放在lib/jni目录下。
demo的使用方式请参考example/java/README。下面是演示截图,

Java原生接口
1. 依赖的jar文件:
Java原生接口都封装在5个jar包中。在tls_sig_api/java_native/jar目录下:

├── bcpkix-jdk15on-152.jar 
 ├── bcprov-jdk15on-152.jar 
 ├── commons-codec-1.10.jar 
 ├── Demo.java 
 ├── gson-2.3.1.jar 
 ├── json.jar 
 ├── tls_sigature.java 
 └── tls_signature.jar


2. API说明
tls_signature.jar中含有tls_sigature.java这个源码文件,这个文件也是API的接口文件。里面有详细的接口说明,请开发者参考。
【特别注意】
接口中的publicBase64Key和privateBase64Key两个参数基本对应TLS官方网站公私钥生成页面上生成的公私钥。对于公钥:直接取公钥文件中的所有内容赋值给publicBase64Key参数即可;对于私钥,需要用tls api的tools目录下:openssl命令行工具一点额外的格式转换:
示例:./openssl pkcs8 -topk8 -in ec_key.pem -outform PEM -out p8_priv.pem -nocrypt
在tools目录下执行:openssl pkcs8 -topk8 -in ec_key.pem -outform PEM -out p8_priv.pem -nocrypt
格式转换后的,从p8_priv.pem取出所有的文件内容赋值给privateBase64Key参数就可以进行加密了。
PHP接口
php实现的方式较为简单,就是调用命令行工具生成sig,工具是bin/signature,php的调用方式如下,