国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

微信小程序接入微信登錄后端API

這篇具有很好參考價(jià)值的文章主要介紹了微信小程序接入微信登錄后端API。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

微信官方文檔:小程序登錄 | 微信開(kāi)放文檔 (qq.com)

微信官方流程圖:

微信登錄api,微信,微信小程序,java,spring

?

一.接入前準(zhǔn)備

1.前端獲取code

獲取微信登錄codehttps://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html

2.獲取微信用戶信息

獲取微信用戶信息https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html

后臺(tái)我這邊是使用springboot yml配置

3.yml配置

#微信配置
wx:        
    #微信公眾號(hào)或者小程序等的appid
    appId: xxxxxxxxxxxxxxxxxx
    #應(yīng)用密鑰
    appSecret: xxxxxxxxxxxxxxxxxx
    #微信支付商戶號(hào)
    merchantId: xxxxxxxxxxxxxxxxxx
    #微信支付商戶密鑰
    mchKey: xxxxxxxxxxxxxxxxxx
    #商戶證書(shū)目錄
    keyPath: xxxxxxxxxxxxxxxxxx
    #商戶API私鑰路徑 部署到centos后 /etc/wx-pay/apiclient_cert.pem
    privateKeyPath: C:\Users\admin\Desktop\wx\apiclient_cert.pem
    #商戶API密鑰證書(shū)路徑 部署到centos后 /etc/wx-pay/apiclient_key.pem
    wechatPayCertificatePath: C:\Users\admin\Desktop\wx\apiclient_key.pem
    #商戶證書(shū)序列號(hào)
    merchantSerialNumber: xxxxxxxxxxxxxxxxxx
    #商戶APIV3密鑰
    apiV3Key: xxxxxxxxxxxxxxxxxx

4.實(shí)體類參數(shù)配置

@Data
//@Primary 這個(gè)配置暫時(shí)用不上
@Configuration()
@PropertySource("classpath:application.yml") //讀取配置文件
@ConfigurationProperties(prefix = "wx")
public class WXProperties {
    /** appId : 微信公眾號(hào)或者小程序等的appid */
    private  String appId;
    /** appSecret : 應(yīng)用密鑰 */
    private  String appSecret;
    /** mchId : 微信支付商戶號(hào) */
    private  String merchantId;
    /** mchKey : 微信支付商戶密鑰 */
    private  String mchKey;
    /** mchKey : 商戶證書(shū)目錄 */
    private  String keyPath ;
    /**商戶API私鑰路徑*/
    private  String privateKeyPath ;
    /**商戶API密鑰證書(shū)路徑*/
    private  String wechatPayCertificatePath ;
    /** 商戶證書(shū)序列號(hào)*/
    private  String merchantSerialNumber ;
    /**商戶APIV3密鑰*/
    private  String apiV3Key ;

}

二.后臺(tái)接入

1.獲取openid

獲取openid官方文檔https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/user-login/code2Session.html

? ? ??根據(jù)前端給定微信登錄的code獲取opendiHutool工具官網(wǎng)https://hutool.cn/docs/#/?id=%f0%9f%93%9a%e7%ae%80%e4%bb%8b

@Resource
private WXProperties wxProperties;

public String getOpenid(String code){
       //這里是直接拼接的一個(gè)url
    String url = "https://api.weixin.qq.com/sns/jscode2session?appid=" 
                + wxProperties.getAppId() + "&secret=" + wxProperties.getAppSecret() 
                + "&js_code=" + code + "&grant_type=authorization_code";
    //HttpUtil這個(gè)是hutool工具包里面的,一個(gè)很好用的封裝工具;當(dāng)然你也可以用別的工具
    String result = HttpUtil.get(url);
    return result;
}

2.我自己的登錄由于需要獲取登錄者的手機(jī)號(hào),代碼如下

微信官方對(duì)不同類型解密文檔https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html

@PostMapping("/wxLogin")
    public Result wxLogin(@RequestParam("code") String code,
                              @RequestParam("encryptedIv") String encryptedIv,
                              @RequestParam("rawData") String rawData,
                              @RequestParam("encryptedData") String encryptedData) {
        //wx.login返回的code
        log.info("微信登錄參數(shù)code:" + code);
        //不需要解密的話可以不傳入這些參數(shù)看自己業(yè)務(wù)
        //解密的iv
        log.info("登錄信息參數(shù)encryptedIv:" + encryptedIv);
        //要解密的數(shù)據(jù)
        log.info("登錄信息參數(shù)encryptedData:" + encryptedData);
        //rawData微信頭像,昵稱等信息,看自己業(yè)務(wù)需要
        log.info("登錄微信賬戶參數(shù)信息rawData:" + rawData);
        //想微信服務(wù)器發(fā)送請(qǐng)求獲取用戶信息
        //https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
        String url = "https://api.weixin.qq.com/sns/jscode2session?appid="
                + wxProperties.getAppId() + "&secret=" + wxProperties.getAppSecret()
                + "&js_code=" + code + "&grant_type=authorization_code";
        String result = HttpUtil.get(url );
        JSONObject jsonObject = JSONObject.parseObject(result);
        log.info("result:" + result);
        //獲取session_key和openid
        String sessionKey = jsonObject.getString("session_key");
        //解密 是獲取微信用戶的手機(jī)號(hào)
        String decryptResult = "";
        try {
            //如果沒(méi)有綁定微信開(kāi)放平臺(tái),解析結(jié)果是沒(méi)有unionid的。
            decryptResult = decryptionUserInfo(sessionKey, encryptedIv, encryptedData);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("微信登錄失?。?);
        }
        //解析成功就可以寫(xiě)自己的系統(tǒng)業(yè)務(wù)邏輯了
        //我這里就開(kāi)始調(diào)用登錄方法創(chuàng)建token了,至于自己的登錄方法邏輯是什么要做什么邏輯處理就看業(yè)務(wù)需要了
        if (StringUtils.hasText(decryptResult)) {
            //如果解析成功,獲取token
            String token = loginService.wxLogin(decryptResult, result, rawData);
            Result r = Result.success();
            r.put(Constants.TOKEN, token);
            return r;
        } else {
            return AjaxResult.error("微信登錄失??!");
        }
    }

用戶信息解密

public String decryptionUserInfo(String sessionKey, String iv, String encryptedData) {
        String result = null;
        // 被加密的數(shù)據(jù)
        byte[] dataByte = Base64.decode(encryptedData);
        // 加密秘鑰
        byte[] keyByte = Base64.decode(sessionKey);
        // 偏移量
        byte[] ivByte = Base64.decode(iv);
        try {
            // 如果密鑰不足16位,那么就補(bǔ)足. 這個(gè)if 中的內(nèi)容很重要
            int base = 16;
            if (keyByte.length % base != 0) {
                int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
                byte[] temp = new byte[groups * base];
                Arrays.fill(temp, (byte) 0);
                System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
                keyByte = temp;
            }
            //初始化
            AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivByte);
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            SecretKeySpec keySpec = new SecretKeySpec(keyByte, "AES");
            cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
            byte[] doFinal = cipher.doFinal(dataByte);
            result = new String(doFinal);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

最后有一個(gè)參考文獻(xiàn),找不到了,有遇到的就提醒一下咯文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-759728.html

到了這里,關(guān)于微信小程序接入微信登錄后端API的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 后端 .net7 Minimal API 限流中間件(微信小程序無(wú)師自通十)

    ????????我的微信小程序使用.net7 Minimal API 作為后端,當(dāng)服務(wù)器擺上公網(wǎng)后,可以觀察到很多的攻擊行為和暴力訪問(wèn)。所以,我需要使用微軟的限流中間件部署相應(yīng)的功能在服務(wù)器上 : AddFixedWindowLimiter using Microsoft.AspNetCore.RateLimiting; using System.Threading.RateLimiting; 后端

    2024年02月12日
    瀏覽(27)
  • Gpt微信小程序搭建的前后端流程 - 前端小程序部分-2.確定交互所需的后端API(二)

    Gpt微信小程序搭建的前后端流程 - 前端小程序部分-2.確定交互所需的后端API(二)

    Gpt微信小程序搭建的前后端流程 - 前端小程序部分-2.確定交互所需的后端API(二) 參考微信小程序- 小檸AI智能聊天 ,可自行先體驗(yàn)。 根據(jù)上一節(jié)的小程序靜態(tài)頁(yè)面設(shè)計(jì),需要從后端獲取數(shù)據(jù)的主要4個(gè)點(diǎn): 登錄流程; 獲取今日已提問(wèn)次數(shù); 獲取聊天記錄; 發(fā)起聊天和響應(yīng)。

    2024年02月13日
    瀏覽(27)
  • 微信小程序+SpringBoot接入后臺(tái)服務(wù),接口數(shù)據(jù)來(lái)自后端

    微信小程序+SpringBoot接入后臺(tái)服務(wù),接口數(shù)據(jù)來(lái)自后端

    文章底部有個(gè)人公眾號(hào):小兔教你學(xué)編程。主要目的是方便閱讀。主要分享一些前后端初中級(jí)知識(shí)、開(kāi)發(fā)實(shí)戰(zhàn)案例、問(wèn)題解決等知識(shí)。 ???????前兩天開(kāi)發(fā)了一個(gè)微信小程序項(xiàng)目,只不過(guò)接口數(shù)據(jù)是自己設(shè)置的假數(shù)據(jù)。然后我就想將這些假數(shù)據(jù)替換掉。這些數(shù)據(jù)來(lái)自接口,

    2024年02月12日
    瀏覽(40)
  • 【微信小程序】實(shí)現(xiàn)微信小程序登錄(附源碼)后端,微信小程序獲取手機(jī)號(hào)

    登錄簡(jiǎn)介 第一步:獲取token 第二步:通過(guò)token拿用戶信息 第三步:調(diào)用接口獲取手機(jī)號(hào) HttpClientUtil: WeChatUtil: controller層: service層: serviceImpl層: 登錄簡(jiǎn)介 ? ? ? ?新版本微信小程序登錄 是前端獲取用戶信息,不再是后端獲取信息進(jìn)行保存。所以后端要做的主要流程就是

    2024年04月23日
    瀏覽(108)
  • 微信小程序登錄+獲取手機(jī)號(hào)碼(前端+后端)

    微信小程序登錄+獲取手機(jī)號(hào)碼(前端+后端)

    上面這張是微信小程序官方原圖,登錄流程如上圖所示,下面一步步進(jìn)行以及說(shuō)一下碰到的坑。 1.wx.login()獲取code ? ? ? ? 調(diào)用微信小程序官方提供的方法獲取code提供給后端用以換取session_key、openid。 ? ? ? ? 注意:code只能使用一次就會(huì)失效,且有效期為5分鐘 2.后端收到

    2024年02月12日
    瀏覽(95)
  • 微信小程序登錄流程(包含前端、后端代碼)

    微信小程序登錄流程(包含前端、后端代碼)

    在微信小程序的開(kāi)發(fā)過(guò)程中,如果想要保留 用戶 的 數(shù)據(jù) (比如: 操作記錄 、 購(gòu)物車信息 等等)就必須要 用戶 登陸。為什么呢?比如說(shuō),數(shù)據(jù)庫(kù)中有一條 數(shù)據(jù) 你如何知道這條數(shù)據(jù)屬于誰(shuí)?屬于那個(gè)用戶呢?這就需要用戶登錄來(lái)獲取 用戶 的 唯一標(biāo)識(shí) 從而確定這條數(shù)據(jù)是屬

    2024年02月03日
    瀏覽(101)
  • 微信小程序--API

    異步API:通常接受一個(gè)object類型參數(shù) 例如 wx:request({}) 同步API:約定以Sync結(jié)尾 例如 wx:setStorageSync() 事件監(jiān)聽(tīng)API:約定以on開(kāi)頭 例如 wx:onAppHide() 支持callback 或者 Promise 兩種調(diào)用方式 1.當(dāng)接口參數(shù) Object 對(duì)象中不包含 success/fail/complete 時(shí)默認(rèn)返回Promise 2.部分接口 如request , uplo

    2024年04月26日
    瀏覽(17)
  • 微信小程序常用API

    1. wx.openAppAuthorizeSetting(Object object) 跳轉(zhuǎn)系統(tǒng)微信授權(quán)管理頁(yè) 2. wx.getWindowInfo() 獲取窗口信息 3. wx.getSystemInfoAsync(Object object) 異步獲取系統(tǒng)信息。需要一定的微信客戶端版本支持,在不支持的客戶端上,會(huì)使用同步實(shí)現(xiàn)來(lái)返回。 4. wx.getAppAuthorizeSetting() 獲取微信 APP 授權(quán)設(shè)置 小程

    2024年02月09日
    瀏覽(21)
  • 微信小程序API(詳細(xì) 教程)

    微信小程序API(詳細(xì) 教程)

    小程序中的 API 是由宿主環(huán)境提供的,通過(guò)這些豐富的小程序 API,開(kāi)發(fā)者可以方便的調(diào)用微信提供的能力,例如:獲取用戶信息、本地存儲(chǔ)、支付功能等。 小程序提供了很多實(shí)用的方法供開(kāi)發(fā)者使用 小程序全局對(duì)象是: wx 所有的 API 都保存在 wx 對(duì)象中 顯示消息提示框: wx.sh

    2023年04月15日
    瀏覽(25)
  • 微信小程序 | 小程序系統(tǒng)API調(diào)用

    微信小程序 | 小程序系統(tǒng)API調(diào)用

    ??? 微信小程序?qū)冢盒〕绦蛳到y(tǒng)API調(diào)用 ????? 個(gè)人簡(jiǎn)介:一個(gè)不甘平庸的平凡人?? ? 個(gè)人主頁(yè):CoderHing的個(gè)人主頁(yè) ?? 格言: ?? 路漫漫其修遠(yuǎn)兮,吾將上下而求索?? ?? 你的一鍵三連是我更新的最大動(dòng)力?? 目錄 一、網(wǎng)絡(luò)請(qǐng)求API和封裝 網(wǎng)絡(luò)請(qǐng)求 – API參數(shù) 網(wǎng)絡(luò)請(qǐng)

    2024年02月03日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包