1. apikey, appsecret 및 판매자 계정 획득
공용 계정 및 판매자 계정 등록
2. 사용자의 OpenId 획득
1. [인증 콜백 페이지 도메인 이름]
을 설정합니다. 공식 설명: 사용자가 웹 인증 페이지에서 공식 계정 인증에 동의하면 WeChat은 인증 데이터를 콜백 페이지에 전달하고, 안전과 신뢰성을 보장하려면 콜백 페이지가 여기에 도메인 이름이어야 합니다. 콜백 페이지 도메인 이름은 IP 주소를 지원하지 않습니다.
2. 사용자 승인에 동의합니다
위챗 메뉴에 이 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: 공식 계정의 고유 식별자
리디렉션_uri: 리디렉션된 URL, 즉 페이지 인증 후 리디렉션
범위: 애플리케이션 인증 범위
snsapi_base: 인증 페이지를 팝업하지 않고 직접 점프하며 사용자 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에서 가져온 내용입니다. 편집자가 WeChat 공개 계정 결제를 위한 사용자 openId를 얻는 방법을 알려드리겠습니다. (1) 마음에 드셨으면 좋겠습니다.
위챗 공개계정 결제에 대한 자세한 내용은 (1) 사용자 openId 관련 글을 얻는 방법은 PHP 중국어 홈페이지를 참고해주세요!