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

Yii框架微信小程序怎么对接_Yii框架移动端API开发【教程】

Yii对接微信小程序的关键是提供符合CORS、HTTPS、JSON、无session依赖的REST API;需配置SSL证书、精确设置Access-Control-Allow-Origin、禁用session改用Bearer Token鉴权、对齐URL路由规则、统一JSON响应格式并捕获异常返回标准结构。 Yii 框架本身不区分客户端类型, 微信 小程序对接的关键不是“Yii 怎么适配小程序”,而是「Yii 怎么提供稳定、安全、可被小程序合法调用的 REST API」。只要接口符合 CORS、HTTPS、JSON 返回、无 session 依赖等基本约束,小程序就能正常通信。 小程序请求被拦截:CORS 和 HTTPS 强制要求 微信小程序 强制要求所有
wx.request
的目标域名必须在「小程序后台 → 开发管理 → 服务器域名」中白名单备案,且协议必须是
https
。Yii 服务端若跑在
http://localhost
或未配 SSL 的 Nginx 上,请求直接失败,控制台看不到任何网络日志——这是最常卡住的第一步。 确保 Web 服务器已配置有效 SSL 证书(Let’s Encrypt 可免费获取) Yii 不需要额外开启 CORS,但需在响应头中明确允许小程序域名:
Access-Control-Allow-Origin: https://your-miniprogram-domain.com
(不能写
*
,小程序不认) 若用 Nginx,可在 location 块加:
add_header 'Access-Control-Allow-Origin' 'https://your-miniprogram-domain.com';
小程序 POST 请求默认带
Content-Type: application/json
,Yii 必须启用 JSON 解析器,否则
Yii::$app->request->post()
为空 登录态如何传递:不用 Cookie,改用 token 小程序没有 Cookie 上下文,
yii\web\User
默认依赖 session cookie,直接复用会导致每次请求都视为未登录。必须切换为无状态鉴权。 禁用 session:在
config/web.php
中移除或注释掉
'session'
组件配置 改用 Bearer Token:用户登录后返回
{ "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..." }
,小程序后续请求在 header 中带上
Authorization: Bearer xxx
在控制器基类或行为中验证 token,例如用
yii\filters\auth\HttpBearerAuth
,并配合自定义
identityClass
实现
findIdentityByAccessToken()
避免把 token 存 localStorage,应存在
wx.setStorageSync('token', ...)
,读取时统一注入 request header Yii 路由返回 404:URL 规则没对齐小程序路径 小程序调用
wx.request({ url: 'https://api.example.com/v1/user/info' })
,但 Yii 的
urlManager
没配
v1
模块路由,就会 404。这不是跨域问题,是纯路由匹配失败。 微信公众平台开发入门教程 中文WORD版 由于微信的大热,为了更好的方便使用微信的用户查询一些信息,这篇文章是入门级的微信公众平台开发教程,需要的朋友可以参考下 这篇入门教程将引导你完成如下任务: 创建百度云平台应用启用微信公众平台开发模式获取订阅、文字、图片、语音、视频消息回复文本、图文及音乐消息程序开发 下载 确认模块路径与 URL 路径一致:比如访问
/v1/user
,就要有
modules => ['v1' => ['class' => 'api\modules\v1\Module']]
urlManager
的
rules
必须显式包含模块前缀,不能只写
['controller' => 'user']
:
['class' => 'yii\rest\UrlRule', 'controller' => ['v1/user', 'v1/post']]
如果用
pluralize => false
(推荐),
v1/user
对应单数控制器,别误写成
v1/users
导致找不到路由 调试时打开
enableStrictParsing => true
并查看 Yii 日志里的
UrlManager::parseRequest
记录,确认是否匹配到规则 数据格式和错误处理:小程序只认标准 JSON 结构 小程序
wx.request
的
success
回调只触发于 HTTP 状态码 200–299,且期望响应体是合法 JSON。Yii 默认 4xx/5xx 响应会输出 HTML 错误页,小程序收到的是 HTML 字符串,
JSON.parse
直接报错。 全局统一响应格式:重写
yii\base\ActionFilter
或在
beforeAction
中拦截,确保所有响应都是
{ "code": 0, "message": "ok", "data": {...} }
结构 捕获异常并转 JSON:在
config/web.php
的
components['errorHandler']
中设置
'errorAction' => 'site/error'
,并在
SiteController::actionError()
中输出 JSON 验证失败时不要抛
yii\base\InvalidParamException
,改用
throw new yii\web\BadRequestHttpException($model->getFirstError())
,它会返回 400 + JSON 避免在控制器里直接
echo json_encode(...)
,破坏 Yii 的响应生命周期;始终走
return $this->asJson(...)
真正难的不是写接口,而是让每个环节都“不假设客户端是浏览器”——从 HTTPS 到 token、从路由前缀到 JSON 错误体,每一步偏离都会导致小程序静默失败。留心日志里
$_SERVER['HTTP_AUTHORIZATION']
是否存在、
Yii::$app->request->getContentType()
是否为
application/json
、
Yii::getLogger()->flush()
是否及时落盘,这些才是定位卡点的实际依据。

相关文章