阅读文档(https://partner.open-douyin.com/docs/resource/zh-CN/local-life/develop/OpenAPI/preparation/massages.push) 中可以获取一段demo代码
import org.apache.commons.codec.digest.DigestUtils; // sha1算法库
// 获取消息中body
String str, wholeStr = "";
try{
BufferedReader br = re.getReader();
while((str = br.readLine()) != null){
wholeStr += str;
}
} catch (Exception e){
log.warn("获取请求内容失败");
}
// 获取请求头中的加签信息
String signature = re.getHeader("X-Douyin-Signature");
String data = appSecret + wholeStr;
String sign = DigestUtils.sha1Hex(data);
if(!sign.equals(signature)){
log.error("验签失败");
}
转成PHP代码后,总是无法实现验签,不知道问题出在哪里
<?php
namespace Ziyoren\DouyinApi;
use support\Log;
class Message
{
/**
* 验证签名
* @param string $signature header中传入的签名X-Douyin-Signature
* @param string $body httpBody
* @return bool
* @throws \Exception
*/
public static function verifySignature($signature, $body)
{
$config = new Config();
// appSecret是你的应用密钥,需要从抖音开放平台获取
$appSecret = $config->getAppSecret();
// 将appSecret与body内容拼接后进行sha1哈希处理
$sign = sha1( $appSecret . $body );
// 验证签名是否匹配
if ($sign !== $signature) {
$msg = '验签失败';
Log::error($msg, compact('signature', 'sign', 'body'));
throw new \Exception($msg, 403);
}
// 如果验签通过,则继续处理业务逻辑
return true;
}
}调用示例
$wholeStr = file_get_contents('php://input');
Message::verifySignature($header['x-douyin-signature'], $wholeStr);请各位前辈指导一下
