1.在小程序端获取 auth_code,目的是获取用户授权码
2.把第一步获取的授权码 auth_code 传到后台接口
3.后台拿到这个 auth_code 之后,需要调用支付宝的授权平台,从而获取用户的唯一 token 以及 支付宝的userid,都是唯一的,调用的接口为 [alipay.system.oauth.token]。获取到userid后,判断一下这个userid是否在我们自己的数据库中存在,如果存在,直接获取信息,并且直接返回用户对象到前台;如果不存在,则需要从支付宝授权平台再一次去获取支付宝用户的信息。
public function aliLogin(){
$code = $this->request->param('code');
if(empty($code)){
return $this->error('缺少登录参数');
}
// 引用支付宝
vendor('.alipayapp.aop.AopClient');
vendor('.alipayapp.aop.request.AlipaySystemOauthTokenRequest');
vendor('.alipayapp.aop.request.AlipayUserInfoShareRequest');
$aop = new \AopClient();
$data = Payment::read(12, 1, true); // 获取后台支付宝配置信息
$aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do';
$aop->appId = $data['pay_config']['app_id'];
$aop->rsaPrivateKey = $data['pay_config']['private_key'];
$aop->alipayrsaPublicKey = $data['pay_config']['ali_public_key'];
$aop->apiVersion = '1.0';
$aop->signType = 'RSA2';
$aop->postCharset='utf-8';
$aop->format='json';
$request = new \AlipaySystemOauthTokenRequest();
$request->setGrantType("authorization_code");
$request->setCode($code);
//$request->setRefreshToken("201208134b203fe6c11548bcabd8da5bb087a83b");
$result = $aop->execute($request);
$result = (new \think\Collection($result))->toArray();
// 拿到的支付宝user_id
$ali_user_id = $result['alipay_system_oauth_token_response']->user_id ?? '';
if (!$ali_user_id) {
return $this->error('code无效');
}
}