使用情景
安卓手机调用腾讯ocr识别文字
效果展示
难点
签名方法 v3 (TC3-HMAC-SHA256)
代码讲解
- 导入java类
importClass(java.nio.charset.Charset);
importClass(java.nio.charset.StandardCharsets);
importClass(java.security.MessageDigest);
importClass(java.text.SimpleDateFormat);
importClass(java.util.TimeZone);
importClass(javax.crypto.Mac);
importClass(javax.crypto.spec.SecretKeySpec);
- 初始化所有的参数,
SECRET_ID
和SECRET_KEY
请改为自己的.
let SECRET_ID = "XXX";
let SECRET_KEY = "XXX";
let service = "ocr";
let host = "ocr.tencentcloudapi.com";
let region = "ap-guangzhou";
let action = "GeneralAccurateOCR";
let version = "2018-11-19";
let algorithm = "TC3-HMAC-SHA256";
let UTF8 = StandardCharsets.UTF_8;
const timestamp = getTime();
- 识别文字
let dataList = ocr(imgPath);
- 显示识别的数据
showData(dataList, imgPath, "腾讯");
签名计算过程
- 拼接规范请求串
let hashedRequestPayload = sha256Hex(payload);
let canonicalRequest =
httpRequestMethod +
"\n" +
canonicalUri +
"\n" +
canonicalQueryString +
"\n" +
canonicalHeaders +
"\n" +
signedHeaders +
"\n" +
hashedRequestPayload;
- 拼接待签名字符串
let credentialScope = date + "/" + service + "/" + "tc3_request";
let hashedCanonicalRequest = sha256Hex(canonicalRequest);
let stringToSign = algorithm + "\n" + timestamp + "\n" + credentialScope + "\n" + hashedCanonicalRequest;
- 计算签名
let secretDate = hmac256(java.lang.String("TC3" + SECRET_KEY).getBytes(UTF8), date);
let secretService = hmac256(secretDate, service);
let secretSigning = hmac256(secretService, "tc3_request");
let signature = byteArrayToHexString(secretSigning);
signature = hmac256(secretSigning, stringToSign);
signature = byteArrayToHexString(signature);
- 拼接 Authorization
let authorization =
algorithm +
" " +
"Credential=" +
SECRET_ID +
"/" +
credentialScope +
", " +
"SignedHeaders=" +
signedHeaders +
", " +
"Signature=" +
signature;
完整项目
微信公众号 AutoJsPro教程
QQ群
747748653