第二步:服务端获取 jsapi_ticket
请求格式说明
请求方式: GET (HTTPS)
请求头部:
x-wlk-Authorization: access_token
请求地址:
https://open.welink.huaweicloud.com/api/auth/v1/jstickets
请求参数: 无
响应格式说明
返回结果:
{
"code": "0",
"message": "ok",
"jstickets": "A593A60B5594D4A157AE85E05DE4C77E0517CEFBE2337522E5386D2A3E9BF7CD"
}
返回参数说明:
参数 | 说明 |
---|---|
code | 数据正常返回“0”,如果发生错误,会返回对应的错误码 |
message | 返回信息,包括接口请求发生错误时的详细信息 |
jstickets | JSAPI 凭证 |
错误码说明:
code | message |
---|---|
41600 | token invalid,to get jstickets Exception! |
第三步:服务端计算签名信息生成 signature
参数说明
参数 | 说明 |
---|---|
jsapi_ticket | jstickets |
noncestr | 随机数 |
timestamp | 签名的时间戳 |
url | 当前页面的路径 |
使用说明
1、将所有参数拼接成一个字符串进行 sha1 加密,参考下文示例,获得签名信息。
2、url 是完整的 url,包括 http(s)
协议部分和‘?’后面的 Get 参数部分,但不包括‘#’后面的内容。生成签名用的 url 需要对页面 url 的 query 部分做一次 urldecode。
例如,如果 url 是
http://abc.com?url=http%3A%2F%2Fabc.com%2somewhere
那么生成签名用到的 url 应该是对原 url 做过 decode 的 url,即
http://abc.com?url=http://abc.com/somewhere
代码示例
Java 示例:
public static String sign(String jsticket, String nonceStr, long timeStamp, String url) throws OApiResultException {
String urldecode = java.net.URLDecoder.decode(url, "UTF-8");
String plain = "jsapi_ticket=" + jsticket + "&noncestr=" + nonceStr + "×tamp=" + String.valueOf(timeStamp)
+ "&url=" + urldecode;
try {
MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
sha256.reset();
sha256.update(plain.getBytes("UTF-8"));
return bytesToHex(sha256.digest());
} catch (NoSuchAlgorithmException e) {
throw new OApiResultException(e.getMessage());
} catch (UnsupportedEncodingException e) {
throw new OApiResultException(e.getMessage());
}
}
Python 示例:
import hashlib
from time import time
def sign(jsticket, nonceStr, url, timeStamp):
plain = 'jsapi_ticket=' + jsticket +\
'&noncestr=' + nonceStr +\
'×tamp=' + str(timeStamp) +\
'&url=' + url
sha = hashlib.sha256()
sha.update(plain.encode('utf-8'))
return sha.hexdigest()
if __name__ == '__main__':
timeStamp = "1562132124"
jsticket = "7327E371B4076F02AD2E95A24536640F5E171B1A5A7D2AA25FD4B79AA850B39A1C8B1CAF44331A0DE57D6188DC3A85F6FBCCA9F17DF45AFDA307FB55665D"
nonceStr = "2019-04-09"
url = "http://grapejuice.vhooper.myhuaweicloud.com/h5/jsonline/"
print('signature is :' + sign(jsticket, nonceStr, url, timeStamp))
>> signature is :0ae401929f84c98d68ec794ca6fd7b893800cf21ac516892b501db9aa3ba7bfe
第四步:前端 H5 页面使用 HWH5.config
方法进行签名校验
- 签名校验,将 appId,timeStamp,nonceStr,signature 传递到前端 H5 页面,在前端使用 HWH5.config 接口对使用并需鉴权的 jsapi 进行签名校验。具体参考检验注册