最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

微信公眾號(hào)支付(一)如何獲取用戶openId

 更新時(shí)間:2015年09月08日 22:51:33   投稿:mdxy-dxy  
本篇文章給大家介紹微信公眾號(hào)支付如何獲取用戶openid,需要授權(quán)回調(diào)頁面域名等一系列途徑實(shí)現(xiàn)此功能,需要的朋友可以參考下

一、獲取apikey,appsecret與商戶號(hào)

  注冊(cè)公眾號(hào)、商戶號(hào)

二、獲取用戶的OpenId

  1.設(shè)置【授權(quán)回調(diào)頁面域名】

    官方解釋:用戶在網(wǎng)頁授權(quán)頁同意授權(quán)給公眾號(hào)后,微信會(huì)將授權(quán)數(shù)據(jù)傳給一個(gè)回調(diào)頁面,回調(diào)頁面需在此域名下,以確保安全可靠?;卣{(diào)頁面域名不支持IP地址。

      

  2.用戶同意授權(quán)

    我是把這個(gè)url寫在微信菜單下的,當(dāng)進(jìn)入這個(gè)頁面的時(shí)候就讓用戶同意。注意:好像是靜默授權(quán)的,用戶不知道

    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

    參數(shù):appid:公眾號(hào)的唯一標(biāo)識(shí)

       redirect_uri:重定向的url,就是授權(quán)后要跳轉(zhuǎn)的頁面

       scope:應(yīng)用授權(quán)作用域

          snsapi_base:不彈出授權(quán)頁面,直接跳轉(zhuǎn),只能獲取用戶openid

          snsapi_userinfo:彈出授權(quán)頁面,可通過openid拿到昵稱、性別、所在地

       state:重定向后帶的參數(shù)

    2.用戶同意后會(huì)產(chǎn)生一個(gè)code,只有分鐘時(shí)間的有效期。

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("連接超時(shí):"+ce.getMessage());
  } catch (Exception e) {
  log.error("https請(qǐng)求異常:"+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();
  }
  // 從輸入流讀取返回內(nèi)容
  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無效時(shí):
  {
   "errcode":
   ,"errmsg":"invalid code"
 }

以上內(nèi)容就是腳本之家的小編給大家分享的微信公眾號(hào)支付(一)如何獲取用戶openId,希望大家喜歡。

相關(guān)文章

  • Intellij IDEA中啟動(dòng)多個(gè)微服務(wù)(開啟Run Dashboard管理)

    Intellij IDEA中啟動(dòng)多個(gè)微服務(wù)(開啟Run Dashboard管理)

    這篇文章主要介紹了Intellij IDEA中啟動(dòng)多個(gè)微服務(wù)(開啟Run Dashboard管理),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • SpringBoot實(shí)現(xiàn)優(yōu)雅停機(jī)的流程步驟

    SpringBoot實(shí)現(xiàn)優(yōu)雅停機(jī)的流程步驟

    優(yōu)雅停機(jī)(Graceful Shutdown) 是指在服務(wù)器需要關(guān)閉或重啟時(shí),能夠先處理完當(dāng)前正在進(jìn)行的請(qǐng)求,然后再停止服務(wù)的操作,本文給大家介紹了SpringBoot實(shí)現(xiàn)優(yōu)雅停機(jī)的流程步驟,需要的朋友可以參考下
    2024-03-03
  • SpringBoot中@PathVariable、@RequestParam和@RequestBody的區(qū)別和使用詳解

    SpringBoot中@PathVariable、@RequestParam和@RequestBody的區(qū)別和使用詳解

    這篇文章主要介紹了SpringBoot中@PathVariable、@RequestParam和@RequestBody的區(qū)別和使用詳解,@PathVariable 映射 URL 綁定的占位符,通過@RequestMapping注解中的{}占位符來標(biāo)識(shí)URL中的變量部分,需要的朋友可以參考下
    2024-01-01
  • 詳細(xì)分析JVM類加載機(jī)制

    詳細(xì)分析JVM類加載機(jī)制

    JVM將class文件字節(jié)碼文件加載到內(nèi)存中,?并將這些靜態(tài)數(shù)據(jù)轉(zhuǎn)換成方法區(qū)中的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu),在堆(并不一定在堆中,HotSpot在方法區(qū)中)中生成一個(gè)代表這個(gè)類的java.lang.Class?對(duì)象,作為方法區(qū)類數(shù)據(jù)的訪問入口,接下來將詳細(xì)講解JVM類加載機(jī)制
    2022-04-04
  • java Scanner類的使用示例代碼

    java Scanner類的使用示例代碼

    這篇文章主要介紹了java Scanner類的使用,Scanner類還可以任意地對(duì)字符串和基本類型(如int和double)的數(shù)據(jù)進(jìn)行分析。借助于Scanner,可以針對(duì)任何要處理的文本內(nèi)容編寫自定義的語法分析器,感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • Java處理不可見特殊字符要點(diǎn)解析

    Java處理不可見特殊字符要點(diǎn)解析

    這篇文章主要介紹了Java處理不可見特殊字符要點(diǎn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Java數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列實(shí)例詳解

    Java數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列實(shí)例詳解

    這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)結(jié)構(gòu)之棧與隊(duì)列的相關(guān)資料,算是作為用java描述數(shù)據(jù)結(jié)構(gòu)的一個(gè)開始,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-11-11
  • python實(shí)戰(zhàn)之德州撲克第一步-發(fā)牌

    python實(shí)戰(zhàn)之德州撲克第一步-發(fā)牌

    這篇文章主要介紹了python實(shí)戰(zhàn)之德州撲克第一步-發(fā)牌,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 如何加密配置文件里的敏感數(shù)據(jù)

    如何加密配置文件里的敏感數(shù)據(jù)

    這篇文章主要介紹了加密配置文件里的敏感數(shù)據(jù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • IDEA2020.2創(chuàng)建springboot項(xiàng)目卡死在reading maven project的問題

    IDEA2020.2創(chuàng)建springboot項(xiàng)目卡死在reading maven project的問題

    這篇文章主要介紹了關(guān)于2020.2IDEA用spring Initializr創(chuàng)建maven的springboot項(xiàng)目卡死在reading maven project的問題描述及解決方法,感興趣的朋友跟隨小編一起看看吧
    2020-09-09

最新評(píng)論

闽清县| 湘潭市| 灵山县| 洛阳市| 宁蒗| 信丰县| 从江县| 台南县| 临湘市| 日土县| 交口县| 林西县| 康乐县| 霍州市| 肥东县| 晴隆县| 连州市| 张家川| 德清县| 达孜县| 东源县| 荣昌县| 兴宁市| 温泉县| 曲水县| 木兰县| 鹿泉市| 手游| 包头市| 延川县| 汉川市| 平度市| 巴彦淖尔市| 马边| 晋州市| 昌宁县| 克拉玛依市| 普安县| 迁安市| 武城县| 临夏县|