创蓝闪验php手机号一键登录

注意:对外接口需要两个必要参数,flash_token、type(安卓或ios)
flash_token从哪里来:
是安卓和ios端集成创蓝闪验sdk以后通过调用sdk相关接口获得,参数名为token。
例如:
===================oneKeyLoginListener: <CLCompleteResult: 0x282759130> { authPagePresented = 1; code = 1000; data = { token = "A2-TbeW2bEc8sWcqa9X2_R3GJK4rKulBIEQhyfRn0NWpi_MBoxslDC3c22RByVMAcJddO5X291FBpBshtwcXBp-giIDFXc-7uw-t7t36qhV6HUnWsanbQkVFYH1wFbelVU_uNKk3BwbTtmZ44z7qZIdQHZfYZfsqHTyQGLV7aCkUbGQk0ax_p_xtWzqRTyqpN3HglJmPnsaeATXH_8cn5iJYN8bx6U2-XrkCVw4xxv2seF8oJ82MKD70BHGG776F6vU" }; error = <nil>; innerCode = 0; innerData = <nil>; innerDesc = <nil>; innerError = <nil>; message = "SDK获取Token成功" } ==================

少废话,上代码

对外(安卓、ios)一键登录接口:

    /*** 闪验手机号一键登录接口* @param $flash_token* @param $type 1安卓、2ios*/public function flashLogin(){// 接值 $params······// 校验参数if ( !isset($params['flash_token']) ){throw new Exception(71018);}if ( !isset($params['type']) ){throw new Exception(71018);}// 判断是安卓还是ios$platform = $params['type'];if ($platform == 'android'){$type = 1;}elseif($platform == 'ios'){$type = 2;}else{throw new Exception(71018);}// 调用封装的公共方法 返回手机号$phone = getFlashPhone( $params['flash_token'] , $type  );// 判断手机号if (empty($phone)){throw new Exception(71019);}// 写库登录操作······// 返回接口登录成功或失败······}

公共方法:

/*** 创蓝闪验 一键登录取号* @param $tonen* @param $type 1安卓、2ios* @param string $massage* @return $return_phone 返回手机号,失败则返回false* @throws Exception*/
function getFlashPhone( $token ,$type = 1 )
{$clapi = new \service\ChuanglanFlashSms();// 获取手机号$return_phone = $clapi->getFlashPhone( $token , $type );return $return_phone;}

创蓝闪验封装类:

<?php
namespace service;/* ** 创蓝闪验(手机号一键登录)* smt*/class ChuanglanFlashSms
{// 创蓝手机号一键登录 闪验地址protected $flash_query_url;// 安卓对应的appidprotected $ad_flash_appid;// 安卓对应的appkeyprotected $ad_flash_appkey;// ios对应的appidprotected $ios_flash_appid;// ios对应的appkeyprotected $ios_flash_appkey;// 应用私钥,可选,如用RSA解密,必须填写protected $flash_private_key;//  AES 1 RSA  , 默认0 AESprotected $flash_encrypt_type;public function __construct(){$this->flash_query_url    = config('cl_flash_config.flash_query_url');$this->ad_flash_appid     = config('cl_flash_config.ad_flash_appid');$this->ad_flash_appkey    = config('cl_flash_config.ad_flash_appkey');$this->ios_flash_appid    = config('cl_flash_config.ios_flash_appid');$this->ios_flash_appkey   = config('cl_flash_config.ios_flash_appkey');$this->flash_private_key  = config('cl_flash_config.flash_private_key');$this->flash_encrypt_type = config('cl_flash_config.flash_encrypt_type');}/*** 闪验短信取号校验* @param $token* @param $type 1安卓、2ios*/public function getFlashPhone($token, $type = 1){if ($type == 1) {// android// 生成sign串$content = 'appId' . $this->ad_flash_appid . 'token' . $token;$sign    = bin2hex(hash_hmac('sha256', $content, $this->ad_flash_appkey, true));$params = ['appId' => $this->ad_flash_appid,'token' => $token,'sign'  => $sign //签名];} elseif ($type == 2) {// ios// 生成sign串$content = 'appId' . $this->ios_flash_appid . 'token' . $token;$sign    = bin2hex(hash_hmac('sha256', $content, $this->ios_flash_appkey, true));$params = ['appId' => $this->ios_flash_appid,'token' => $token,'sign'  => $sign //签名];}$return_phone = $this->flashCurlPost($this->flash_query_url, $params, $type);return $return_phone;}/*** 闪验curl* @param $url* @param $data* @param $type 1安卓、2ios*/private function flashCurlPost($url, $params, $type = 1){// CURL 模拟 post 请求$ch = curl_init();curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));curl_setopt($ch, CURLOPT_TIMEOUT, 5);$resultJson = curl_exec($ch);$curlInfo   = curl_getinfo($ch);// CURL 错误码$errNo = curl_errno($ch);if ($errNo > 0) {// 通信失败处理逻辑,请自己填充// CURL 错误信息$errMsg = curl_error($ch);logs($errMsg, 'flash_login_error');} elseif (!empty($curlInfo) && intval($curlInfo['http_code']) != 200) {// http 状态码不是 200,请求失败处理逻辑$httpCode = $curlInfo['http_code'];logs($httpCode, 'flash_login_error');} else {// 拿到请求结果,使用返回结果逻辑$requestData = json_decode($resultJson, true);if ($requestData['code'] == 200000) {$chargeStatus = $requestData['chargeStatus']; // 是否收费,枚举值:1 :收费 0:不收费$mobile       = $requestData['data']['mobileName']; // 手机号if ('0' == $this->flash_encrypt_type) { //AES解密 ,默认方式if ($type == 1) {// android$key = md5($this->ad_flash_appkey);} elseif ($type == 2) {// ios$key = md5($this->ios_flash_appkey);} else {return false;}$mobile = openssl_decrypt(hex2bin($mobile), 'AES-128-CBC', substr($key, 0, 16), OPENSSL_RAW_DATA, substr($key, 16));// 如解密失败 请检查$appKey是否正确} elseif ('1' == $this->flash_encrypt_type) { //RSA解密$pi_key = openssl_pkey_get_private($this->flash_private_key);openssl_private_decrypt(hex2bin($mobile), $mobile, $pi_key);//私钥解密// 如解密失败 请检查$private_key是否正确}// $tradeNo = $requestData['data']['tradeNo']; // 流水号// 拿到返回数据继续处理逻辑return $mobile;} else {// 响应异常处理逻辑logs($resultJson, 'flash_login_error');// return $resultJson;return false;}}}}?>

完 ···

创蓝闪验php手机号一键登录相关推荐

  1. 创蓝闪验一键登录(Java实现)

    闪验业务流程 官网提供了demo下载(有签名工具类,发送http请求工具类,加解密工具类): 下面贴出核心业务代码: package com.pica.cloud.account.account.se ...

  2. flutter在IOS上的登录实现——QQ登录、微信登录、自动识别手机号一键登录、apple登录

    flutter在IOS上的登录实现--QQ登录.微信登录.自动识别手机号一键登录.apple登录 一.QQ登录 使用的第三方库: 具体操作方法: 1.配置 Universal Links 2.QQ互联 ...

  3. 易验:APP一键登录,就这么简单

    易验,APP一键登录 1. 能力申请 注意事项: 1.认证取号服务必须打开蜂窝数据流量,并且应用应有蜂窝数据权限: 2.取号请求过程需要消耗用户少量数据流量(国外漫游时可能会产生额外的费用): 3.使 ...

  4. uniapp手机号一键登录

    uniapp手机号一键登录 先讲几个坑避免操作完以后会出bug无效喷我 部分机型会因为第一次在手机上编译普通基座无法触发手机号一键登录的弹框,这里当然是重启了,重启可以解决百分之八十的问题!!! 然后 ...

  5. uniapp获取微信授权登录和手机号一键登录(保姆教程)

    uniapp获取微信授权登录(保姆教程) 第一步 下载官方给的解密文件'mWXBizDataCrypt' 没有文件就复制该文件的代码创建一个 var crypto = require('crypto' ...

  6. 测试踩坑:手机号一键登录的手机双卡运营商问题

    H2在v8.3.0.0迭代新增了手机号一键登录功能,除了单卡常规测试外,还有双卡测试时发现的问题留个记录. 前提: xr手机,是iphone手机双卡双待或者iphone全面屏手机,手机只插1张联通卡 ...

  7. 在uni-app中使用手机号一键登录

    1.首先需要在dcloud开发者控制台开通一键登录 https://dev.dcloud.net.cn/uniLogin 开通一键登录服务, 获取关键最关键的两个参数 ApiKey 和 ApiSecr ...

  8. uni-app手机号一键登录

    提示:手机号一键登录有两种方式. 第一种通过调用自有服务器,然后服务器调用云函数登录. 第二种可以前端直接调用云函数进行登录(暂不介绍). 提示:在我的项目中使用的是自由服务器登录,下面的案例可供参考 ...

  9. 微信小程序手机号一键登录--获取用户手机号--微信小程序一键登录

    前提:现在微信小程序登录我参考了几个大的公司的登录,基本分下面几种 1.微信用户一键登录,授权用户基本信息,不获取手机号 2.微信手机号一键登录,根据手机号去关联在其他平台数据,用手机号关联.然后再调 ...

最新文章

  1. bpexpdate – 更改映像目录库中备份的截止日期以及介质目录库中介质的截止日期nbu...
  2. DevOps 和SRE 的十大开源项目
  3. Python:操作文件
  4. 基础网络和关键基础设施
  5. ruby html解析器
  6. CTF基础理论知识01
  7. Host ‘host_name’ is blocked
  8. castle windsor学习----- Services and Components 两者的定义
  9. eclipseweb开发response和request接收发送数据乱码问题
  10. [html] 表单可以跨域吗?
  11. 如何使用用window.open()
  12. 前端_网页编程 HTTP协议(进阶)
  13. faster rcnn论文_52 个深度学习目标检测模型汇总,论文、源码一应俱全!(附链接)...
  14. C语言指针类型 强制转换
  15. SQL 2005 Beta2 和VS 2005 Beta1安装的问题
  16. 【SEM】1 基本概念
  17. 软件无线电 --- Rtlsdr系统原理框图
  18. HDU 2206 JAVA
  19. 服务器c盘缓存文件夹,c盘存放缓冲文件的地方在哪里
  20. 安徽阜阳计算机高中学校排名,安徽省高中学校实力排名

热门文章

  1. java编程定义狗_Java定义狗狗的类,构造错了?找不到符号。
  2. 【SQL】【读书笔记】《MySQL必知必会》
  3. 数据可视化软件如何在数字孪生领域后来居上?
  4. 打败你的不是现实,是时间管理|互联网时代的时间管理术
  5. python实现元胞自动机——超简单的流言模型
  6. 撕开的黎明--孔庆东卷
  7. 一周信创舆情观察(1.18~1.24)
  8. [Verilog硬件描述语言]程序设计语句
  9. 于 HTML5 WebGL 的民航客机飞行监控系统
  10. 让人拍案叫绝的创意如何产生