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