下面是PHP配合微信小程序实现获取手机号码的完整攻略:
一、背景知识
在使用微信小程序开发中,有时候需要获取用户授权后的手机号码信息。但是,仅仅使用微信小程序的API是不够的,需要服务端提供支持。本攻略将涉及到前端(微信小程序)、后端(PHP)、数据库等多个方面的知识。
二、前置条件
- 微信开发者工具
 - PHP环境
 - 数据库
 
三、步骤
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:前端调用后端接口获取用户手机号码,并将手机号码插入到数据库中
- 前端代码:
 
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)
  }
})
- 后端代码:
 
// 获取前端传递过来的参数
$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




大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)