您现在的位置是:网站首页 > 脚本编程>

thinkphp5对接友盟智能认证 U-Verify(一键登录)

2020-04-084011人围观
简介 手机号码一键登录在一些市面上的app都有功能,如抖音、快手等。这里我不讲他们是如何实现的只说我们是如何与友盟对接的。android、ios直接下载官方的sdk就可以直接进行对接。

手机号码一键登录在一些市面上的app都有功能,如抖音、快手等。这里我不讲他们是如何实现的只说我们是如何与友盟对接的。android、ios直接下载官方的sdk就可以直接进行对接。

购买流程:https://developer.umeng.com/docs/143070/detail/143586

安卓集成文档:https://developer.umeng.com/docs/143070/detail/144780

ios集成文档:https://developer.umeng.com/docs/143070/detail/144766

系统交互流程主要分为四个步骤:

第一步,智能认证SDK初始化

第二步,唤起授权页面,可通过预取号加快授权页面的唤起速度

第三步,用户确认,授权并登录

第四步,发起取号

操作流程如下:

微信截图_20200407145420.png

这里我们只讲发起取号与服务器进行通信并返回所需要的手机号的过程。如上图红色框部分

1.获取客户端传过来的token(app端与友盟进行通信返回的token) appkey(友盟创建项目获取的appkey) type

2.根据token、appkey获取手机号码的原始数据

3.对返回的数据进行解密返回真实的手机号码,可进行登录注册或者返给app端

完整代码如下:

<?php
namespace app\apis\controller;
use think\Request;
use think\Db;
use Umeng\Demo1;//工具类 存放在根目录下extend文件夹中
/*
登录控制器
author:李玉生
createtime:20190805
endtime:20190805
updatetime:20200408
*/
class Login extends controller
{
    /*
    免密登录
    token :在友盟获取到token
    appkey:友盟中创建项目获取的appkey
    type:值为 android、ios
    */
    public function login($field)
    {
        $request=json_decode($field);
        $token=$request->token;
        $appkey=$request->appkey;
        $type=$request->type;
        if($token=="")
        {
            echo "token不能为空";
            exit;
        }
        if($appkey=="")
        {
            echo "appkey不能为空";
            exit;
        }
        if($type=="")
        {
            echo "type不能为空";
            exit;
        }
        $name=$this->gotoyoum($token,$appkey,$type);
        if($name==true)
        {
           /*
           返回手机号进行逻辑的处理
           注册
           登录
           */
         }else{
          echo "登录失败";
         }
    }
    //请求api 验证 友盟
    public function gotoyoum($token,$appkey,$type)
    {
        $demo = new Demo1(); 
        $url="/api/v1/mobile/info?appkey=".$appkey;
        $r=$demo->doRequest($url,["token" => $token,"phoneNumber" => "***"]);
        $data=json_decode($r, true);
        if($data['success']!=false)
        {
            $mobile=$data['data']['mobile'];
            $key=$data['data']['aesEncryptKey'];
            $a=$this->decrypt($mobile,$key,$type);
            return $a;
        }else{
            return $data['success'];
        } 
    }
    /*
    对返回来的密钥进行解密
    */
    public function decrypt($mobile,$key,$type)
    {
        if($type=="android")
        {
            // 安卓密钥
            $privateKey = "";//获取方式如下图
        }else{
            //ios密钥
            $privateKey = "";//获取方式如下图
        }
        $private_key = openssl_pkey_get_private("-----BEGIN RSA PRIVATE KEY-----\n" .$privateKey . "\n-----END RSA PRIVATE KEY-----");
        openssl_private_decrypt(base64_decode($key), $decrypted, $private_key);
        $keys=base64_encode($decrypted);
        $rs=$this->decrypts($mobile, $keys);
        return base64_decode($rs);
    }
    /*
    手机号码解密
    */
    public function decrypts($encrypted, $key)
    {
        return base64_encode(openssl_decrypt($encrypted, 'AES-128-ECB', base64_decode($key), 0, ""));
    }
}
?>

密钥获取方式

微信图片_20200408143333.png

工具类下载地址:extend.zip


打赏本站,你说多少就多少

本文地址:https://www.qi522.com/view/110.html

来     源:千奇博客

精彩评论

微信关注

Copyright © 2013-2019 千奇博客 保留所有权利 辽ICP备13008238号