Maison  >  Article  >  Applet WeChat  >  Paiement du compte public WeChat (1) Comment obtenir l'openId de l'utilisateur

Paiement du compte public WeChat (1) Comment obtenir l'openId de l'utilisateur

高洛峰
高洛峰original
2017-02-04 11:36:392757parcourir

1. Obtenez un compte apikey, appsecret et marchand

Enregistrez un compte public et un compte marchand

2. Obtenez l'OpenId de l'utilisateur

1. Définissez le [nom de domaine de la page de rappel d'autorisation]


Explication officielle : une fois que l'utilisateur a accepté d'autoriser le compte officiel sur la page d'autorisation Web, WeChat transmettra les données d'autorisation à une page de rappel, et la page de rappel doit être ici le nom de domaine pour garantir la sécurité et la fiabilité. Le nom de domaine de la page de rappel ne prend pas en charge les adresses IP.

Paiement du compte public WeChat (1) Comment obtenir lopenId de lutilisateur

2. L'utilisateur accepte d'autoriser


J'ai écrit cette URL dans le menu WeChat, et en entrant sur cette page, laissez l'utilisateur accepter. Remarque : Il semble être autorisé en silence, l'utilisateur ne le sait pas


 1.url:

https://open.weixin.qq.com/connect/oauth/authorize?appid= appid&redirect_uri=url&response_type =code&scope=snsapi_userinfo&state=park#wechat_redirect

Paramètres : appid : l'identifiant unique du compte officiel


redirect_uri : l'url redirigée, qui est la page à rediriger après autorisation


Portée : portée de l'autorisation de l'application


snsapi_base : n'affiche pas la page d'autorisation, saute directement et ne peut obtenir que l'openid de l'utilisateur


snsapi_userinfo : La page d'autorisation apparaît et vous pouvez obtenir le pseudo, le sexe et l'emplacement via openid


État : Paramètres après redirection


2. Un code sera généré après accord de l'utilisateur, valable uniquement pendant quelques minutes.

String code = request.getParameter("code")

3.code pour openId

/**
 * 常量类
 * @author rory.wu
 *
 */
public class Constants {
 // 第三方用户唯一凭证
 public static String appid = "";
 // 第三方用户唯一凭证密钥
 public static String appsecret = "";
 //商户ID
 public static String mch_id="";
 //获取openId
 public static String oauth_url = "https://api.weixin.qq.com/sns/oauth/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
}
/**
 * 通用工具类
 * @author rory.wu
 * @version .
 * @since 年月日
 */
 public class CommonUtil {
 private static Logger log = Logger.getLogger(CommonUtil.class);
 public static JSONObject httpsRequestToJsonObject(String requestUrl, String requestMethod, String outputStr) {
  JSONObject jsonObject = null;
  try {
  StringBuffer buffer = httpsRequest(requestUrl, requestMethod, outputStr);
  jsonObject = JSONObject.fromObject(buffer.toString());
  } catch (ConnectException ce) {
  log.error("连接超时:"+ce.getMessage());
  } catch (Exception e) {
  log.error("https请求异常:"+e.getMessage());
  }
  return jsonObject;
 }
  
 private static StringBuffer httpsRequest(String requestUrl, String requestMethod, String output)
  throws NoSuchAlgorithmException, NoSuchProviderException, KeyManagementException, MalformedURLException,
  IOException, ProtocolException, UnsupportedEncodingException {
  URL url = new URL(requestUrl);
  HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
  connection.setDoOutput(true);
  connection.setDoInput(true);
  connection.setUseCaches(false);
  connection.setRequestMethod(requestMethod);
  if (null != output) {
  OutputStream outputStream = connection.getOutputStream();
  outputStream.write(output.getBytes("UTF-"));
  outputStream.close();
  }
  // 从输入流读取返回内容
  InputStream inputStream = connection.getInputStream();
  InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-");
  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;
  connection.disconnect();
  return buffer;
 } }
 
   /**
 * 获取用户的openId,并放入session
 * @param code 微信返回的code
 */
 private void setOpenId(String code) {
  session.put("code", code);
  String oauth_url = Constants.oauth_url.replace("APPID", Constants.appid).replace("SECRET", Constants.appsecret).replace("CODE", String.valueOf(session.get("code")));
  log.info("oauth_url:"+oauth_url);
  JSONObject jsonObject = CommonUtil.httpsRequestToJsonObject(oauth_url, "POST", null);
  log.info("jsonObject:"+jsonObject);
  Object errorCode = jsonObject.get("errcode");
  if(errorCode != null) {
  log.info("code不合法");
  }else{
  String openId = jsonObject.getString("openid");
  log.info("openId:"+openId);
  session.put("openId", openId);
  }
 }
oauth_url返回的格式是:
  {
   "access_token":"ACCESS_TOKEN",
   "expires_in":,
 "refresh_token":"REFRESH_TOKEN",
 "openid":"OPENID", "scope":"SCOPE",
 "unionid": "o_bmasdasdsad_sgVthMZOPfL"
 }
Code无效时:
  {
   "errcode":
   ,"errmsg":"invalid code"
 }

Le contenu ci-dessus est le paiement du compte public WeChat (1) comment obtenir l'openId utilisateur partagé par l'éditeur de Script House. J'espère qu'il vous plaira.

Pour plus de paiements par compte public WeChat (1) Comment obtenir des articles sur l'utilisateur openId, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn