温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

微信公众号支付中怎样获取用户openId

发布时间:2021-01-25 11:30:51 来源:亿速云 阅读:546 作者:小新 栏目:移动开发

这篇文章将为大家详细讲解有关微信公众号支付中怎样获取用户openId,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

 一、获取apikey,appsecret与商户号

  注册公众号、商户号

二、获取用户的OpenId

  1.设置【授权回调页面域名】

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

微信公众号支付中怎样获取用户openId

  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:公众号的唯一标识

       redirect_uri:重定向的url,就是授权后要跳转的页面

       scope:应用授权作用域

          snsapi_base:不弹出授权页面,直接跳转,只能获取用户openid

          snsapi_userinfo:弹出授权页面,可通过openid拿到昵称、性别、所在地

       state:重定向后带的参数

    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”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI