使用ShuanQCli快速开发对接接口
ShuanQCli工具介绍
ShuanQCli是用C++开发的控制台应用程序,用于给一些支持调用可执行程序的开发工具进行快速开发对接,调用它你可以不需要自行编写代码实现http请求、必要参数处理、传输加密、传输签名、返回验签、返回解密、防劫持验证、数据包过期验证等功能,它可以一键帮你实现这些,ShuanQCli应用程序已开源可在 官方群文件或网盘内进行下载源码或者成品文件,支持多系统支持http/https请求,一些基于Unix操作系统如Linux、macOS、Android等可下载c++源码进行编译为可执行程序用法和Windows一致,以下我就以Windows环境进行使用演示
ShuanQCli工具的基本用法介绍
ShuanQCli工具是不能直接打开运行的,你需要在运行它之前将相关的参数传递给它才会为你工作,你可以在命令行窗口进行运行和传参
/*
以下是后台接口通信与加密配置需要设置的东西:
接口传输验签方式:MD5
接口响应验签方式:MD5
接口响应验签参数字串计算规则:方式3
接口数据传输加密算法:RC4
接口数据传输加密后的编码方式:十六进制
接口参数名传输是否加密:加密
接口参数值传输是否加密:加密
接口响应数据加密:加密
栓Q网络验证系统官网:http://shuanq.cn
当前对接案例作者QQ:775294825
演示站点后台:http://demo.shuanq.cn
账号:admin
密码:123456
*/
在Windows中运行
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
--host | string | 是 | 后台配置-后台地址 是你搭建好栓Q验证系统的站点地址(协议头+域名,如http://demo.shuanq.cn) |
--appId | string | 是 | 后台配置-应用ID 填写你要对接的应用的ID(在后台应用列表可见应用ID) |
--appKey | string | 是 | 后台配置-应用密钥 填写你要对接的应用的密钥(在后台应用列表可见应用密钥) |
--rc4Key | string | 是 | 后台配置-算法密钥-rc4 数据传输加密算法rc4算法的密钥(在接口通信与加密配置里可生成rc4密钥) |
--signatureTimeLimitMinimum | int | 是 | 本地配置-允许时差最小值 允许每次请求的返回值过期时差最小值(一般为90-300,取决你自己多少都可以) |
--signatureTimeLimitMaximum | int | 是 | 本地配置-允许时差最大值 允许每次请求的返回值过期时差最大值(一般为90-300,取决你自己多少都可以) |
--requestApi | string | 是 | 请求接口,你要请求哪个接口地址(不需要带上前缀协议头域名等) |
--requestParams | string | 否 | 请求接口所携带的参数值列表字符串(如a=b&b=c&c=d&d=e) |
--requestParamsSplitString | string | 否 | 请求参数分割字符串,默认值为&符号,假如你传入的是;号且要传入的请求参数是a=b&b=c&c=d&d=e,原本应该执行--requestParams a=b&b=c&c=d&d=e,实际应该执行--requestParams a=b;b=c;c=d;d=e |
--requestParamsKVSplitString | string | 否 | 请求参数键值分割字符串,默认值为=号,假如你传入的是>号且要传入的请求参数是a=b&b=c&c=d&d=e,原本应该执行--requestParams a=b&b=c&c=d&d=e,实际应该执行--requestParams a>b&b>c&c>d&d>e,如果你传入了请求参数分割字符串为;号,那么实际应该执行--requestParams a>b;b>c;c>d;d>e |
.\ShuanQCli-Windows-x64.exe --host=http://demo.shuanq.cn --appId=4 --appKey=ec559db68538fefc3838452ab443d772 --rc4Key=766d8bb7219cff1a3acd4bfd94807f54 --signatureTimeLimitMinimum=90 --signatureTimeLimitMaximum=90 --requestApi=/api/app/get_app_info
.\ShuanQCli-Windows-x64.exe --host=http://demo.shuanq.cn --appId=4 --appKey=ec559db68538fefc3838452ab443d772 --rc4Key=766d8bb7219cff1a3acd4bfd94807f54 --signatureTimeLimitMinimum=90 --signatureTimeLimitMaximum=90 --requestApi=/api/card_app/check
调用单码登录接口,通常要传的参数是card=用户的卡密&machine_code=用户的机器码,假设实际参数和值为:card=shuanq&machine_code=test,在命令后面加上--requestParams选项然后再加一个空格再输入card=shuanq&machine_code=test,即可将参数传给ShuanQCli工具,ShuanQCli工具会帮你处理好签名、加密等,(注意每个选项都是以空格隔开的),如图:
.\ShuanQCli-Windows-x64.exe --host=http://demo.shuanq.cn --appId=4 --appKey=ec559db68538fefc3838452ab443d772 --rc4Key=766d8bb7219cff1a3acd4bfd94807f54 --signatureTimeLimitMinimum=90 --signatureTimeLimitMaximum=90 --requestApi=/api/card_app/check --requestParams card=shuanq&machine_code=test
.\ShuanQCli-Windows-x64.exe --host=http://demo.shuanq.cn --appId=4 --appKey=ec559db68538fefc3838452ab443d772 --rc4Key=766d8bb7219cff1a3acd4bfd94807f54 --signatureTimeLimitMinimum=90 --signatureTimeLimitMaximum=90 --requestApi=/api/card_app/check --requestParams="card=shuanq&machine_code=test"
.\ShuanQCli-Windows-x64.exe --host=http://demo.shuanq.cn --appId=4 --appKey=ec559db68538fefc3838452ab443d772 --rc4Key=766d8bb7219cff1a3acd4bfd94807f54 --signatureTimeLimitMinimum=90 --signatureTimeLimitMaximum=90 --requestApi=/api/card_app/check --requestParams="card:shuanq;machine_code:test" --requestParamsSplitString=";" --requestParamsKVSplitString=":"
在linux中运行
ShuanQCli返回结构字段说明
{
"isException":false,
"requestResult":true,
"responseCode":1,
"responseMessage":"登录成功",
"requestDataSignatureVerify":true,
"requestSafeCodeVerify":true,
"requestDataTimeDifferenceVerify":true,
"decryptResponseData":"{"cardInfo":{"id":33,"card":"ShuanQ","time_type":6,"time_value":1,"addtime":1663291829,"endtime":253370736000,"usetime":1664298731,"status":1,"private_data":[],"token":"7b226964223a33332c22737461727454696d65223a313637333632313230347d","point":0},"surplusTime":{"second":251696854536,"minute":55,"hour":0,"day":2913158},"expireTimeStr":"9999-01-01 00:00:00","moreOtherData":{"api_extra_data":"","request_safe_code":"xcgthkkmbpuvyipgxkgvxmxkwlegzatn"}}"
}
字段名 | 类型 | 说明 |
---|---|---|
isException | bool | 是否异常 |
requestResult | bool | 请求是否成功 |
responseCode | integer | 接口业务码 |
responseMessage | string | 接口返回信息 |
requestDataSignatureVerify | bool | 响应返回值签名验证是否通过 |
requestSafeCodeVerify | bool | 本次请求防劫持验证是否通过 |
requestDataTimeDifferenceVerify | bool | 响应返回值时差验证是否通过 |
decryptResponseData | string(object) | 接口返回的data业务信息(这是解密后的dataJson,可使用这里的数据进行业务逻辑开发) |
使用ShuanQCli工具进行调试开发与对接案例
ShuanQCli工具可不是用来在命令行里面调用调试用的,那可就大材小用并且没有任何用处了,开发ShuanQCli工具是为了给很多开发语言、脚本对接栓Q验证时没有那么困难并且能对接上各种加密验签等功能不需要自己去进行开发,ShuanQCli工具会帮您搞定对接相关的代码逻辑
在Python语言进行调用开发对接
.\ShuanQCli-Windows-x64.exe --host=http://demo.shuanq.cn --appId=4 --appKey=ec559db68538fefc3838452ab443d772 --rc4Key=766d8bb7219cff1a3acd4bfd94807f54 --signatureTimeLimitMinimum=90 --signatureTimeLimitMaximum=90 --requestApi=/api/app/get_app_info
import os
import json
# 使用ShuanQCli工具以下是后台 接口通信与加密配置 需要设置的东西:
# 接口传输验签方式:MD5
# 接口响应验签方式:MD5
# 接口响应验签参数字串计算规则:方式3
# 接口数据传输加密算法:AES
# 接口数据传输加密后的编码方式:十六进制
# 接口参数名传输是否加密:加密
# 接口参数值传输是否加密:加密
# 接口响应数据加密:加密
# 栓Q网络验证系统官网:http://shuanq.cn
# 当前对接案例作者QQ:775294825 | 3333337752
#
# 演示站点后台:http://demo.shuanq.cn
# 账号:admin
# 密码:123456
ShuanQCliAppPath = 'C:\\Users\\Administrator\\Desktop\\ShuanQCli-Windows-x64.exe' # ShuanQCli.exe文件路径
ShuanQ_Host = "http://demo.shuanq.cn" # 后台配置-站点地址
ShuanQ_AppId = "4" # 后台配置-应用ID-在应用列表获得
ShuanQ_AppKey = "ec559db68538fefc3838452ab443d772" # 后台配置-应用密钥-在应用列表获得
ShuanQ_Rc4Key = "766d8bb7219cff1a3acd4bfd94807f54" # 后台配置-算法密钥aes-在 接口通信与加密配置 里生成
ShuanQ_SignatureTimeLimitMinimum = 90 # 本地配置-允许请求时差最小值-单位为秒
ShuanQ_SignatureTimeLimitMaximum = 90 # 本地配置-允许请求时差最大值-单位为秒
# 公共命令行头
commonCommandHeader = ShuanQCliAppPath + " --host=" + ShuanQ_Host + " --appId=" + ShuanQ_AppId + " --appKey=" + ShuanQ_AppKey + " --rc4Key=" + ShuanQ_Rc4Key + " --signatureTimeLimitMinimum=" + ShuanQ_SignatureTimeLimitMinimum.__str__() + " --signatureTimeLimitMaximum=" + ShuanQ_SignatureTimeLimitMaximum.__str__()
command = commonCommandHeader + " --requestApi=/api/app/get_app_info" # 获取应用信息的命令
result = os.popen(command).read() # 调用命令执行并获取执行结果
print("调用获取应用信息结果:" + result) # 打印结果
def cardLogin():
command = commonCommandHeader + " --requestApi=/api/card_app/check --requestParams=\"card=shuanq&machine_code=test\"" # 单码登录的命令
result = os.popen(command).read() # 调用命令执行并获取执行结果
if result == "":
print("调用命令失败")
return
print("调用单码登录信息结果:" + result) # 打印结果
resultJson = json.loads(result) # 解析JSON
if resultJson["isException"]: # 出现异常
print("调用命令出现异常")
return
if not resultJson["requestResult"]: # 响应数据验签检测未通过
print("请求接口失败")
return
if resultJson["responseCode"] != 1: # 接口业务码响应非成功-将服务器返回信息提示
print(resultJson["responseMessage"])
return
if not resultJson["requestDataSignatureVerify"]: # 响应数据验签检测未通过
print("响应数据验签失败")
return
if not resultJson["requestSafeCodeVerify"]: # 防劫持验证检测未通过
print("检测到数据被劫持篡改了")
return
if not resultJson["requestDataTimeDifferenceVerify"]: # 响应数据检测验证不通过
print("响应数据异常,与服务器时差相差过多")
return
dataJson = resultJson["decryptResponseData"] # 到原始未加密的dataJson数据
print("解密后的dataJson:" + dataJson)
responseDataJson = json.loads(dataJson) # 获取解密后的data json对象
expireTimeStr = responseDataJson["expireTimeStr"] # 卡密到期时间字符串
cardTimeType = responseDataJson["cardInfo"]["time_type"] # 得到卡密时长类型
cardTimeValue = responseDataJson["cardInfo"]["time_value"] # 得到卡密时长值
cardToken = responseDataJson["cardInfo"]["token"] # 得到本次登录的token
print("登录成功,到期时间:" + expireTimeStr)
cardLogin() # 调用单码登录方法
在其他语言、脚本进行调用开发对接
修改于 2023-01-16 16:20:43