一个分享WordPress、Zblog、Emlog、Typecho等主流博客的教程网站!
当前位置:网站首页 > 编程知识 > 正文

PHP获取微信小程序用户的openid

作者:xlnxin发布时间:2026-07-22分类:编程知识浏览:94


导读:在PHP后端获取微信小程序用户的OpenID,核心流程是接收小程序前端传来的临时登录凭证code,然后由你的PHP后端向微信服务器发起HTTPS请求,使用appid、sec...

在 PHP 后端获取微信小程序用户的 OpenID,核心流程是接收小程序前端传来的临时登录凭证code,然后由你的PHP后端向微信服务器发起 HTTPS请求,使用appid、secret和code来换取openid。

<?php
/**
 * 通过微信 code 换取 openid
 * @param string $appid 小程序的 AppID
 * @param string $secret 小程序的 AppSecret
 * @param string $js_code 小程序端 wx.login() 获取的 code
 * @return array 包含 openid、session_key 或错误信息的数组
 */
function getWxOpenid($appid, $secret, $js_code) {
    // 1. 拼接微信官方接口 URL
    $url = "https://api.weixin.qq.com/sns/jscode2session?" . http_build_query([
        'appid' => $appid,
        'secret' => $secret,
        'js_code' => $js_code,
        'grant_type' => 'authorization_code'
    ]);

    // 2. 使用 cURL 发起 HTTPS 请求
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 设置超时时间,防止卡住
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 开发环境可关闭,生产环境建议配置证书验证
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    
    $response = curl_exec($ch);
    
    // 检查 cURL 错误
    if (curl_errno($ch)) {
        $error = 'cURL Error: ' . curl_error($ch);
        curl_close($ch);
        return ['errcode' => -1, 'errmsg' => $error];
    }
    curl_close($ch);

    // 3. 解析微信返回的 JSON 数据
    $data = json_decode($response, true);
    
    // 4. 判断是否成功获取 openid
    if (isset($data['openid'])) {
        return $data; // 成功,返回包含 openid 和 session_key 的数组
    } else {
        // 失败,返回微信的错误信息
        return [
            'errcode' => $data['errcode'] ?? 500,
            'errmsg' => $data['errmsg'] ?? '获取 OpenID 失败'
        ];
    }
}

// 使用示例:
// 假设前端通过 POST 请求传入了 code
$code = $_POST['code'] ?? '';
if (empty($code)) {
    echo json_encode(['errcode' => 400, 'errmsg' => '缺少登录 code']);
    exit;
}

// 替换为你自己的小程序配置
$appid = '你的小程序 AppID';
$secret = '你的小程序 AppSecret';

$result = getWxOpenid($appid, $secret, $code);
header('Content-Type: application/json');
echo json_encode($result);
?>

标签:服务器程序小程序phpjs