qing.call('validate', {
'type': 'password',
'lightAppId': '',
'prompt': '为保证数据安全',
'ignoreYzjPwd': true,
'success': function (result) {
console.info(result.data)
}
})
参数说明
type:验证方式,包括以下三种,目前仅支持password
登录密码:type = password
指纹:type = touchID,如果用户未开启TouchID,则默认使用登录密码验证(建议iOS优先使用此验证方式)
手势密码:type = gesture,如果用户未开启手势密码,则默认使用登录密码验证
lightAppId:轻应用id
prompt:自定义提示语,最终显示会累加云之家提示,例如:为保证数据安全,请输入云之家登录密码
ignoreYzjPwd:type指定为touchID后是否不做降级处理,错误码13403。
返回值
{
success: true or false 是否成功(String)
error: 错误信息(String)
errorCode: 错误码(int) //13400:用户取消验证
//13401:验证不成功
//13402:获取ticket失败
data:{
'ticket':'成功后返回轻应用ticket'
}
}
通过跳转到轻应用的方式,可以由客户端自动获取ticket并附加在跳转到的url上, 例如:
qing.call('gotoLightApp', {
appId: '10106'
})
关于 gotoLightApp 的完整用法,请点击左侧菜单的 页面跳转 章节。
在js中, 也可以通过 qing.call('getTicket') 取得ticket,此方法需要后端接口配合(接口的实现方法参考下一节)。
方法一:
qing.call('getTicket', {
signUrl: '/path/to/myapp/sign',
signMethod: 'post',
success (e) {
alert(e.data.ticket)
},
error (error) {
alert(error)
}
})
signUrl是获取签名的接口,各个轻应用的后端应该提供这样一个接口,这个接口会接收到一个名为url参数(post)
返回结果的格式必须如下:
{
"success": true,
"data": {
appId: "",
timeStamp: "",
nonceStr: "",
signature: ""
}
}
方法二:
如果你通过别的方式(例如页面直出)拿到了签名信息,也可以像下面的例子直接传入。
qing.call('getTicket', {
timeStamp:'1530867948317',
signature:'7qaScdppiMKuDoYadUqbZhlZhgw=',
appId:'101091520',
nonceStr:'0.7057841489531929',
success (e) {
alert(e.data.ticket)
},
error (error) {
alert(error)
}
})
url: /authorization/jsapi/generateticket
method: post
body: accesstoken=xxxxx
return: {success:true,errorCode:0,error:"",data:{jsapiticket:xxxx,expires_in:600}}//expires_in单位秒
public JSONObject demo(String appId, String secret, String url){
JSONObject data = new JSONObject();
try {
String timestamp = String.valueOf(System.currentTimeMillis());
String nonceStr = String.valueOf(Math.random());
data.put("appId", appId);
data.put("timestamp",timestamp);
data.put("nonceStr",nonceStr);
// TODO 此处请参考第二步文档
String jsapiticket = getJsapiTicket(appId, appSecret);
String signature = shaResult(nonceStr, timestamp, url, jsapiticket);
data.put("signature",signature);
data.put("jsapiticket", jsapiticket);
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
private static String shaResult(String noncestr,String timestamp,String url,String ticket) throws NoSuchAlgorithmException, InvalidKeyException {
String serversignature = "";
try {
byte[] text;
StringBuilder baseline = new StringBuilder();
baseline = baseline.append("noncestr=").append(noncestr).append("timestamp=").append(timestamp).append("url=").append(url);
byte[] keyBytes = ticket.getBytes("UTF-8");
SecretKey key = new SecretKeySpec(keyBytes, "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(key);
text = baseline.toString().getBytes("UTF-8");
serversignature = new String(Base64.encodeBase64String(mac.doFinal(text)));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return serversignature;
}