You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

125 lines
3.7 KiB

<?php
namespace app\base\controller\mpalipay\api;
use app\base\model\mpalipay\MpalipayUser;
use think\App;
use think\facade\Db;
class Auth extends Base
{
/**
* 支付宝小程序 授权登录
* @date 2020-11-30
*/
public function getAlipayUserId()
{
$code = input('post.code');
$ali_pay_param = get_mp_alipay_config();
$mpalipay_user_model = new MpalipayUser();
$jwt_class = new \jwt\Jwt();
$user_class = new \ali\alipay\mpalipay\User($ali_pay_param);
//获取支付宝小程序用户信息
$result = $user_class->getAlipayUserId($code);
//记录日志
platformLog(['code' => $code], $result, 'alipaysdk_mpalipay_get_user_id_by_code_' . UID);
if (!empty($result['code'])) {
return sendErrorMessage($result['code'], $result['sub_msg']);
}
//更新小程序用户信息表
$user_info = [
'uid' => UID,
'openid' => isset($result['user_id']) ? $result['user_id'] : '',
'access_token' => isset($result['access_token']) ? $result['access_token'] : '',
'access_token_time' => time(),
];
$res = $mpalipay_user_model->updateUser($user_info);
if(!$res){
return sendErrorMessage(4001, '更新小程序用户信息失败');
}
//获取用户信息
$mpalipay_user = $mpalipay_user_model->getOneData([
['openid', '=', $user_info['openid']]
], 'id,user_id,openid');
//获取token
$info = [
'uid' => UID,
'openid' => $mpalipay_user['openid'],
'mpalipay_user_id' => $mpalipay_user['id'],
'user_id' => $mpalipay_user['user_id'],
];
$res_token = $jwt_class->signToken($info);
$r_data = $info;
$r_data['access_token'] = $res_token['token'];
$r_data['access_token_expire_time'] = $res_token['exp'];
return sendSuccessMessage($r_data);
}
/**
* 支付宝小程序 授权获取手机号
* @date 2021-12-30
*/
public function getPhoneNumber()
{
$param = input('post.');
$param['last_user_id'] = input('post.last_user_id', '');
$ali_pay_param = get_mp_alipay_config();
$user_logic = new \app\base\logic\User();
$jwt_class = new \jwt\Jwt();
$user_class = new \ali\alipay\mpalipay\User($ali_pay_param);
//换取用户手机号
$result = $user_class->getPhoneNumber($param['encrypted_data']);
//记录三方日志
platformLog(['encrypted_data' => $param['encrypted_data']], $result, 'alipaysdk_mpalipay_get_phone_number_' . UID);
if ($result['code'] != 10000) {
return sendErrorMessage($result['code'], $result['subMsg']);
}
$mobile_phone = $result['mobile'];
Db::startTrans();
//根据不同平台组合info参数
$info = TOKEN_DATA;
$info['user_agent'] = USER_AGENT;
//登录并更新相关信息(用户表和平台用户表)
$res = $user_logic->login($mobile_phone, $info, $param['last_user_id']);
if ($res['code'] != 0) {
Db::rollback();
return json($res);
}
$user_id = $res['data']['user_id'];
Db::commit();
//绑定三方平台
// 签发token
$arr = TOKEN_DATA;
$arr['user_id'] = $user_id;
$res_token = $jwt_class->signToken($arr);
$r_data = [
'user_id' => $user_id,
'access_token' => $res_token['token'],
'access_token_expire_time' => $res_token['exp']
];
return sendSuccessMessage($r_data);
}
}