哎,你不得不说的问题 讯飞的文档写的让人眼花缭乱,我是这样的,有可能是我的能力不足,这次对接真的是让我大开眼界
上面这个地址先拿到 APPID、APISecret、APIKey
点击“立即购买”,个人认证也好企业认证也罢,花钱购买也行,先让这里有点数可用
点击这里的文档,去查看接口文档
不用看demo 了 根本没有php 的
第一个困住我的点是签名,我直接放代码了
$query = [
'header'=>['app_id'=>"自己的appid"],
"parameter"=>[
"chat"=>["domain"=>"general", "width"=>换成你自己宽度, "height"=>换成你自己的高度]
],
"payload"=>[
"message"=>["text"=> [["role"=>"user", "content"=>"用户输入的内容"]]]
]
];
// 获取当前时间戳并格式化为RFC1123 时间不用加8,获取的时间是啥就是啥
$rfc1123_date = gmdate('D, d M Y H:i:s \G\M\T');
//dd($rfc1123_date);
$tmp = "host: " . "spark-api.cn-huabei-1.xf-yun.com" . "\n";
$tmp.= "date: " . $rfc1123_date . "\n";
$tmp.= "POST " . "/v2.1/tti" . " HTTP/1.1";
$hash_hmac = hash_hmac('sha256',$tmp,"你自己的APISecret",true);
$signature = base64_encode($hash_hmac);
$authorization =base64_encode('api_key="你自己的appid", algorithm="hmac-sha256", headers="host date request-line", signature="'.$signature.'"');
$apiUrl = 'http://spark-api.cn-huabei-1.xf-yun.com/v2.1/tti?authorization='.$authorization.'&date='.$rfc1123_date.'&host=spark-api.cn-huabei-1.xf-yun.com';
$apiUrl =str_replace(" ",'%20',$apiUrl);//这里如果不转换,请求永远是失败的
$ch = curl_init();//初始化curl
curl_setopt($ch, CURLOPT_URL,$apiUrl);//抓取指定网页
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_POST, 1);//post提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($query));
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Content-Type: application/json'));// 文本提交方式,必须声明请求头
$data = curl_exec($ch);//运行curl;
return json_decode($data,true);
注意
1.你自己签名写完后 肯定会测试 (就是我代码 的变量 $apiUrl 出来的结果),这个url 请求是 POST 不要搞成 get.
2.with 和 height 必须是 int 用字符串是会报错的
3.获取的 采用RFC1123格式 时间 是不用 变的,获取到什么就是什么,不要加 8小时
4.请求的时候 $apiUrl 是需要 替换一下%20。
下面是我感觉文档的问题,写了2天才 搞通这么一个接口:
1.签名文档跳转到同一鉴权,但是内容一样
2.不知道接口到底是post 还是get 请求
3.用的时间是 北京时间 还是 utc 时间
4.我第一次见参数需要换行的 ,我可能孤陋寡闻了
经过我的反应,他们已经改了一部分,但是我之前对的 智能ppt 生成 和图片生成的鉴权竟然不一样。