1. apikey、appsecret、マーチャントアカウントを取得します
公式アカウントとマーチャントアカウントを登録します
2. ユーザーの OpenId を取得します
1. [認可コールバックページのドメイン名] を設定します
公式説明:ユーザーは Web ページで認証します。ページが公式アカウントの認証に同意すると、安全性と信頼性を確保するために、WeChat は認証データをコールバック ページに渡します。コールバック ページはこのドメイン名の下にある必要があります。コールバック ページのドメイン名は IP アドレスをサポートしません。
2. ユーザーは認証に同意します
WeChatメニューの下にこのURLを書き、このページに入るときにユーザーに同意してもらいました。注: サイレントに承認されているようで、ユーザーは知りません
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
パラメータ: appid: 公式アカウントの一意の識別子
redirect_uri: 承認後にリダイレクトされるページであるリダイレクト先のURL
ccotz ]公式アカウントの固有識別子による
、直接ジャンプ、ユーザーopenidのみ取得可能
snsapi_userinfo:認可ページをポップアップし、openid経由でニックネーム、性別、場所を取得可能
状態:リダイレクト後のパラメータ
2ユーザーが同意した後にコードが生成され、数分間のみ有効です。
String code = request.getParameter("code")
3. 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" }
上記の内容は、Script House の編集者が共有した、ユーザーの openId の取得方法を希望します。あなたはそれが好き。
WeChat パブリック アカウントの支払い (1) ユーザー openId の取得方法の詳細については、PHP 中国語 Web サイトに注目してください。