跳转到主内容
极星编程网:以代码为星,赴技术山海!

php怎么调用美团AI门店识别_php如何通过照片识别商户名称地址

美团AI门店识别API无官方PHP SDK,需手动构造HMAC-SHA256签名、multipart/form-data请求(file字段上传)、严格校验图片格式/尺寸/时间戳,返回shop_name和address可能为空,confidence<0.5应丢弃。 美团AI门店识别API没有官方PHP SDK 直接调用美团开放平台的门店识别接口,得自己写HTTP请求,不能靠
composer require meituan/ai-sdk
这种东西——它根本不存在。美团只提供了Java、Python的示例代码,PHP得手动拼签名、构造
multipart/form-data
请求体、处理返回JSON。 常见错误现象:
401 Unauthorized
(签名错)、
400 Bad Request
(图片没传对字段)、
500 Internal Error
(图片太大或格式不被支持)。 必须用
POST
方法,且
Content-Type
不能设成
application/json
,得让cURL自动处理边界(即不显式设置
Content-Type
头) 图片文件必须通过
file
字段上传,不是
image
、不是
photo
,就是
file
签名参数
timestamp
和
nonce
要和服务端时间误差在5分钟内,否则拒绝 图片限制:JPG/PNG,≤5MB,宽高≥100px,推荐尺寸1080×1920以内 签名生成必须用HMAC-SHA256 + URL编码拼接 美团要求把所有请求参数(含
app_key
、
timestamp
、
nonce
、
sign_method
)按字典序排序后,用
=
连接键值、
&
连接参数对,再对整个字符串做
HMAC-SHA256
,最后Base64编码。漏掉URL编码任意一个参数值,签名就失效。 容易踩的坑:
http_build_query()
默认不编码
+
号,但美团要求空格转
%20
而非
+
;
urlencode()
又会把
/
、
:
也编码,而美团只要求对参数值做
urlencode()
,不包括键名。 立即学习 “ PHP免费学习笔记(深入) ”; PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 正确做法:遍历参数数组,对每个
$value
单独
urlencode()
,再拼
"{$key}={$value}"
sign_method
固定填
HMAC-SHA256
,大小写敏感 生成签名前,确保
app_secret
是原始密钥,没被base64_decode过、也没被trim过空格 cURL上传图片必须用CURLFile(PHP 5.5+) 老式
@/path/to/file
语法在PHP 5.6+已被废弃,且在某些cURL版本里会直接导致
400
。必须用
CURLFile
对象,否则美团服务端解析不到
file
字段。 典型错误:
Notice: Use of undefined constant CURLFile
(PHP版本太低)、
curl_setopt(): CURLOPT_POSTFIELDS with array containing string
keys requires
CURLFile
for files(混用了字符串键和@语法)。 检查PHP版本:
php -v
≥ 5.5,推荐7.4+ 构造上传字段:
'file' => new CURLFile(realpath('/tmp/photo.jpg'), 'image/jpeg')
不要用
file_get_contents()
读图再塞进数组——这传的是二进制内容,不是文件句柄,服务端收不到MIME头 如果服务器禁用了
curl_file_create()
,就用
new CURLFile(...)
,别试图绕过 返回结果里
shop_name
和
address
可能为空 美团识别不是OCR通用引擎,它是专为门店招牌优化的模型。如果照片里没有清晰招牌、文字太小、反光、角度倾斜超过30度,或者商户名本身没出现在招牌上(比如只有Logo),
shop_name
大概率是
null
或空字符串。地址字段更是依赖招牌上的完整信息,缺字、模糊、多行堆叠都会导致识别失败。 真实使用场景中,约35%的合格照片(尺寸/格式合规)仍无法提取出有效地址,
confidence
低于0.6的基本不可信。 务必检查返回里的
code
字段:200 ≠ 成功,得看
data.result.shop_name
是否非空
data.result.confidence
低于0.5时,建议丢弃结果,别硬用 没有
address
不等于没识别到店,有时
shop_name
准确但地址字段缺失,可结合地图逆地理编码兜底 别在循环里高频调用——QPS限制严格,超限直接封IP段,且无预警 事情说清了就结束

相关文章