帝国cms 微信小程序获取手机号码的api接口

<?php
// 文件路径: ecmsapi/index.php?mod=wechat&act=getphone

// 设置响应头
header('Content-Type: application/json;charset=utf-8');
$appid = 'XXXX'; 
$secret = 'XXXX'; 

// 检查请求方法
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    echo json_encode(['code' => 0, 'msg' => '请求方法错误']);
    exit;
}

// 获取参数
$code = isset($_POST['code']) ? $_POST['code'] : '';
$openid = isset($_POST['openid']) ? $_POST['openid'] : '';
$session_key = isset($_POST['session_key']) ? $_POST['session_key'] : '';

// 参数验证
if (empty($code)) {
    echo json_encode(['code' => 0, 'msg' => '参数不完整:缺少code']);
    exit;
}

// 获取access_token (确保这个函数能正确获取有效的access_token)
$access_token = getAccessToken();
if (empty($access_token)) {
    echo json_encode(['code' => 0, 'msg' => '获取access_token失败']);
    exit;
}

// 调用微信接口获取手机号
$url = “https://api.weixin.qq.com/wxa/business/getuserphonenumber?access_token={$access_token}”;
$data = [
    'code' => $code
];

// 记录请求日志
error_log(“请求微信API: ” . $url);
error_log(“请求数据: ” . json_encode($data));

$result = httpRequest($url, json_encode($data), ['Content-Type: application/json']);
error_log(“微信API响应: ” . $result);

$result = json_decode($result, true);
// 检查微信接口返回结果
if (isset($result['errcode']) && $result['errcode'] == 0 && isset($result['phone_info']['phoneNumber'])) {
    // 成功获取手机号
    $phone = $result['phone_info']['phoneNumber'];
    
    // 可以在这里将手机号与openid关联并存入数据库
    // savePhoneToDatabase($openid, $phone);
    
    echo json_encode([
        'code' => 1,
        'msg' => '获取手机号成功',
        'data' => [
            'phone' => $phone
        ]
    ]);
} else {
    // 获取手机号失败
    $errMsg = isset($result['errmsg']) ? $result['errmsg'] : '获取手机号失败';
    $errCode = isset($result['errcode']) ? $result['errcode'] : 0;
    
    echo json_encode([
        'code' => 0,
        'msg' => “错误: {$errMsg}, 错误码: {$errCode}”
    ]);
}
exit;

/**
 * 获取微信接口调用凭证access_token
 * @return string access_token
 */
function getAccessToken() {
    $appid = 'XXXXXX'; 
    $secret = '3XXXXXX'; 
    // 使用文件缓存access_token
    $cache_file = __DIR__ . '/access_token_cache.json';
    $token_data = [];
    
    // 检查缓存文件是否存在且可读
    if (file_exists($cache_file) && is_readable($cache_file)) {
        $token_data = json_decode(file_get_contents($cache_file), true);
    }
    
    // 检查缓存的access_token是否有效
    if (isset($token_data['access_token']) && isset($token_data['expire_time']) && time() < $token_data['expire_time']) {
        error_log(“使用缓存的access_token: ” . $token_data['access_token']);
        return $token_data['access_token'];
    }
    
    // 重新获取access_token
    error_log(“重新获取access_token”);
    $url = “https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}”;
    $res = httpRequest($url);
    error_log(“微信token接口响应: ” . $res);
    
    $res = json_decode($res, true);
    
    if (isset($res['access_token'])) {
        $access_token = $res['access_token'];
        $expires_in = isset($res['expires_in']) ? intval($res['expires_in']) : 7200;
        $expire_time = time() + $expires_in – 200; // 提前200秒更新
        
        // 保存到缓存文件
        $token_data = [
            'access_token' => $access_token,
            'expire_time' => $expire_time
        ];
        
        // 确保目录存在且可写
        $dir = dirname($cache_file);
        if (!is_dir($dir)) {
            mkdir($dir, 0755, true);
        }
        
        // 写入缓存文件
        if (file_put_contents($cache_file, json_encode($token_data)) === false) {
            error_log(“无法写入access_token缓存文件”);
        }
        
        return $access_token;
    } else {
        error_log(“获取access_token失败: ” . json_encode($res));
        return '';
    }
}

/**
 * 发送HTTP请求
 * @param string $url 请求URL
 * @param string $data POST数据
 * @param array $headers 请求头
 * @return string 响应内容
 */
function httpRequest($url, $data = null, $headers = []) {
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
    
    if (!empty($data)) {
        curl_setopt($curl, CURLOPT_POST, true);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    
    if (!empty($headers)) {
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
    }
    
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    $output = curl_exec($curl);
    
    if ($output === false) {
        error_log(“CURL错误: ” . curl_error($curl));
    }
    
    curl_close($curl);
    
    return $output;
}
?>

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
水原一枝花的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容