Commit 9a47c722 by 汪睦雄

'修复手机号授权问题'

parent 5f5c0333
......@@ -99,6 +99,34 @@ class User extends Base
}
}
// 获取session key
public function getSessionKey()
{
$jscode = input("post.code");
if (!$jscode) {
return ["code" => 1, "msg" => "参数错误"];
}
if (!$this->userinfo) {
return ["code" => 1, "msg" => "未登录"];
}
// 获取session_key
$appId = config("wxapp.appKey");
$appSecret = config("wxapp.appSecret");
$wxurl = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $appId . "&secret=" . $appSecret . "&js_code=" . $jscode . "&grant_type=authorization_code";
$response = http_get($wxurl);
// session_key 和 openid
// 过期时间2小时 7200s
$session_key = $response->session_key;
if ($session_key) {
return ["code" => 0, "msg" => "succeed", 'data'=>$session_key];
}
return ["code" => 1, "msg" => "获取session_key失败"];
}
/**
* 微信手机授权
* @url /api/User/getPhoneNumber
......@@ -112,6 +140,7 @@ class User extends Base
$jscode = input("post.code");
$encryptedData = input("post.encryptedData");
$iv = input('post.iv');
$version = input('post.version', '');
if (!$jscode || !$encryptedData || !$iv) {
return ["code" => 1, "msg" => "参数错误"];
......@@ -135,10 +164,67 @@ class User extends Base
// 解密加密数据
include_once VENDOR_PATH . 'aesphp/wxBizDataCrypt.php';
$pc = new \WXBizDataCrypt($appId, $session_key);
if ($version == '1.1') {
$iv = urldecode($iv);
$errCode = $pc->decryptData($encryptedData, $iv, $data);
}else{
$errCode = $pc->decryptData($encryptedData, $iv, $data);
}
if ($errCode == 0) {
$data = json_decode($data);
$phone = $data->purePhoneNumber;
$hidephone = substr_replace($phone, '****', 3, 4);
$user = UserModel::get($this->userinfo[0]);
$onlyPhone = UserModel::get(['id' => ['neq', $this->userinfo[0]], 'phone' => $phone]);
if ($onlyPhone) {
return ["code" => 1, "msg" => "该手机号已注册"];
}
$user->phone = $phone;
$user->save();
$result = ['phone' => $phone, 'hidephone' => $hidephone];
//关联VIP
$is_relation = $this->vipRelation($phone);
return ["code" => 0, "msg" => "获取成功", 'data' => $result, 'is_relation' => $is_relation];
} else {
return ["code" => 1, "msg" => "微信授权失败:".$errCode.' - '.$iv];
}
}
/**
* 微信手机授权
* @url /api/User/getPhoneNumber
* @params code
* @params encryptedData
* @params iv
* return json
*/
public function getPhoneNumber2()
{
$sessionId = input("post.sessionId");
$encryptedData = input("post.encryptedData");
$iv = input('post.iv');
if (!$sessionId || !$encryptedData || !$iv) {
return ["code" => 1, "msg" => "参数错误"];
}
if (!$this->userinfo) {
return ["code" => 1, "msg" => "未登录"];
}
// 解密加密数据
$appId = config("wxapp.appKey");
include_once VENDOR_PATH . 'aesphp/wxBizDataCrypt.php';
$pc = new \WXBizDataCrypt($appId, $sessionId);
$iv = urldecode($iv);
$errCode = $pc->decryptData($encryptedData, $iv, $data);
if ($errCode == 0) {
$data = json_decode($data);
$phone = $data->purePhoneNumber;
// echo "string";exit;
$hidephone = substr_replace($phone, '****', 3, 4);
$user = UserModel::get($this->userinfo[0]);
......@@ -154,7 +240,70 @@ class User extends Base
$is_relation = $this->vipRelation($phone);
return ["code" => 0, "msg" => "获取成功", 'data' => $result, 'is_relation' => $is_relation];
} else {
return ["code" => 1, "msg" => "微信数据解密失败,请重试!"];
return ["code" => 1, "msg" => "微信授权失败:".$errCode.' - '.$iv];
}
}
/**
* 用户小程序授权
* @url /api/User/login
* @params code
* @params encryptedData
* @params iv
* return json
*/
public function login2()
{
$sessionId = input("post.sessionId");
$encryptedData = input("post.encryptedData");
$iv = input('post.iv');
// 解密加密数据
$appId = config("wxapp.appKey");
include_once VENDOR_PATH . 'aesphp/wxBizDataCrypt.php';
$pc = new \WXBizDataCrypt($appId, $sessionId);
$iv = urldecode($iv);
$errCode = $pc->decryptData($encryptedData, $iv, $data);
if ($errCode == 0) {
$data = json_decode($data);
$user = UserModel::where(['openid' => $data->openId])->find();
if ($user) {
//更新
// 省份和城市
$user->city = $data->city;
$user->province = $data->province;
//ip
$user->ip = request()->ip();
$user->save();
// 登录成功
$token = $this->usertoken($user);
return ["code" => 0, "msg" => "登录成功", "token" => $token, "user" => $user];
} else {
//第一次注册
$user = new UserModel;
$user->openid = $data->openId;
$user->nickname = $data->nickName;
// 用户的性别,值为1时是男性,值为2时是女性,值为0时是未知
$user->gender = intval($data->gender);
$user->avatar = $data->avatarUrl;
$user->is_vip = 0; // 0非会员 1会员 默认为非会员
// 省份和城市
$user->city = $data->city;
$user->province = $data->province;
//ip
$user->ip = request()->ip();
if ($user->save()) {
// 注册成功
$token = $this->usertoken($user);
return ["code" => 0, "msg" => "注册成功", "token" => $token, "user" => $user];
} else {
return ["code" => 1, "msg" => "注册失败"];
}
}
} else {
return ["code" => 1, "msg" => "注册失败,请重试!"];
}
}
......
......@@ -59,6 +59,7 @@ class WXBizDataCrypt
$dataObj=json_decode( $result[1] );
if( $dataObj == NULL )
{
// echo $result[1]; exit;
return ErrorCode::$IllegalBuffer;
}
if( $dataObj->watermark->appid != $this->appid )
......@@ -69,5 +70,4 @@ class WXBizDataCrypt
return ErrorCode::$OK;
}
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment