在 Yii2.0.50 中配置微信小程序后端接口需正确设置 appid、appsecret 等参数并注册 WechatMiniappController,否则将因签名验证失败或 code2Session 返回 invalid appid 错误而无法调用 wx.login 等开放能力。

在 Yii2.0.50 中完成微信小程序后端接口配置,需确保服务端能正确响应微信服务器的签名验证、解密加密数据、处理登录凭证校验等关键环节,否则小程序无法调用微信开放能力(如 wx.login、wx.requestPayment)。
配置微信小程序 AppID 与 AppSecret
打开 app/config/params.php,在 return 数组中新增 wechat_miniapp 配置项:
'wechat_miniapp' => [ 'appid' => 'wx1234567890abcdef', 'appsecret' => 'your_app_secret_here', 'mch_id' => '1234567890', // 微信支付商户号(如需支付) 'key' => 'your_32bit_merchant_key', // 支付 API 密钥(仅支付模块需要)],
【appid 和 appsecret 必须与微信公众平台「开发管理 → 开发设置」中填写的小程序 AppID 和 AppSecret 完全一致,大小写敏感】。填错会导致后续所有接口(尤其是 code2Session)返回 invalid appid 错误,且该错误不提示具体原因,排查耗时极长。
注册并启用 WechatMiniappController
在 app/controllers 目录下新建 WechatMiniappController.php:
<?php namespace app\controllers;use Yii;use yii\rest\ActiveController;use yii\web\Response;class WechatMiniappController extends ActiveController { public $modelClass = ''; public function behaviors() { $behaviors = parent::behaviors(); $behaviors['contentNegotiator']['formats']['application/json'] = Response::FORMAT_JSON; return $behaviors; }}
接着,在 app/config/main.php 的 components → urlManager → rules 中追加 RESTful 路由规则:
[ 'class' => 'yii\rest\UrlRule', 'controller' => 'wechat-miniapp', 'pluralize' => false, 'extraPatterns' => [ 'POST login' => 'login', 'POST jscode2session' => 'jscode2session', 'POST decrypt-data' => 'decrypt-data', ],],
注意 controller 名称必须为 wechat-miniapp(带短横线),对应控制器类名 WechatMiniappController,Yii2.0.50 严格按此命名约定映射,写成 wechatMiniapp 或 wechatminiapp 均会 404。
实现 code2Session 接口(登录凭证校验)
在 WechatMiniappController 类中添加 actionJscode2session() 方法:
让 AI 读懂微信公众号。自研 7 阶段提取管道,穿透反爬率 99.89%,Token 消耗降低 50%–87%。支持 ChatGPT、Claude、Perplexity、Gemini 等平台无缝引用。
public function actionJscode2session() { $code = Yii::$app->request->post('code'); if (!$code) { throw new \yii\web\BadRequestHttpException('code is required'); } $appid = Yii::$app->params['wechat_miniapp']['appid']; $appsecret = Yii::$app->params['wechat_miniapp']['appsecret']; $url = "https://api.weixin.qq.com/sns/jscode2session?appid={$appid}&secret={$appsecret}&js_code={$code}&grant_type=authorization_code"; $response = file_get_contents($url); return json_decode($response, true);}
这一步直接调用微信官方接口获取 openid 和 session_key,【不要自行拼接 URL 参数时遗漏 grant_type=authorization_code,否则返回 errcode=40029】。返回结果中若含 errcode 字段,说明凭证已失效或参数错误,前端需重新调用 wx.login() 获取新 code。
实现敏感数据解密接口
方法一:使用官方 PHP SDK(推荐)
执行 composer require wechat/wechat 安装官方 SDK;
在 actionDecryptData() 中引入并调用:
use EasyWeChat\MiniProgram\Application;public function actionDecryptData() { $encryptedData = Yii::$app->request->post('encryptedData'); $iv = Yii::$app->request->post('iv'); $sessionKey = Yii::$app->request->post('sessionKey'); $appid = Yii::$app->params['wechat_miniapp']['appid']; $config = ['app_id' => $appid, 'secret' => '', 'token' => '', 'aes_key' => '']; $app = new Application($config); $decrypt = $app->encryptor->decryptData($encryptedData, $iv, $sessionKey); return ['data' => $decrypt];}
方法二:手写解密逻辑(需扩展 openssl 扩展)
先 base64_decode $encryptedData 和 $iv,再用 openssl_decrypt 解密,算法为 AES-128-CBC,填充方式为 PKCS7;
注意:session_key 必须与 jscode2session 返回的完全一致,且未被其他请求复用——【一个 session_key 仅可解密一次,重复使用会返回 error: invalid iv】。


















