1. 什么是百度文心一言API接口
百度文心一言API接口指的是一种可以获取一些励志、情感等文本的API接口,用户可以通过请求该API接口获取到一些包含励志、情感等文本的json格式的数据,可以应用在个人博客、社交网络、微信小程序等各种需求中。
2. 请求签名与验签
2.1 请求签名
在请求该API接口时,需要对请求参数进行签名,以保证接口请求的安全性。下面是PHP代码实现百度文心一言API接口的请求签名的示例代码:
function sign($params, $appSecret) {
ksort($params);
$arr = [];
foreach($params as $key => $value) {
array_push($arr, $key."=".$value);
}
$str = implode("&", $arr);
$sig = md5($str.$appSecret);
return strtoupper($sig);
}
上述代码实现了将请求参数按照字典序进行排序,然后拼接成字符串并进行MD5加密,接着将加密后的字符串转为大写字母,最终得到签名字符串。
2.2 验签
接口请求方在得到接口返回结果后,需要对返回结果进行验签,以确保接口返回的数据是接口服务器返回的合法数据。下面是PHP代码实现百度文心一言API接口的验签的示例代码:
function checkSign($data, $appSecret) {
$sig = $data["sig"];
unset($data["sig"]);
ksort($data);
$arr = [];
foreach($data as $key => $value) {
array_push($arr, $key."=".$value);
}
$str = implode("&", $arr);
$checkSig = md5($str.$appSecret);
return strtoupper($sig) === strtoupper($checkSig);
}
上述代码实现了将返回结果的sig参数取出,然后将其他参数按照字典序排序后,拼接成字符串并进行MD5加密,最终将加密后的字符串转为大写字母,与sig参数进行比较,判断是否验签通过。
3. PHP代码实现百度文心一言API接口的请求签名和验签
下面是PHP代码实现百度文心一言API接口的请求签名和验签的完整代码:
function sign($params, $appSecret) {
ksort($params);
$arr = [];
foreach($params as $key => $value) {
array_push($arr, $key."=".$value);
}
$str = implode("&", $arr);
$sig = md5($str.$appSecret);
return strtoupper($sig);
}
function checkSign($data, $appSecret) {
$sig = $data["sig"];
unset($data["sig"]);
ksort($data);
$arr = [];
foreach($data as $key => $value) {
array_push($arr, $key."=".$value);
}
$str = implode("&", $arr);
$checkSig = md5($str.$appSecret);
return strtoupper($sig) === strtoupper($checkSig);
}
$appKey = "your_app_key";
$appSecret = "your_app_secret";
$url = "http://api.xiaoi.com/robot/ask.do";
$params = [
"platform" => "custom",
"userId" => "test",
"question" => "你好",
"type" => "0",
"appKey" => $appKey,
"timestamp" => time(),
];
$params["sig"] = sign($params, $appSecret);
$data = file_get_contents($url."?".http_build_query($params));
$data = json_decode($data, true);
if(checkSign($data, $appSecret)) {
// 验签通过,处理接口返回结果
} else {
// 验签不通过,忽略接口返回结果
}
上述代码中,$params数组是请求参数,其中包含了appKey、timestamp和sig三个参数。appKey是在创建机器人时分配的,timestamp是当前时间戳(秒),sig是请求参数的签名。sign()函数实现了请求签名,checkSign()函数实现了验签。file_get_contents()函数发送HTTP GET请求,将接口返回的结果赋值给$data变量,然后使用json_decode()函数解析接口返回的json格式数据。
4. 总结
本文介绍了PHP代码实现百度文心一言API接口的请求签名和验签的实现方法。请求签名和验签都是为了保证接口的安全性,防止数据被篡改或者伪造。这两个过程都需要对参数进行排序、拼接和加密等操作,需要仔细编写代码,并严格按照接口文档要求实现。通过本文的介绍,读者可以掌握PHP代码实现百度文心一言API接口的请求签名和验签的方法,可以在实际应用中使用该API接口,提高应用的用户体验。