首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

微信公眾號獲取用戶 OpenID 的兩種標準方式詳解

     編輯:程式設計疑難解答

核心概念

OpenID:用戶在某公眾號下的唯一標識,同一微信用戶對不同公眾號有不同 OpenID。獲取 OpenID 是發送模板消息、發放紅包、網頁授權等業務的前提。

方式一:用戶關注事件(靜默獲取)

  • 用戶點擊關注公眾號時,微信服務器向開發者配置的 URL 推送 event=subscribe 的 XML 報文;
  • 報文中直接包含 <FromUserName><![CDATA[OPENID]]></FromUserName>;
  • 開發者解析 XML,入庫存儲 OpenID,後續業務直接讀取;
  • 優點:用戶無感知、無需授權頁面;缺點:僅限已關注用戶,取消關注後失效(但 OpenID 不變,仍可發紅包)。

方式二:網頁授權(OAuth2.0)

  1. 構造授權 URL:
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
    scope=snsapi_base 靜默授權(不彈窗), 需用戶確認;
  2. 用戶點擊鏈接,微信跳轉至 redirect_uri?code=CODE&state=STATE;
  3. 服務端拿 code 換取 access_token + openid:
    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code;
  4. 響應 JSON 中包含 openid,業務邏輯處理後重定向回目標頁。

代碼片段(Java Spring Boot 示例)

@GetMapping("/wx/redirect")
public String wxRedirect(@RequestParam String code) {
    String url = "https://api.weixin.qq.com/sns/oauth2/access_token?" +
                 "appid=" + appId + "&secret=" + secret + "&code=" + code + "&grant_type=authorization_code";
    JSONObject json = restTemplate.getForObject(url, JSONObject.class);
    String openid = json.getString("openid");
    // 存庫、設置 Session、跳轉業務頁...
    return "redirect:/business/page";
}

選型建議

場景推薦方式
已關注用戶、需長期觸達關注事件入庫
未關注用戶、H5 頁面、一次性業務網頁授權 snsapi_base
需獲取頭像/昵稱等用戶信息網頁授權 snsapi_userinfo

避坑指南

  • 授權回調域名需在公眾平台「開發配置」中設置「授權回調頁域名」;
  • code 只能使用一次、5 分鐘過期,換取 access_token 後應緩存(有效期 2 小時);
  • 方倍工作室、微信官方 Demo 均有完整可運行示例,建議直接參考。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved