Heim  >  Artikel  >  WeChat-Applet  >  Zahlung für das öffentliche WeChat-Konto (1) So erhalten Sie die Benutzer-OpenId

Zahlung für das öffentliche WeChat-Konto (1) So erhalten Sie die Benutzer-OpenId

高洛峰
高洛峰Original
2017-02-04 11:36:392656Durchsuche

1. Besorgen Sie sich ein apikey-, appsecret- und Händlerkonto

Registrieren Sie ein öffentliches Konto und ein Händlerkonto

2. Erhalten Sie die OpenId des Benutzers

1. Legen Sie den [Domänennamen der Autorisierungsrückrufseite] fest

Offizielle Erklärung: Nachdem der Benutzer der Autorisierung des offiziellen Kontos auf der Webautorisierungsseite zugestimmt hat, leitet WeChat die Autorisierungsdaten an eine Rückrufseite weiter. und die Rückrufseite muss hier ein Domainname sein, um Sicherheit und Zuverlässigkeit zu gewährleisten. Der Domänenname der Rückrufseite unterstützt keine IP-Adressen.

Zahlung für das öffentliche WeChat-Konto (1) So erhalten Sie die Benutzer-OpenId

2. Der Benutzer stimmt der Autorisierung zu

Ich habe diese URL im WeChat-Menü geschrieben und beim Betreten dieser Seite den Benutzer zustimmen lassen. Hinweis: Es scheint stillschweigend autorisiert zu sein, der Benutzer weiß es nicht

 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

Parameter: appid: die eindeutige Kennung des offiziellen Kontos

Redirect_uri: die umgeleitete URL, die die Seite darstellt soll nach der Autorisierung umgeleitet werden

Geltungsbereich: Anwendungsautorisierungsbereich

snsapi_base: ruft die Autorisierungsseite nicht auf, springt direkt und kann nur die Benutzer-OpenID abrufen

snsapi_userinfo: Die Autorisierungsseite wird angezeigt und Sie können den Spitznamen, das Geschlecht und den Standort über openid abrufen

Status: Parameter nach der Umleitung

2. Nach Zustimmung des Benutzers wird ein Code generiert, der nur für Minuten gültig ist.

String code = request.getParameter("code")

3.Code für 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"
 }

Der obige Inhalt ist die Zahlung für das öffentliche WeChat-Konto (1), wie man die vom Herausgeber von Script House geteilte Benutzer-OpenId erhält.

Weitere Informationen zu Zahlungen für öffentliche WeChat-Konten (1) So erhalten Sie Artikel zu Benutzer-OpenId, bitte beachten Sie die chinesische PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn