検索
ホームページWeChat アプレットWeChatの開発WeChat パブリック プラットフォーム開発用の ACCESSTOKEN .Net の詳細な説明と取得例

この記事では、主に実用的な Java バージョンの WeChat パブリック プラットフォーム開発と、基本的なユーザー情報を取得するための WeChat に関する関連情報を紹介します。必要な友達はそれを参照してください。

フォロワーがパブリック アカウントと対話してメッセージを生成した後、パブリック アカウントは取得できます。フォロワーの情報 OpenID (暗号化された WeChat ID、各公式アカウントの各ユーザーの OpenID は一意です。異なる公式アカウントでは、同じユーザーの OpenID も異なります)。

パブリック アカウントは、インターフェイス を通じて、OpenID に基づいてニックネーム、アバター、性別、都市などの基本的なユーザー情報を取得できます。

開発者は、OpenID を通じて基本的なユーザー情報を取得できます。

公式ドキュメントを参照してください:

インターフェース呼び出しリクエスト: GET

。 api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

パラメータの説明

パラメータaccess_トークン呼び出し側インターフェース認証情報ですopenidは現在の公式アカウントに固有の一般ユーザーのIDですlangいいえ国と地域の言語バージョン、zh_CNに戻ります簡体字、zh_TW 繁体字中国語、en 英語返送手順
は必須ですか 説明

通常の状況では、WeChat は次の JSON

データ パケットを公開アカウントに返します:

 {
  "subscribe": 1, 
  "openid": "o6_bmjrPTlm6_2sgVt7hMZOPfL2M", 
  "nickname": "Band", 
  "sex": 1, 
  "language": "zh_CN", 
  "city": "广州", 
  "province": "广东", 
  "country": "中国", 
  "headimgurl":  "http://wx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/0", 
  "subscribe_time": 1382694957,
  "unionid": " o6_bmasdasdsad6_2sgVt7hMZOPfL"
  "remark": "",
  "groupid": 0
}
パラメータの説明

パラメータ命令subscribe 値が 0 の場合、ユーザーは公開アカウントをフォローしておらず、openid の情報を取得できないことを意味します。ユーザーの ID は、現在の公開アカウントです。ニックネームユーザーのニックネーム 性別 値が 1 の場合は男性、値が 2 の場合は男性です。女性です、値が0の場合は不明ですcityuser CitycountryUserの国provinceUserの都道府県言語ユーザーの言語、簡体字中国語は zh_CNheadimgurl ユーザー アバター、最後の値 正方形のアバターのサイズを表します (0、46、64、96、132 の値として利用可能、0 は 640*640 の正方形のアバターを表します)。ユーザーがアバターを持っていない場合、ユーザーがアバターを変更した場合、元のアバター URL は無効になります。フォロータイムunionid ユーザーが公式アカウントを WeChat オープンプラットフォームアカウントにバインドした後にのみ、このフィールドが表示されます。 詳細については、「ユーザーの個人情報の取得 (UnionID メカニズム)」を参照してください。パブリック アカウント オペレーターによるファンへのパブリック アカウント オペレーターは、WeChat パブリック プラットフォーム インターフェイスでファンを追加できます 注: groupid ユーザーが所属する ID

错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):

 {"errcode":40013,"errmsg":"invalid appid"}

根据上面的信息,我们定义一个用户信息类来存放用户的基本信息。

package com.souvc.weixin.pojo;
/**
* 类名: WeixinUserInfo 
* 描述: 微信用户的基本信息 
* 开发人员: souvc 
* 创建时间: 2015-11-27 
* 发布版本:V1.0 
 */
public class WeixinUserInfo {
  // 用户的标识
  private String openId;
  // 关注状态(1是关注,0是未关注),未关注时获取不到其余信息
  private int subscribe;
  // 用户关注时间,为时间戳。如果用户曾多次关注,则取最后关注时间
  private String subscribeTime;
  // 昵称
  private String nickname;
  // 用户的性别(1是男性,2是女性,0是未知)
  private int sex;
  // 用户所在国家
  private String country;
  // 用户所在省份
  private String province;
  // 用户所在城市
  private String city;
  // 用户的语言,简体中文为zh_CN
  private String language;
  // 用户头像
  private String headImgUrl;
  public String getOpenId() {
    return openId;
  }
  public void setOpenId(String openId) {
    this.openId = openId;
  }
  public int getSubscribe() {
    return subscribe;
  }
  public void setSubscribe(int subscribe) {
    this.subscribe = subscribe;
  }
  public String getSubscribeTime() {
    return subscribeTime;
  }
  public void setSubscribeTime(String subscribeTime) {
    this.subscribeTime = subscribeTime;
  }
  public String getNickname() {
    return nickname;
  }
  public void setNickname(String nickname) {
    this.nickname = nickname;
  }
  public int getSex() {
    return sex;
  }
  public void setSex(int sex) {
    this.sex = sex;
  }
  public String getCountry() {
    return country;
  }
  public void setCountry(String country) {
    this.country = country;
  }
  public String getProvince() {
    return province;
  }
  public void setProvince(String province) {
    this.province = province;
  }
  public String getCity() {
    return city;
  }
  public void setCity(String city) {
    this.city = city;
  }
  public String getLanguage() {
    return language;
  }
  public void setLanguage(String language) {
    this.language = language;
  }
  public String getHeadImgUrl() {
    return headImgUrl;
  }
  public void setHeadImgUrl(String headImgUrl) {
    this.headImgUrl = headImgUrl;
  }
}

我们先来看看获取用户信息的接口:

https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN

根据分析,获取用户的基本信息需要一个token。

package com.souvc.weixin.pojo;
/**
* 类名: Token 
* 描述: 凭证 
* 开发人员: souvc 
* 创建时间: 2015-11-27 
* 发布版本:V1.0 
 */
public class Token {
  // 接口访问凭证
  private String accessToken;
  // 凭证有效期,单位:秒
  private int expiresIn;
  public String getAccessToken() {
    return accessToken;
  }
  public void setAccessToken(String accessToken) {
    this.accessToken = accessToken;
  }
  public int getExpiresIn() {
    return expiresIn;
  }
  public void setExpiresIn(int expiresIn) {
    this.expiresIn = expiresIn;
  }
}

https请求,需要的信任管理器

package com.souvc.weixin.util;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;
/**
* 类名: MyX509TrustManager 
* 描述:信任管理器 
* 开发人员: souvc 
* 创建时间: 2015-11-27 
* 发布版本:V1.0 
 */
public class MyX509TrustManager implements X509TrustManager {
  // 检查客户端证书
  public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
  }
  // 检查服务器端证书
  public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
  }
  // 返回受信任的X509证书数组
  public X509Certificate[] getAcceptedIssuers() {
    return null;
  }
}

封装了一个公共类:

package com.souvc.weixin.util;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.ConnectException;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import net.sf.json.JSONException;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.souvc.weixin.pojo.Token;
/**
* 类名: CommonUtil 
* 描述: 通用工具类 
* 开发人员: souvc 
* 创建时间: 2015-11-27 
* 发布版本:V1.0 
 */
public class CommonUtil {
  private static Logger log = LoggerFactory.getLogger(CommonUtil.class);
  // 凭证获取(GET)
  public final static String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";
  /**
   * 发送https请求
   * 
   * @param requestUrl 请求地址
   * @param requestMethod 请求方式(GET、POST)
   * @param outputStr 提交的数据
   * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值)
   */
  public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {
    JSONObject jsonObject = null;
    try {
      // 创建SSLContext对象,并使用我们指定的信任管理器初始化
      TrustManager[] tm = { new MyX509TrustManager() };
      SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
      sslContext.init(null, tm, new java.security.SecureRandom());
      // 从上述SSLContext对象中得到SSLSocketFactory对象
      SSLSocketFactory ssf = sslContext.getSocketFactory();
      URL url = new URL(requestUrl);
      HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
      conn.setSSLSocketFactory(ssf);
      conn.setDoOutput(true);
      conn.setDoInput(true);
      conn.setUseCaches(false);
      // 设置请求方式(GET/POST)
      conn.setRequestMethod(requestMethod);
      // 当outputStr不为null时向输出流写数据
      if (null != outputStr) {
        OutputStream outputStream = conn.getOutputStream();
        // 注意编码格式
        outputStream.write(outputStr.getBytes("UTF-8"));
        outputStream.close();
      }
      // 从输入流读取返回内容
      InputStream inputStream = conn.getInputStream();
      InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
      BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
      String str = null;
      StringBuffer buffer = new StringBuffer();
      while ((str = bufferedReader.readLine()) != null) {
        buffer.append(str);
      }
      // 释放资源
      bufferedReader.close();
      inputStreamReader.close();
      inputStream.close();
      inputStream = null;
      conn.disconnect();
      jsonObject = JSONObject.fromObject(buffer.toString());
    } catch (ConnectException ce) {
      log.error("连接超时:{}", ce);
    } catch (Exception e) {
      log.error("https请求异常:{}", e);
    }
    return jsonObject;
  }
  /**
   * 获取接口访问凭证
   * 
   * @param appid 凭证
   * @param appsecret 密钥
   * @return
   */
  public static Token getToken(String appid, String appsecret) {
    Token token = null;
    String requestUrl = token_url.replace("APPID", appid).replace("APPSECRET", appsecret);
    // 发起GET请求获取凭证
    JSONObject jsonObject = httpsRequest(requestUrl, "GET", null);
    if (null != jsonObject) {
      try {
        token = new Token();
        token.setAccessToken(jsonObject.getString("access_token"));
        token.setExpiresIn(jsonObject.getInt("expires_in"));
      } catch (JSONException e) {
        token = null;
        // 获取token失败
        log.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));
      }
    }
    return token;
  }
  /**
   * URL编码(utf-8)
   * 
   * @param source
   * @return
   */
  public static String urlEncodeUTF8(String source) {
    String result = source;
    try {
      result = java.net.URLEncoder.encode(source, "utf-8");
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }
    return result;
  }
  /**
   * 根据内容类型判断文件扩展名
   * 
   * @param contentType 内容类型
   * @return
   */
  public static String getFileExt(String contentType) {
    String fileExt = "";
    if ("image/jpeg".equals(contentType))
      fileExt = ".jpg";
    else if ("audio/mpeg".equals(contentType))
      fileExt = ".mp3";
    else if ("audio/amr".equals(contentType))
      fileExt = ".amr";
    else if ("video/mp4".equals(contentType))
      fileExt = ".mp4";
    else if ("video/mpeg4".equals(contentType))
      fileExt = ".mp4";
    return fileExt;
  }
}

获取用户基本信息的方法:

/**
   * 获取用户信息
   * 
   * @param accessToken 接口访问凭证
   * @param openId 用户标识
   * @return WeixinUserInfo
   */
  public static WeixinUserInfo getUserInfo(String accessToken, String openId) {
    WeixinUserInfo weixinUserInfo = null;
    // 拼接请求地址
    String requestUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID";
    requestUrl = requestUrl.replace("ACCESS_TOKEN", accessToken).replace("OPENID", openId);
    // 获取用户信息
    JSONObject jsonObject = CommonUtil.httpsRequest(requestUrl, "GET", null);
    if (null != jsonObject) {
      try {
        weixinUserInfo = new WeixinUserInfo();
        // 用户的标识
        weixinUserInfo.setOpenId(jsonObject.getString("openid"));
        // 关注状态(1是关注,0是未关注),未关注时获取不到其余信息
        weixinUserInfo.setSubscribe(jsonObject.getInt("subscribe"));
        // 用户关注时间
        weixinUserInfo.setSubscribeTime(jsonObject.getString("subscribe_time"));
        // 昵称
        weixinUserInfo.setNickname(jsonObject.getString("nickname"));
        // 用户的性别(1是男性,2是女性,0是未知)
        weixinUserInfo.setSex(jsonObject.getInt("sex"));
        // 用户所在国家
        weixinUserInfo.setCountry(jsonObject.getString("country"));
        // 用户所在省份
        weixinUserInfo.setProvince(jsonObject.getString("province"));
        // 用户所在城市
        weixinUserInfo.setCity(jsonObject.getString("city"));
        // 用户的语言,简体中文为zh_CN
        weixinUserInfo.setLanguage(jsonObject.getString("language"));
        // 用户头像
        weixinUserInfo.setHeadImgUrl(jsonObject.getString("headimgurl"));
      } catch (Exception e) {
        if (0 == weixinUserInfo.getSubscribe()) {
          log.error("用户{}已取消关注", weixinUserInfo.getOpenId());
        } else {
          int errorCode = jsonObject.getInt("errcode");
          String errorMsg = jsonObject.getString("errmsg");
          log.error("获取用户信息失败 errcode:{} errmsg:{}", errorCode, errorMsg);
        }
      }
    }
    return weixinUserInfo;
  }

测试的方法:注意将以下替换为自己的appid和秘钥。

public static void main(String args[]) {
    // 获取接口访问凭证
    String accessToken = CommonUtil.getToken("xxxx", "xxxx").getAccessToken();
    /**
     * 获取用户信息
     */
    WeixinUserInfo user = getUserInfo(accessToken, "ooK-yuJvd9gEegH6nRIen-gnLrVw");
    System.out.println("OpenID:" + user.getOpenId());
    System.out.println("关注状态:" + user.getSubscribe());
    System.out.println("关注时间:" + user.getSubscribeTime());
    System.out.println("昵称:" + user.getNickname());
    System.out.println("性别:" + user.getSex());
    System.out.println("国家:" + user.getCountry());
    System.out.println("省份:" + user.getProvince());
    System.out.println("城市:" + user.getCity());
    System.out.println("语言:" + user.getLanguage());
    System.out.println("头像:" + user.getHeadImgUrl());
  }

效果如下:

OpenID:ooK-yuJvd9gEegH6nRIen-gnLrVw
关注状态:1
关注时间:1449021142
昵称:风少
性别:1
国家:中国
省份:广东
城市:广州
语言:zh_CN
头像:http://wx.qlogo.cn/mmopen/lOZIEvyfCa7aZQ7CkiamdpQicUDnGDEC0nzb7ZALjdl3TzFVFEHWM1AFqEXnicNIDeh0IQYTt0NrIP06ibg4W5WflASfFfX9qqib0/0

ユーザー管理
グループ

以上がWeChat パブリック プラットフォーム開発用の ACCESSTOKEN .Net の詳細な説明と取得例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)