微信公众号支付(一)如何获取用户openId

互联网 17-2-4
一、获取apikey,appsecret与商户号

    官方解释:用户在网页授权页同意授权给公众号后,微信会将授权数据传给一个回调页面,回调页面需在此域名下,以确保安全可靠。回调页面域名不支持IP地址。

    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

    2.用户同意后会产生一个code,只有分钟时间的有效期。

String code = request.getParameter("code")

    3.code换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"   }

以上内容就是脚本之家的小编给大家分享的微信公众号支付(一)如何获取用户openId,希望大家喜欢。

更多微信公众号支付(一)如何获取用户openId相关文章请关注PHP中文网!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:Thinkphp微信公众号支付接口

相关资讯