getMethod('getSessionId'); $code = file_get_contents($refClass->getFileName()); assert_true(strpos($code, "'openid' => \$decryptData['openid']") !== false || strpos($code, "'openid'") !== false, "MiniProgram::getSessionId 已返回 openid"); // 2. 验证 Wechat 服务层的 getOauthInfo 方法 echo PHP_EOL . "--- 2. 验证 Wechat 服务层 getOauthInfo 与智能合并 ---" . PHP_EOL; $wechatClass = new ReflectionClass(\addons\shopro\service\third\wechat\Wechat::class); assert_true($wechatClass->hasMethod('getOauthInfo'), "Wechat 服务层包含 getOauthInfo 方法"); $wechatCode = file_get_contents($wechatClass->getFileName()); assert_true(strpos($wechatCode, "UserModel::where('mobile', \$extend['mobile'])") !== false, "Wechat 服务层包含已有手机号合并逻辑"); // 3. 验证 控制器层 Wechat::login 响应体 echo PHP_EOL . "--- 3. 验证 Wechat 控制器 login 响应体 ---" . PHP_EOL; $controllerClass = new ReflectionClass(\addons\shopro\controller\third\Wechat::class); $controllerCode = file_get_contents($controllerClass->getFileName()); assert_true(strpos($controllerCode, "'openid' => \$oauthInfo ? (\$oauthInfo->openid ?? '') : ''") !== false, "login 接口响应数据中包含 openid"); // 4. 验证 Pay 控制器 prepay openid 自愈逻辑 echo PHP_EOL . "--- 4. 验证 Pay prepay 自愈与平台规范 ---" . PHP_EOL; $payClass = new ReflectionClass(\addons\shopro\controller\Pay::class); $payCode = file_get_contents($payClass->getFileName()); assert_true(strpos($payCode, "'provider' => 'wechat'") !== false, "Pay 控制器已规范使用小写 wechat 查询"); assert_true(strpos($payCode, "ThirdOauth::getByOpenid(\$openid)") !== false, "Pay 控制器包含 openid 自愈绑定逻辑"); // 5. 验证 UniApp 前端 openid 持久化与使用 echo PHP_EOL . "--- 5. 验证 UniApp 前端 openid 持久化 ---" . PHP_EOL; $miniProgramJs = file_get_contents(__DIR__ . '/../uniapp/sheep/platform/provider/wechat/miniProgram.js'); assert_true(strpos($miniProgramJs, "uni.setStorageSync('openid', data.openid)") !== false, "miniProgram.js getSessionId 存入 openid"); assert_true(strpos($miniProgramJs, "uni.setStorageSync('openid', res.data.openid)") !== false, "miniProgram.js mobileLogin 存入 openid"); $payJs = file_get_contents(__DIR__ . '/../uniapp/sheep/platform/pay.js'); assert_true(strpos($payJs, "const localOpenid = uni.getStorageSync('openid')") !== false, "pay.js prepay 优先读取 localOpenid"); assert_true(strpos($payJs, "未检测到微信授权绑定") !== false, "pay.js 包含友好的绑定提示交互"); echo PHP_EOL . "=== 所有 5 项链路检查全部通过! ===" . PHP_EOL;