百度小程序对接PHP需注意三点:JSON请求体需用php://input读取而非$_POST;文件上传须配置合法域名且用swan.uploadFile;swan.login的code换session_key必须HTTPS GET调用百度开放平台接口。
swan.request 默认发送的是 JSON 数据,PHP 需主动读取原始 body百度小程序调用 swan.request 时,若未显式设置 header['Content-Type'],默认会以 application/json 发送。此时 PHP 不会自动解析到 $_POST,必须用 file_get_contents('php://input') 手动读取原始请求体。
$_POST 会为空数组,这是最常见踩坑点header: {'Content-Type': 'application/x-www-form-urlencoded'},PHP 才会填充 $_POST
if ($_SERVER['CONTENT_TYPE'] === 'application/json') {
$raw = file_get_contents('php://input');
$data = json_decode($raw, true);
if (json_last_error() !== JSON_ERROR_NONE) {
http_response_code(400);
echo json_encode(['error' => 'Invalid JSON']);
exit;
}
} else {
$data = $_POST;
}
swan.ge
tSystemInfo 中的 platform 和 version 字段做基础校验虽然百度未强制要求接口鉴权,但生产环境建议对请求来源做轻量识别,避免被恶意模拟。可从 swan.getSystemInfo 获取设备信息,随请求一起传入,PHP 端简单校验是否为合法的小程序平台。
swan.getSystemInfo({success: res => swan.request({data: {...res, ...myData}})})
$data['platform'] === 'swan',并可选校验 $data['version'] 是否符合最低支持版本userAgent 做判断,百度小程序 WebView 的 UA 可能被覆盖或不可靠swan.uploadFile,PHP 处理逻辑和普通表单一致,但路径需适配百度域名白名单百度小程序上传文件必须使用 swan.uploadFile,且目标 URL 必须在百度后台配置的「request 合法域名」和「uploadFile 合法域名」中,否则前端直接报错 fail abort 或 fail url not in domain list。
$_FILES 中,和普通 HTML 表单无异$_FILES['file']['error'] === UPLOAD_ERR_OK,再处理临时文件name="file[]"),一次只能传一个 filePath
$file = $_FILES['file'] ?? null;
if (!$file || $file['error'] !== UPLOAD_ERR_OK) {
http_response_code(400);
echo json_encode(['error' => 'Upload failed']);
exit;
}
$ext = pathinfo($file['name'], PATHINFO_EXTENSION);
$target = '/path/to/upload/' . uniqid() . '.' . strtolower($ext);
if (move_uploaded_file($file['tmp_name'], $target)) {
echo json_encode(['url' => 'https://yourdomain.com/' . basename($target)]);
}
swan.login code 换取 session_key 需调用百度开放平台接口,PHP 必须用 https + GET 请求前端调用 swan.login 获取 code 后,需由 PHP 向百度开放平台发起请求换取用户凭证,地址是 https://openapi.baidu.com/rest/2.0/smartapp/user/login,参数必须用 GET 传,不能 POST。
code、grant_type=authorization_code、client_id(即百度小程序 AppKey)、client_secret
session_key 和 openid,可用于后续解密手机号等敏感数据
Content-Type: application/json,只认 query string$url = 'https://openapi.baidu.com/rest/2.0/smartapp/user/login?' . http_build_query([
'code' => $code,
'grant_type' => 'authorization_code',
'client_id' => 'your_app_key',
'client_secret' => 'your_app_secret'
]);
$response = file_get_contents($url);
$result = json_decode($response, true);
百度小程序对接 PHP 的关键不在“怎么写”,而在于清楚每个环节的数据流向和协议约束——尤其是 JSON 请求体不进 $_POST、文件上传域名白名单、登录换 token 必须 GET 这三点,漏掉任一都卡死在第一步。
# php
# html
# js
# 前端
# json
# app
# 小程序
# session
# 后端
# ai
# 百度
# 敏感数据
# String
# Error
# Token
# 接口
# input
# webview
# http
# https
# 开放平台
# 文件上传
# 不支持
# 表单
# 的是
# 这是
# 尤其是
# 才会
# 要用
# 可选
# 三点
相关栏目:
【
Google疑问12 】
【
Facebook疑问10 】
【
网络优化76771 】
【
技术知识130152 】
【
IDC云计算60162 】
【
营销推广131313 】
【
AI优化88182 】
【
百度推广37138 】
【
网站推荐60173 】
【
精选阅读31334 】
相关推荐:
c++ std::future和std::promise c++线程间通信【教程】
Win11怎么更改鼠标指针方案_Windows11自定义鼠标光标样式与大小
Win11快速助手怎么用_Win11远程协助连接教程【工具】
c++中如何计算坐标系中两点间距离_c++勾股定理求距离
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
Python与Docker容器化部署实战_镜像构建与CI/CD流程
Win11怎么更改输入法顺序_Win11调整语言首选位置【设置】
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
如何高效删除 NumPy 二维数组中所有元素相同的列
php中常量能用::访问吗_类常量与作用域操作符使用场景【汇总】
Win11怎么设置默认PDF阅读器 Win11修改PDF打开方式【步骤】
Windows10电脑怎么设置防火墙出站规则_Win10禁止程序联网教程
MAC怎么一键隐藏桌面所有图标_MAC极简模式切换与终端指令【方法】
windows如何备份注册表_windows导出和导入注册表文件教程
Windows10如何更改日期格式_Win10区域设置短日期修改
Win11怎么查看已连接wifi密码 Win11查已连wifi密码步骤【教程】
Windows怎样关闭开始菜单广告_Windows关闭开始菜单广告设置【步骤】
Win11怎么查看电脑配置_Win11硬件配置详细查询方法【详解】
如何在JavaScript中动态拼接PHP的base_url与前端变量
Win10怎样卸载自带Edge_Win10卸载Edge浏览器步骤【教程】
VSC里PHP变量未定义报错怎么解决_错误抑制技巧【解答】
如何使用Golang实现聊天室消息存档_存储聊天记录到文件
Win11怎么打开旧版计算器_Win11恢复传统计算器应用【详解】
如何用列表一次性对 DataFrame 的指定列应用字典映射
c++中的可变参数模板(variadic templates)怎么用_c++模板编程黑魔法【C++11】
c++的位运算怎么用 与、或、异或、移位操作详解【底层知识】
PHP 中如何在函数内持久修改引用变量所指向的目标
Windows10无法连接到Internet_Win10网络重置命令详解
Win11怎么激活Windows10_Win11激活Win10系统方法【步骤】
Windows 11如何查看系统激活密钥_Windows 11使用CMD或PowerShell命令找回Product Key
本地php环境出现502错误_nginx或apache502badgateway解决技巧【解答】
PythonWeb前后端整合项目教程_FastAPIReact完整实例
Mac电脑进水了怎么办_MacBook进水后紧急处理方法【必看】
php中作用域操作符能访问私有静态属性吗_访问权限限制【指南】
Win11怎么设置指纹解锁 Win11笔记本录入指纹登录【教程】
短链接怎么用php递归还原_多层加密链接的处理法【详解】
php嵌入式日志记录怎么实现_php将硬件数据写入本地日志文件【指南】
微信JSAPI支付回调PHP怎么接收_处理JSAPI异步通知数据方法【指南】
php中self::能调用子类重写的方法吗_静态绑定与重写关系【介绍】
如何使用Golang进行HTTP服务性能测试_测量吞吐量和延迟
WindowsUSB驱动安装异常怎么办_USB驱动重建与恢复教程
短链接怎么自定义还原php_修改解码规则适配需求【汇总】
Python对象比较与排序_集合使用说明【指导】
Win10怎样设置多显示器_Win10多显示器扩展设置【攻略】
如何用正则与预处理高效拦截带干扰符的恶意域名
Win11视频默认播放器怎么改_Win11关联第三方播放器【步骤】
如何用正则表达式精确匹配最多含一个换行符的起止片段
Python与GPU加速技术_CUDA与Numba高性能计算实践
Win11怎么开启智能存储_Windows11存储感知自动清理文件
Win11如何设置省电模式 Win11开启电池节电功能【优化】
2025-12-31
致胜网络推广营销网专注海外推广十年,是谷歌推广.Facebook广告全球合作伙伴,我们精英化的技术团队为企业提供谷歌海外推广+外贸网站建设+网站维护运营+Google SEO优化+社交营销为您提供一站式海外营销服务。