91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么獲取微信用戶openid

發布時間:2023-02-14 09:27:00 來源:億速云 閱讀:174 作者:iii 欄目:開發技術

這篇文章主要介紹“怎么獲取微信用戶openid”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“怎么獲取微信用戶openid”文章能幫助大家解決問題。

    1、前言

    首先我們要進行相關的開發的話,那么我們需要先獲取微信的openid。那么我們英愛怎樣獲取呢?這里我會介紹兩種方式。

    2、手工方式

    官方文檔

    2.1、設置域名

    (1).注冊對應的公眾號找到下圖位置

    怎么獲取微信用戶openid

    (2). 在natapp.cn上購買自己的用于微信開發的域名

    怎么獲取微信用戶openid

    哈哈,這個網站上面的域名也不是特別的貴呀,我在這上面買的一個域名為期一個月的話也就才12元,且改類型的屬于二級域名,是已經備過案的,所以也就不需要備案。

    (3). 下載對應的客戶端進行啟動

    怎么獲取微信用戶openid

    windows上啟動的命令

    natapp -authtoken 你的authtoken

    啟動后

    怎么獲取微信用戶openid

    可見我的域名指向了127.0.0.1:8080

    (4).將我們的域名填到公眾號中JS接口安全域名提交

    怎么獲取微信用戶openid

    提交之前我們需要將上圖中的紅色框框住的部分的文件下載下來放置項目的static目錄下,測試訪問通過之后,然后才能進行提交。

    2.2、獲取code

    可謂是一波三折呀,我本來以為我這個項目就要gg了。但也是我自己太小兒科了。微信怎么可能沒有想到這么一個問題呢。就是微信公眾號的 網頁授權獲取用戶基本信息 功能服務。它這個功能服務必須只有 服務號 才擁有,但是其實每個用戶可以免注冊獲得一個測試號,該測試號就含有這個特殊功能服務。

    (1).登錄自己的測試號

    怎么獲取微信用戶openid

    微信測試號是免注冊的,我們直接掃碼登錄即可。

    (2).編寫對應的接口

    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author :小肖
     * @date :Created in 2022/2/1 21:55
     */
    @RestController
    @RequestMapping("/weixin")
    @Slf4j
    public class WeixinController {
    
        @GetMapping("/auth")
        public void auth(@RequestParam("code") String code){
            log.info("進入了auth方法...");
            log.info("code = {}",code);
        }
    }

    (3).在登錄測試號之后進行網頁授權

    怎么獲取微信用戶openid

    怎么獲取微信用戶openid

    授權的域名就是我們在natapp.cn上購買的域名,如果沒有進行授權的話那么就會報出 10003 redirect_uri域名與后臺配置不一致 錯誤。

    (4).進行訪問url進行測試

    https://open.weixin.qq.com/connect/oauth3/authorize?appid=測試號的appid&redirect_uri=http://你的域名/sell/weixin/auth&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect

    注意點

    怎么獲取微信用戶openid

    被測試的對象必須先關注對應的測試號且必須在微信客戶端進行訪問。

    (5).測試結果

    怎么獲取微信用戶openid

    成功獲取了用戶的code信息。

    2.3、換取access_token

    (1).編寫的controller

    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    /**
     * @author :小肖
     * @date :Created in 2022/2/1 21:55
     */
    @RestController
    @RequestMapping("/weixin")
    @Slf4j
    public class WeixinController {
    
        @GetMapping("/auth")
        public void auth(@RequestParam("code") String code){
            log.info("進入了auth方法...");
            log.info("code = {}",code);
            String url = "https://api.weixin.qq.com/sns/oauth3/access_token?appid=appid&secret=appsecret&code=" + code + "&grant_type=authorization_code";
            RestTemplate restTemplate = new RestTemplate();
            String response = restTemplate.getForObject(url, String.class);
        }
    }

    (2).訪問的url組成

    https://api.weixin.qq.com/sns/oauth3/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

    參數是否必須說明
    appid公眾號的唯一標識
    secret公眾號的appsecret
    code填寫第一步獲取的code參數
    grant_type填寫為authorization_code

    (3).訪問的結果

    {
      "access_token": "53_HK355v2MhOolNlGkaoUf4oDCkyX0WDollvsQNU5SvhsvmvF2S2VoqdPXuokfERI2oqFvQijVShq8aQzeQ9n01mGKSJn7q5rLAcYbTjm1H7k",
      "expires_in": 7200,
      "refresh_token": "53_C1us_G770mgzXjd-PuK329qB65lXiK483_qxUXjKudwWIdHkOz5ntwlByEgUQfMEy_-7tCCzcO4DoHaFbY0JurpZYD3Bys6DLs8ua8J_CjU",
      "openid": "你的openid",
      "scope": "snsapi_base"
    }

    3、使用第三方sdk

    3.1、引入第三方依賴

            <!--微信公眾號開發需要引入的依賴-->
            <dependency>
                <groupId>com.github.binarywang</groupId>
                <artifactId>weixin-java-mp</artifactId>
                <version>3.1.0</version>
            </dependency>

    3.2、將微信公眾號配置寫入yaml文件并引入類中

    wechat:
      mpAppId: 你的微信測試號appId
      mpAppSecret: 你的微信測試號secret
    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    /**
     * @author :小肖
     * @date :Created in 2022/2/2 10:31
     */
    @Component
    @Data
    @ConfigurationProperties(prefix = "wechat")
    public class WechatAccountConfig {
    
        /**
         * 公眾號id
         */
        private String mpAppId;
    
        /**
         * 公眾號密鑰
         */
        private String mpAppSecret;
    
    }

    3.3、編寫配置類初始化設置wxMpService配置

    import me.chanjar.weixin.mp.api.WxMpConfigStorage;
    import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
    import me.chanjar.weixin.mp.api.WxMpService;
    import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.stereotype.Component;
    
    /**
     * @author :小肖
     * @date :Created in 2022/2/2 10:24
     */
    @Component
    public class WechatMpConfig {
    
    
        @Autowired
        private WechatAccountConfig wechatAccountConfig;
    
        @Autowired
        private WxMpInMemoryConfigStorage wxMpInMemoryConfigStorage;
    
        @Bean
        public WxMpService wxMpService(){
            WxMpService wxMpService = new WxMpServiceImpl();
            wxMpService.setWxMpConfigStorage(wxMpInMemoryConfigStorage);
            return wxMpService;
        }
    
        @Bean
        public WxMpInMemoryConfigStorage wxMpConfigStorage(){
            /**
             * 這里需要注意的是 由于父類中沒有定義對應的接口
             * 所以所有的方法都在其實現類中,所以我們要構造實現類
             */
            WxMpInMemoryConfigStorage wxMpConfigStorage = new WxMpInMemoryConfigStorage();
            wxMpConfigStorage.setAppId(wechatAccountConfig.getMpAppId());
            wxMpConfigStorage.setSecret(wechatAccountConfig.getMpAppSecret());
            return wxMpConfigStorage;
        }
    }

    3.4、編寫對應的controller

    import com.xiao.enums.ResultEnum;
    import com.xiao.exception.SellException;
    import lombok.extern.slf4j.Slf4j;
    import me.chanjar.weixin.common.api.WxConsts;
    import me.chanjar.weixin.common.error.WxErrorException;
    import me.chanjar.weixin.mp.api.WxMpService;
    import me.chanjar.weixin.mp.bean.result.WxMpOAuth3AccessToken;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @author :小肖
     * @date :Created in 2022/2/2 10:20
     */
    @Controller
    @RequestMapping("/wechat")
    @Slf4j
    public class WechatController {
    
        @Autowired
        private WxMpService wxMpService;
    
        @GetMapping("/authorize")
        public String authorize(@RequestParam("returnUrl") String returnUrl){
            String url = "http://xiao-sell.natapp1.cc/sell/wechat/userInfo";
            String redirectUrl = wxMpService.oauth3buildAuthorizationUrl(url, WxConsts.OAuth3Scope.SNSAPI_USERINFO,returnUrl);
            return "redirect:" +  redirectUrl;
        }
    
        @GetMapping("/userInfo")
        public String userInfo(@RequestParam("code") String code,
                             @RequestParam("state") String returnUrl) {
            WxMpOAuth3AccessToken wxMpOAuth3AccessToken = new WxMpOAuth3AccessToken();
            try{
                wxMpOAuth3AccessToken = wxMpService.oauth3getAccessToken(code);
            }catch (WxErrorException e){
                log.error("【微信網頁授權錯誤】 exception = {}",e);
                throw new SellException(ResultEnum.WECHAT_MP_ERROR.getCode(),e.getError().getErrorMsg());
            }
            String openId = wxMpOAuth3AccessToken.getOpenId();
            log.info("openid = {}",openId);
            return "redirect:" + returnUrl + "?openid=" + openId;
        }
    }

    3.5、進行debug測試

    第一個斷點

    怎么獲取微信用戶openid

    該重定向的url很明顯就是我們手工方式中獲取codeurl

    第二個斷點

    怎么獲取微信用戶openid

    成功獲取了codeopenid

    關于“怎么獲取微信用戶openid”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    始兴县| 青海省| 朝阳市| 洛南县| 麟游县| 稷山县| 青河县| 北海市| 宁国市| 莎车县| 彝良县| 博客| 湖口县| 盐池县| 和林格尔县| 农安县| 景德镇市| 合作市| 屯门区| 顺平县| 岱山县| 利川市| 威远县| 名山县| 合江县| 米易县| 阳高县| 乌兰察布市| 五指山市| 莆田市| 敖汉旗| 宁陕县| 阿坝县| 清原| 瑞丽市| 龙门县| 遵化市| 澄迈县| 康马县| 靖安县| 元谋县|