鸿蒙端app集成qq分享sdk,需要按QQ的签名规则拼接, 详见 QQ互联分享签名规则文档。
假设分享参数如下:
- appid:222222
- nonce:1234
- ts:1618924373
- 分享内容:{"msg_style": 0, "title":"标题", "summary":"内容", "brief":"互联分享","url":"www.qq.com","picture_url":"https://www.qq.com…
按照规则拼出来的签名原文示例:POSTconnect.qq.com/share?appid=222222&nonce=1234&ts=1618924373&{"msg_style": 0, "title":"标题", "summary":"内容", "brief":"互联分享", "url":"www.qq.com", "picture_url":"www.qq.com/picture.png…
计算签名
参见如下代码片段,在ArkTS中先进行hmac|sha1加密,再base64编码。
import cryptoFramework from "@ohos.security.cryptoFramework";
import buffer from '@ohos.buffer';
import { util } from '@kit.ArkTS';
const appkey = 'fakeAppKey';
const srcStr = 'POSTconnect.qq.com/share?appid=222222&nonce=1234&ts=1618924373&{"msg_style": 0, "title":"标题", "summary":"内容", "brief":"互联分享", "url":"https://www.qq.com", "picture_url":"https://www.qq.com/picture.png"}';
// hmac加密
const buffer_key = new Uint8Array(buffer.from(appkey).buffer);
const buffer_message = new Uint8Array(buffer.from(srcStr).buffer);
const symKeyGenerator = cryptoFramework.createSymKeyGenerator("HMAC");
const symKey = symKeyGenerator.convertKeySync({ data: buffer_key });
const mac = cryptoFramework.createMac("SHA1");
mac.initSync(symKey);
mac.updateSync({ data: buffer_message});
const macOutput = mac.doFinalSync();
const hmacValue = buffer.from(macOutput.data).toString('hex');
console.log('hmacValue:', hmacValue);
// base64编码
const base64Helper = new util.Base64Helper();
const base64Value: string = base64Helper.encodeToStringSync(macOutput.data)
console.log('base64Value:', base64Value); // Ngyk0JS5pQR8ffygeeMHFUNFQQA=
输出结果:Ngyk0JS5pQR8ffygeeMHFUNFQQA=