封装成了个类,参数有注解,请自行更正没有的类,没有的方法

httpRequest();方法类中有,不需要 json_encode

代码如下:

<?php/*** @author lianyu001 <1411479499@qq.com>* start_time   2022-06-28* up_time      2022-06-28* end_time     2022-06-28*/
if (!defined('WY_ROOT'))exit;
require_once dirname(WY_ROOT) . '/ApiV1/function_apiv1.php';Class baidu_applet_config {private $appid = 'xxx'; //账号名private $secred = 'xxx'; //账号密码/*** 百度小程序一键登录获取 手机号* @param str $code     由swan.login获取的临时登录凭证,找前端要* @param str $sign     待解密数据,encryptedData,找前端小程序要* @param str $iv       加密向量,返回的内容中的iv字段,找前端要* @return ary[code,msg,data]  200正常,data.mobile 其他抛出msg*/function get_mobile($code, $sign, $iv) {$pub = new ALLClass();$url = 'https://spapi.baidu.com/oauth/jscode2sessionkey';$data = array("code" => $code,"client_id" => $this->appid,"sk" => $this->secred);$res = $pub->httpRequest($url, "POST", json_encode($data));$res_arr = json_decode($res, TRUE);if (isset($res_arr['session_key'])) {$phone = $this->decrypt($sign, $iv, $this->appid, $res_arr['session_key']);if (!!$phone) {$mobile = json_decode($phone, TRUE);return ['msg' => 'Success.', 'data' => $mobile, 'code' => 200];} else {return ['msg' => '解密失败,请检查参数', 'code' => 403];}} else {return ['code' => 500, 'msg' => '百度小程序登录错误,请检查code是否过期'];}}/*** 数据解密:低版本使用mcrypt库(PHP < 5.3.0),高版本使用openssl库(PHP >= 5.3.0)。* 官方提供解密方法   https://smartprogram.baidu.com/docs/develop/function/login_userdata/* @param string $ciphertext    待解密数据,返回的内容中的data字段* @param string $iv            加密向量,返回的内容中的iv字段* @param string $app_key       创建小程序时生成的app_key* @param string $session_key   登录的code换得的* @return string | false*/function decrypt($ciphertext, $iv, $app_key, $session_key) {$session_key = base64_decode($session_key);$iv = base64_decode($iv);$ciphertext = base64_decode($ciphertext);$plaintext = false;if (function_exists("openssl_decrypt")) {$plaintext = openssl_decrypt($ciphertext, "AES-192-CBC", $session_key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING, $iv);} else {$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, null, MCRYPT_MODE_CBC, null);mcrypt_generic_init($td, $session_key, $iv);$plaintext = mdecrypt_generic($td, $ciphertext);mcrypt_generic_deinit($td);mcrypt_module_close($td);}if ($plaintext == false) {return false;}// trim pkcs#7 padding$pad = ord(substr($plaintext, -1));$pad = ($pad < 1 || $pad > 32) ? 0 : $pad;$plaintext = substr($plaintext, 0, strlen($plaintext) - $pad);// trim header$plaintext = substr($plaintext, 16);// get content length$unpack = unpack("Nlen/", substr($plaintext, 0, 4));// get content$content = substr($plaintext, 4, $unpack['len']);// get app_key$app_key_decode = substr($plaintext, $unpack['len'] + 4);return $app_key == $app_key_decode ? $content : false;}/*** CURL请求* @param $url 请求url地址* @param $method 请求方法 get post* @param null $postfields post数据数组* @param array $headers 请求header信息* @param bool|false $debug  调试开启 默认false* @return mixed*/function httpRequest($url, $method = "GET", $postfields = [], $headers = array(), $debug = false) {$method = strtoupper($method);$ci = curl_init();/* Curl settings */curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);curl_setopt($ci, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0");curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 60); /* 在发起连接前等待的时间,如果设置为0,则无限等待 */curl_setopt($ci, CURLOPT_TIMEOUT, 7); /* 设置cURL允许执行的最长秒数 */curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);switch ($method) {case "POST":curl_setopt($ci, CURLOPT_POST, true);$tmpdatastr = is_array($postfields) ? http_build_query($postfields) : $postfields;curl_setopt($ci, CURLOPT_POSTFIELDS, $tmpdatastr);break;case "GET":$params = "";foreach ($postfields as $k => $v) {$params .= $k . "=" . urlencode($v) . "&";}curl_setopt($ci, CURLOPT_POSTFIELDS, $params);break;default:curl_setopt($ci, CURLOPT_CUSTOMREQUEST, $method); /* //设置请求方式 */break;}$ssl = preg_match('/^https:\/\//i', $url) ? TRUE : FALSE;curl_setopt($ci, CURLOPT_URL, $url);if ($ssl) {curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hostscurl_setopt($ci, CURLOPT_SSL_VERIFYHOST, FALSE); // 不从证书中检查SSL加密算法是否存在}//curl_setopt($ci, CURLOPT_HEADER, true); /*启用时会将头文件的信息作为数据流输出*/curl_setopt($ci, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ci, CURLOPT_MAXREDIRS, 2); /* 指定最多的HTTP重定向的数量,这个选项是和CURLOPT_FOLLOWLOCATION一起使用的 */curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);curl_setopt($ci, CURLINFO_HEADER_OUT, true);/* curl_setopt($ci, CURLOPT_COOKIE, $Cookiestr); * *COOKIE带过去** */$response = curl_exec($ci);$requestinfo = curl_getinfo($ci);$http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);if ($debug) {echo "=====post data======\r\n";var_dump($postfields);echo "=====info===== \r\n";print_r($requestinfo);echo "=====response=====\r\n";print_r($response);}curl_close($ci);return $response;//return array($http_code, $response,$requestinfo);}}

调用如下:

<?php echo json_encode(get_baidu_mobile());/*** 百度一键登录解密取号*/
function get_baidu_mobile() {$parm = parameters_certification(['code', 'iv', 'sign']);if (!$parm) {return ['code' => 404, 'msg' => '参数错误.'];}require_once WY_ROOT . '/config/baidu_applet_config.php';//你的类文件$cc = new baidu_applet_config();//new一个女朋友,当然也可以在类中设置静态方法 :: 直接调用就不用new了$bb=$cc->get_mobile($parm['code'], $parm['sign'], $parm['iv']);if($bb['code'] == 200){$_REQUEST['mobile']=$bb['data']['mobile'];$_REQUEST['login_type']=5;return login('1');}return $bb;
}
/*** 参数验证* @param array $field      参数索引数组【'a','b'】* @param array $data       需要验证数组,不传拿$_REQUEST* @return boolean | array  不存在参数,空参数返回false,否则返回验证数组*/
function parameters_certification($field = [], $data = []) {if (empty($data)) {$data = $_REQUEST;}if (empty($field)) {return $data;}foreach ($field as $val) {if (isset($data[$val])) {if (is_array($data[$val])) {if (empty($data[$val])) {return false;} else {continue;}}if (strlen($data[$val]) > 0) {continue;} else {return false;}} else {return false;}}return $data;
}?>

很简单的,偏偏找不到百度的正确方式

官方demo也给出错误的引导,这文档跳过来,跳过去,很令人懵逼,心态不好还容易暴躁。

步骤:

1.通过前端获取code、iv、sign

2.后端引入类

3.调用类中方法解密输出

百度小程序一键取号 · 解密取号相关推荐

  1. Taro之百度小程序一键登录埋点统计

    背景:百度小程序项目想要对用户未登录的情况做一个埋点统计,计算转化率,需要对一键登录和右上角关闭做埋点. 因为百度为了防止开发者滥用,11.26版本起废弃了swan.getUserInfo 和 swa ...

  2. 百度小程序怎么添加到主屏幕将百度小程序放到手机桌面?

    百度小程序在一些场景下使用还是非常方便,如果遇到需要经常使用的百度小程序,将该百度小程序添加到手机桌面上,下次直接点击打开将更方便. 例如:草柴百度小程序很多人都在用每天免费领取美团外卖红包优惠券.饿 ...

  3. 小程序开发(一)新建/拉取项目,配置远程仓库

    一.前期准备工作及工具 1.工具 微信开发者工具.Git 2.准备工作 相关开发工具的安装和配置工作请自行百度 二.新建或拉取远程项目 1.打开微信开发者工具(扫码登录等验证工作自行操作),选择小程序 ...

  4. 计算机毕业设计Python+uniapp基于微信小程序的校园快递代取平台(小程序+源码+LW)

    计算机毕业设计Python+uniapp基于微信小程序的校园快递代取平台(小程序+源码+LW) 该项目含有源码.文档.程序.数据库.配套开发软件.软件安装教程 项目运行 环境配置: Pychram社区 ...

  5. 用代码打出登录_百度小程序商城用百家号能免费开通,具体操作步骤

    原创:轻栈 百度智能小程序 一说百度智能小程序,不少商家缓缓打出一个问号,这是什么,怎么没有听说过? 商家只开通微信小程序,完全没有考虑搜索引擎的感受. 百度小程序也是一个流量入口 打开手机百度APP ...

  6. 用代码打出登录_百度小程序商城用百家号能免费开通,如何操作?

    原创:轻栈 百度智能小程序 一说百度智能小程序,不少商家缓缓打出一个问号,这是什么,怎么没有听说过? 小朋友,你是否有很多问号? 商家只开通微信小程序,完全没有考虑搜索引擎的感受. 百度小程序也是一个 ...

  7. 百度mip推送工具_百度小程序继熊掌号后,百度搜索站长平台的又一脱了裤子放屁闹剧...

    最近服务器租用(主机吧)可能对百度搜索越来越敌视了,但这并非我本意,但是面对这百度搜索一次又一次的挑战站长们的耐心,服务器租用网(主机吧)这次是实在忍无可忍了,大家都知道这两年百度搜索的所做所为,一会 ...

  8. 注册了个人百家号、熊掌号就不能注册公司百度小程序了?

    我是卢松松,点点上面的头像,欢迎关注我哦!百度真的是在一次次令人失望的路上越走越远了.这两天接了一个企业网站制作的业务,准备给一个网站做个百度小程序,结果在百度小程序官网进行注册的时候,却提示&quo ...

  9. PHP微信小程序之获取并解密用户数据获取openId和unionId

    前言 微信小程序API文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html 在实际的小程序开发中,往往需要用户授权登陆并获取用 ...

最新文章

  1. Modernizr:HTML5和CSS3的开发利器
  2. python基础代码事例-数据科学Python基础(附示例代码和练习题目)
  3. vue 圆形百分比进度条_vue实用组件——圆环百分比进度条
  4. 样本距离计算、向量范数、矩阵范数
  5. MySQL sql trace的使用
  6. vscode终端乱码
  7. 计算机ip配置不正确怎么办,电脑ip地址不对该怎么办
  8. a form 出口享惠情况_关于“出口享惠情况”如何填报?
  9. 【k8s】K8S中的IP地址(Node IP、Pod IP、Cluster IP、External IP、Internal-IP)
  10. 【前端小技能】Vue集成百度离线地图
  11. VBA单元格、工作表、工作簿
  12. Miller_Rabin 米勒拉宾概率筛【模板】
  13. 一级域名和二级域名的区别
  14. 可穿戴设备的发展前景
  15. c语言用控制台写——俄罗斯方块
  16. 认识Hyperledger
  17. 营销值得学:创业做生意如何降维打击?
  18. Java高级:字节跳动历年校招Java面试真题解析
  19. 国密SM4,layui前端 和.net core后台 加密解密 .net加密解密
  20. java web—水果店管理系统

热门文章

  1. markdown数学公式编辑
  2. 手把手教你引入iconfont图标字体(方法一)
  3. 文本表示模型(1):主题模型LSA、pLSA、LDA
  4. 计算机职业规划英语范文,商务英语职业生涯规划书范文1.doc
  5. ROT系列密码加解密实现(python)
  6. ?php $o00oo0=urldecode,$O00OO0=urldecode 解密
  7. RPC304A POE系统四通道PSE控制芯片,POE Controller,PSE Controller ,主要PIN IP804/IP808,TPS28361等芯片
  8. Vue笔记(五)—— Vue render渲染/组件嵌套之iView官网案例改写Table表格组件及Modal弹窗/对话框/模态框组件内容自定义详解
  9. 中安威士:大数据是否能解决挂满“汗水”的基层警务
  10. Struts2 2.5.2的套路