文件
Henglianshutong/tests/verify_mobile_login_pay_chain.php

65 行
3.7 KiB
PHP

<?php
/**
* 验证手机号一键快捷登录与微信支付完整链路
* 运行命令: /www/server/php/80/bin/php tests/verify_mobile_login_pay_chain.php
*/
define('APP_PATH', __DIR__ . '/../application/');
define('ROOT_PATH', __DIR__ . '/../');
require_once ROOT_PATH . 'thinkphp/base.php';
require_once ROOT_PATH . 'thinkphp/helper.php';
require_once ROOT_PATH . 'application/common.php';
\think\Loader::addNamespace('app', APP_PATH);
\think\Loader::addNamespace('addons\\shopro', ROOT_PATH . 'addons/shopro/');
require_once ROOT_PATH . 'addons/shopro/helper/helper.php';
function assert_true($condition, $desc) {
if ($condition) {
echo "[PASS] " . $desc . PHP_EOL;
} else {
echo "[FAIL] " . $desc . PHP_EOL;
exit(1);
}
}
echo "=== 开始验证手机号快捷登录与支付完整链路 ===" . PHP_EOL . PHP_EOL;
// 1. 验证 MiniProgram getSessionId 返回格式定义
echo "--- 1. 验证 MiniProgram getSessionId 返回 openid ---" . PHP_EOL;
$refClass = new ReflectionClass(\addons\shopro\service\third\wechat\MiniProgram::class);
$method = $refClass->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;