ホームページ  >  記事  >  WeChat アプレット  >  WeChatパブリックアカウント決済 (1) ユーザーopenIdの取得方法

WeChatパブリックアカウント決済 (1) ユーザーopenIdの取得方法

高洛峰
高洛峰オリジナル
2017-02-04 11:36:392742ブラウズ

1. apikey、appsecret、マーチャントアカウントを取得します

公式アカウントとマーチャントアカウントを登録します

2. ユーザーの OpenId を取得します

1. [認可コールバックページのドメイン名] を設定します

公式説明:ユーザーは Web ページで認証します。ページが公式アカウントの認証に同意すると、安全性と信頼性を確保するために、WeChat は認証データをコールバック ページに渡します。コールバック ページはこのドメイン名の下にある必要があります。コールバック ページのドメイン名は IP アドレスをサポートしません。

WeChatパブリックアカウント決済 (1) ユーザーopenIdの取得方法

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 サイトに注目してください。

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