PHP配合微信小程序实现获取手机号码详解

2023-12-12php编程
80

下面是PHP配合微信小程序实现获取手机号码的完整攻略:

一、背景知识

在使用微信小程序开发中,有时候需要获取用户授权后的手机号码信息。但是,仅仅使用微信小程序的API是不够的,需要服务端提供支持。本攻略将涉及到前端(微信小程序)、后端(PHP)、数据库等多个方面的知识。

二、前置条件

  1. 微信开发者工具
  2. PHP环境
  3. 数据库

三、步骤

1. 前端代码编写

微信小程序端需要引入一个获取手机号码的组件,并调用微信的API获取用户的手机号码。具体代码示例如下:

<template>
  <button class="get-phone-btn" bindgetphonenumber="getPhoneNumber">获取手机号码</button>
</template>

<script>
export default{
  data(){
    return{
      phoneNumber:'',
    }
  },

  methods:{
    // 获取手机号码
    getPhoneNumber(res){
      console.log(res.detail)
      if(res.detail.errMsg !== 'getPhoneNumber:ok'){
        console.log('获取手机号码失败')
        return false
      }
      console.log('手机号码为:', res.detail.phoneNumber)
      this.phoneNumber = res.detail.phoneNumber
    }
  }
}
</script>

2. 后端代码编写

在PHP的代码中,需要接收前端传递过来的加密数据和一个session,通过后台调用微信提供的API解密之后,就可以获得用户的手机号码了。具体代码示例如下:

function getPhoneNum($encryptedData, $iv, $sessionKey){
  // 解密手机号码信息
  include_once 'wxBizDataCrypt.php'; // 用于解密微信数据的文件
  $crypt = new WXBizDataCrypt($appId, $sessionKey);
  $errCode = $crypt->decryptData($encryptedData, $iv, $data); // 解密得到原始的json字符串
  if ($errCode == 0) {
      $result = json_decode($data,true); // 解析json字符串
      return $result['phoneNumber']; // 返回手机号码
  } else {
      return false;
  }
}

// 获取前端传递过来的参数
$encryptedData = $_POST['encryptedData'];
$iv = $_POST['iv'];
$sessionKey = $_POST['sessionKey'];

// 获取用户手机号码
$phoneNum = getPhoneNum($encryptedData, $iv, $sessionKey);

// 将手机号码插入到数据库中
$sql = "INSERT INTO users (phone_number) VALUES ('".$phoneNum."')";
$pdo->exec($sql);

3. 数据库操作

前面的代码中,我们需要将获取到的用户手机号码插入数据库中。这里假设我们的数据库名为 mydb,表名为 users,我们需要在数据库中创建一张名为 users 的表,表结构如下:

CREATE TABLE users(
  id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  phone_number CHAR(11) NOT NULL
)ENGINE=MyISAM DEFAULT CHARSET=utf8; 

4. 示例说明

示例1:前端调用后端接口获取用户手机号码,并将手机号码插入到数据库中

  1. 前端代码:
wx.request({
  url: 'http://yourdomain.com/getPhoneNum.php',
  data: {
    'encryptedData': res.detail.encryptedData,
    'iv': res.detail.iv,
    'sessionKey': wx.getStorageSync('session_key')
  },
  method: 'POST',
  header: {
    'content-type': 'application/x-www-form-urlencoded'
  },
  success: (res) => {
    console.log(res.data)
  }
})
  1. 后端代码:
// 获取前端传递过来的参数
$encryptedData = $_POST['encryptedData'];
$iv = $_POST['iv'];
$sessionKey = $_POST['sessionKey'];

// 获取用户手机号码
$phoneNum = getPhoneNum($encryptedData, $iv, $sessionKey);

// 将手机号码插入到数据库中
$sql = "INSERT INTO users (phone_number) VALUES ('".$phoneNum."')";
$pdo->exec($sql);

// 返回结果
echo json_encode(array('status' => 'success'));

示例2:后端通过API获取用户的手机号码

function getPhoneNumberByOpenid($appId, $appSecret, $encryptedData, $session_key, $iv){
  $result = getDecryptData($appId, $appSecret, $session_key, $encryptedData, $iv);
  return $result['phoneNumber'];
}

function getDecryptData($appId, $appSecret, $session_key, $encryptedData, $iv){
    $url = "https://api.weixin.qq.com/wxa/getpaidunionid?access_token=".$this->getAccessToken($appId, $appSecret);

    $params = array(
        'encryptedData' => $encryptedData,
        'iv' => $iv,
        'session_key' => $session_key
    );

    $options = array(
        'http' => array(
            'header' => 'Content-type: application/x-www-form-urlencoded',
            'method' => 'POST',
            'content' => http_build_query($params),
        ),
    );

    $context = stream_context_create($options);
    $result = file_get_contents($url, false, $context);

    return json_decode($result, true);
}

四、小结

以上就是本攻略的全部内容。总的来说,通过PHP来实现微信小程序中获取用户手机号码的流程还是比较复杂的。需要前后端相互配合,才能最终达到获取用户手机号码的目的。但是,只要按照本攻略的步骤进行操作,就可以顺利的实现该功能了。

The End

相关推荐

php实现多语言网站的思路和构想
我们在进行系统或者网站开发的时候,有需要多语言切换的功能。PHP作为一种常用的编程语言,可以很方便地实现多语言网站功能。本文将介绍如何使用PHP实现多语言网站功能,并提供相应的代码示例。 创建语言文件 首先,需要创建不同语言的语言文件。每个语言文件...
2025-08-20 php编程
83

php通过调用谷歌翻译API实现网站中英文翻译
我们在制作网站时候,要实现中英文双语网站,通过调用api方式实现文章内容自动翻译,这个要怎么操作呢?以调用谷歌翻译api实现翻译。 获取谷歌翻译秘钥 我们需要到Google Cloud控制台创建一个项目,并启用Cloud Translation API。然后,生成一个API密钥,这个...
2025-08-20 php编程
200

PHP+HTML集成DeepSeek API,实现一个简单的聊天对话项目
PHP+HTML集成DeepSeek API,实现一个简单的聊天对话项目,最终实现效果如下: 准备工作 PHP环境 :确保你的开发环境中安装了PHP。 DeepSeek API密钥 :注册并获取DeepSeek API的访问密钥。 创建api调用接口 创建一个PHP脚本(api.php),用于调用DeepSeek API...
2025-03-31 php编程
100

PHP怎么删除系统中的文件和目录
我们在使用php编程时候,有时候需要删除系统中某个目录。在php中,删除目录是通过使用一些内置函数来完成的。本文将介绍如何使用php中的内置函数删除目录。 一、unlink()函数 PHP中的unlink()函数可以用于删除一个文件,而当用于删除目录时,它只能删除目录...
2025-02-21 php编程
184

js+php实现用户登录
一.ajax完成用户名异步检验 html代码: !DOCTYPE htmlhtml lang="en"head meta charset="UTF-8" title用户名是否存在/title/headbodyform action="" method="post" table tr td用户名/td tdinput type="text" name="username" placeholder="请输入用户名" cla...
2025-01-09 php编程
93

PHP如何使用session实现保存用户登录信息
session在php中是一个非常重要的东西,像我们用户登录一般都使用到session这个东西,相对于cookie来说session 要安全很多,同时我们购物车经常使用session来做临时的记录保存哦。 使用session保存页面登录信息 1、数据库连接配置页面:connectvars.php ?php/...
2024-11-05 php编程
95