我的办法是微信小程序前端直接访问后台获取所有信息 ,然后后端更新一处
分别是前端放弃open-type获取信息,直接 @click 走getUserInfo去后端获取
<button v-if="userInfo.nickname==undefined"
class="loginBtn" style="font-size:30rpx;font-weight: 600;background-color: rgba(0, 0, 0, 0);border:none"
type="text"
open-type="getUserInfo"
scope="userInfo"
@getAuthorize="getUserInfo"
@click="getUserInfo">
<text style="color: white;">点击登录</text>
</button>
后端 plugins/wxapp/models/LoginForm.php 强制访问js接口获取个人信息
namespace app\plugins\wxapp\models;
use app\forms\api\LoginUserInfo;
use app\models\UserInfo;
use app\plugins\wxapp\Plugin;
class LoginForm extends \app\forms\api\LoginForm
{
public function getUserInfo()
{
$scope = 'auth_info';
/** @var Plugin $plugin */
$plugin = new Plugin();
$postData = \Yii::$app->request->post();
if (isset($postData['rawData'])) {
$rawData = $postData['rawData'];
$postUserInfo = json_decode($rawData, true);
// $data = $plugin->getWechat()->decryptData(
// $postData['encryptedData'],
// $postData['iv'],
// $postData['code']
// );
$data = $plugin->getWechat()->jsCodeToSession($postData['code']);
$openId = $data['openid'];
$unionId = $data['unionid'] ?? '';
} else {
$scope = 'auth_base';
$data = $plugin->getWechat()->jsCodeToSession($postData['code']);
$openId = $data['openid'];
$unionId = $data['unionid'] ?? '';
$postUserInfo['nickName'] = '';
$postUserInfo['avatarUrl'] = '';
}
$userInfo = new LoginUserInfo();
$userInfo->username = $openId;
$userInfo->scope = $scope;
$userInfo->nickname = isset($data['nickName']) ? $data['nickName'] : $postUserInfo['nickName'];
$userInfo->avatar = isset($data['avatarUrl']) ? $data['avatarUrl'] : $postUserInfo['avatarUrl'];
$userInfo->platform_user_id = $openId;
$userInfo->platform = UserInfo::PLATFORM_WXAPP;
$userInfo->unionId = $unionId;
return $userInfo;
}
}