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

微信小程序獲取openid,微信小程序獲取手機(jī)號(hào)

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

工具類文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-568641.html

package com.huash.wechat.utils;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.security.Key;
import java.security.Security;
import java.util.Arrays;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.net.ssl.HttpsURLConnection;

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Base64;


public class WeChatUtil
{
     public static String httpRequest(String requestUrl,String requestMethod,String output)
     {
            try
            {
                URL url = new URL(requestUrl);
                HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
                connection.setDoOutput(true);
                connection.setDoInput(true);
                connection.setUseCaches(false);
                if(null != output){
                    OutputStream outputStream = connection.getOutputStream();
                    outputStream.write(output.getBytes("utf-8"));
                    outputStream.close();
                }
                // 從輸入流讀取返回內(nèi)容
                InputStream inputStream = connection.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
                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.toString();
            }catch(Exception e){
                e.printStackTrace();
            }
            return "";
     }
     
     
    public static String decryptData(String encryptDataB64, String sessionKeyB64, String ivB64) {
        return new String(
                decryptOfDiyIV(
                        Base64.decode(encryptDataB64),
                        Base64.decode(sessionKeyB64),
                        Base64.decode(ivB64)
                )
        );
    }

    private static final String KEY_ALGORITHM = "AES";
    private static final String ALGORITHM_STR = "AES/CBC/PKCS7Padding";
    private static Key key;
    private static Cipher cipher;

    private static void init(byte[] keyBytes) {
        // 如果密鑰不足16位,那么就補(bǔ)足.  這個(gè)if 中的內(nèi)容很重要
        int base = 16;
        if (keyBytes.length % base != 0) {
            int groups = keyBytes.length / base + (keyBytes.length % base != 0 ? 1 : 0);
            byte[] temp = new byte[groups * base];
            Arrays.fill(temp, (byte) 0);
            System.arraycopy(keyBytes, 0, temp, 0, keyBytes.length);
            keyBytes = temp;
        }
        // 初始化
        Security.addProvider(new BouncyCastleProvider());
        // 轉(zhuǎn)化成JAVA的密鑰格式
        key = new SecretKeySpec(keyBytes, KEY_ALGORITHM);
        try {
            // 初始化cipher
            cipher = Cipher.getInstance(ALGORITHM_STR, "BC");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 解密方法
     *
     * @param encryptedData 要解密的字符串
     * @param keyBytes      解密密鑰
     * @param ivs           自定義對(duì)稱解密算法初始向量 iv
     * @return 解密后的字節(jié)數(shù)組
     */
    private static byte[] decryptOfDiyIV(byte[] encryptedData, byte[] keyBytes, byte[] ivs) {
        byte[] encryptedText = null;
        init(keyBytes);
        try {
            cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(ivs));
            encryptedText = cipher.doFinal(encryptedData);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return encryptedText;
    }
}
package com.huash.wechat.webv2;

import io.swagger.annotations.ApiOperation;

import java.security.AlgorithmParameters;
import java.security.Security;
import java.util.Arrays;
import java.util.Optional;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletRequest;

import org.apache.commons.lang.StringUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Base64;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.dubbo.config.annotation.Reference;
import com.alibaba.fastjson.JSONObject;



@RestController
@RequestMapping("/api/weChat/v2")
public class LoginV2Controller {

    @Reference(check = false, version = "1.0.0", timeout = 30000)
    private WcUesrService wcUserService;
    
    
    @ApiOperation(value = "登錄狀態(tài)", notes = "登錄狀態(tài)")
    @RequestMapping(value = "/login_status", method = RequestMethod.GET)
    public ResultJson login(HttpServletRequest request,String code) 
    {
        // 微信小程序ID
        String appid = "****";
        // 微信小程序秘鑰
        String secret = "****";
        // 根據(jù)小程序穿過(guò)來(lái)的code想這個(gè)url發(fā)送請(qǐng)求
        String url = "https://api.weixin.qq.com/sns/jscode2session?appid="
                + appid + "&secret=" + secret + "&js_code=" + code
                + "&grant_type=authorization_code";
        // 發(fā)送請(qǐng)求,返回Json字符串
        String str = WeChatUtil.httpRequest(url, "GET", null);
        // 轉(zhuǎn)成Json對(duì)象 獲取openid
        JSONObject jsonObject = JSONObject.parseObject(str);

        if (jsonObject != null) 
        {
            // 我們需要的openid,在一個(gè)小程序中,openid是唯一的(且只對(duì)該手機(jī),當(dāng)切換賬號(hào)時(shí))
            String openid = jsonObject.get("openid").toString();

           //TODO
        }
        return ResultJson.failure(jsonObject);
    }
    
    
    @ApiOperation(value = "獲取手機(jī)號(hào)", notes = "獲取手機(jī)號(hào)")
    @RequestMapping(value = "/get_phone", method = RequestMethod.GET)
    public ResultJson getPhoneNumber(HttpServletRequest request,String encryptedData, String openid,String session_key, String iv,Integer memberType) 
    {
        // 被加密的數(shù)據(jù)
        byte[] dataByte = Base64.decode(encryptedData);
        System.out.println(session_key);
        // 加密秘鑰
        byte[] keyByte = Base64.decode(session_key);
        // 偏移量
        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;
            }
            // 初始化
            Security.addProvider(new BouncyCastleProvider());
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
            AlgorithmParameters parameters = AlgorithmParameters
                    .getInstance("AES");
            parameters.init(new IvParameterSpec(ivByte));
            cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
            byte[] resultByte = cipher.doFinal(dataByte);

            if (null != resultByte && resultByte.length > 0) 
            {
                String result = new String(resultByte, "UTF-8");

                if (StringUtils.isNotBlank(result))
                {
                    JSONObject jsonObject = JSONObject.parseObject(result);
                    String phone = jsonObject.get("phoneNumber").toString();
                   ?//Todo
                }    
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
    
    @ApiOperation(value = "退出", notes = "退出")
    @RequestMapping(value = "/login_out", method = RequestMethod.GET)
    public ResultJson loginOut(HttpServletRequest request,Long userId) 
    {
        return ResultJson.success("操作成功");
    }
}

到了這里,關(guān)于微信小程序獲取openid,微信小程序獲取手機(jī)號(hào)的文章就介紹完了。如果您還想了解更多內(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)文章

  • java springboot+uniapp實(shí)現(xiàn)微信小程序獲取微信手機(jī)號(hào)

    java springboot+uniapp實(shí)現(xiàn)微信小程序獲取微信手機(jī)號(hào)

    https://mp.weixin.qq.com/ 用此功能可能需要首頁(yè)一些列認(rèn)證完成后才可以:eg:小程序備案、微信認(rèn)證等 1、獲取AppId和AppSecret 側(cè)開(kāi)發(fā)管理-開(kāi)發(fā)設(shè)置-需要獲取 AppID(小程序ID) 、**AppSecret(小程序密鑰) **。 注意:AppSecret第一次生成后需要自己復(fù)制保存,后續(xù)雖然可以重置但是重置會(huì)相

    2024年02月02日
    瀏覽(21)
  • 基于uniapp+java實(shí)現(xiàn)微信小程序無(wú)感登錄,授權(quán)手機(jī)號(hào)登錄,獲取昵稱頭像,獲取定位信息

    基于uniapp+java實(shí)現(xiàn)微信小程序無(wú)感登錄,授權(quán)手機(jī)號(hào)登錄,獲取昵稱頭像,獲取定位信息

    使用uniapp開(kāi)發(fā)微信小程序,避免不了微信登錄。但自動(dòng)微信2022年升級(jí)了api版本后,不再允許返回昵稱和頭像信息,所以才出現(xiàn)無(wú)感登錄或授權(quán)手機(jī)號(hào)登錄。實(shí)現(xiàn)方式大同小異。 java后端所需maven 前端實(shí)現(xiàn)代碼: 由于使用uni.login并不需要用戶授權(quán),所以能做到無(wú)感登錄。 后端

    2024年02月16日
    瀏覽(170)
  • 微信小程序:登錄授權(quán),根據(jù)手機(jī)號(hào)獲取憑證,獲取用戶手機(jī)號(hào)

    1.微信小程序授權(quán) controller 層代碼 wxUtils 工具類 2.微信小程序,用戶手機(jī)號(hào)獲取 微信小程序,根據(jù)code(code為手機(jī)號(hào)獲取憑證)獲取用戶加密手機(jī)號(hào) 獲取用戶手機(jī)號(hào)方法

    2024年02月14日
    瀏覽(28)
  • 微信小程序獲取手機(jī)號(hào)

    微信小程序獲取手機(jī)號(hào)

    1、先新建vue頁(yè)面 ?打開(kāi)看到頁(yè)面是下圖 在method定義方法 ? ?源碼: node.js文件下載解壓后啟動(dòng)node app.js打開(kāi)服務(wù)器即可 點(diǎn)擊下載

    2024年02月02日
    瀏覽(19)
  • 微信小程序 - 實(shí)現(xiàn)手機(jī)號(hào)登錄--授權(quán)并獲取手機(jī)號(hào)保存至本地

    微信小程序 - 實(shí)現(xiàn)手機(jī)號(hào)登錄--授權(quán)并獲取手機(jī)號(hào)保存至本地

    微信官方文檔 | 獲取手機(jī)號(hào) 這是服務(wù)端的 ?這是我們前端獲取手機(jī)號(hào)需要給接口傳遞的兩個(gè)參數(shù) ? ?注意: 參數(shù)一: 獲取access_token需要用到小程序密鑰,這個(gè)需要從 服務(wù)端獲取 ,也就是需要請(qǐng)求后端接口獲取access_token,千萬(wàn)不要將小程序密鑰寫在前端代碼中, 必須 要從服

    2024年02月03日
    瀏覽(34)
  • 微信小程序:獲取用戶手機(jī)號(hào)(前端)

    獲取手機(jī)號(hào)的開(kāi)發(fā)過(guò)程可以分為三部分:微信前端設(shè)置,微信js文件編寫,服務(wù)器端程序開(kāi)發(fā). 其中微信前端最為簡(jiǎn)單,在獲取手機(jī)號(hào)的過(guò)程中我們必須經(jīng)過(guò)用戶授權(quán),在wxml文件中加入如下代碼: 然后我們需要編寫js文件,當(dāng)用戶允許獲取手機(jī)號(hào)后調(diào)用相關(guān)邏輯,將手機(jī)號(hào)加密信息發(fā)

    2024年02月06日
    瀏覽(22)
  • 企業(yè)微信小程序獲取手機(jī)號(hào)?

    企業(yè)微信小程序獲取手機(jī)號(hào)?

    一、確定小程序是開(kāi)發(fā)企業(yè)內(nèi)部應(yīng)用,還是開(kāi)發(fā)第三方應(yīng)用。 ?如果是開(kāi)發(fā)企業(yè)內(nèi)部應(yīng)用,也就是應(yīng)用自建的可以使用 ??wx.qy.getMobile 這個(gè)api 去獲取手機(jī)號(hào) wx.qy.getMobile 調(diào)用前提: 1、必須先調(diào)用過(guò)wx.qy.login,且session_key未過(guò)期,開(kāi)發(fā)者可調(diào)用checkSession 檢查當(dāng)前登錄態(tài)( 需要

    2024年02月07日
    瀏覽(17)
  • 新版微信小程序獲取用戶手機(jī)號(hào)

    小程序手機(jī)號(hào)驗(yàn)證組件有兩種 手機(jī)號(hào)快速驗(yàn)證組件 手機(jī)號(hào)實(shí)時(shí)驗(yàn)證組件

    2024年02月11日
    瀏覽(22)
  • 微信小程序手機(jī)號(hào)授權(quán)獲取收費(fèi)(手機(jī)號(hào)快速驗(yàn)證組件)剩余次數(shù)查看購(gòu)買

    微信小程序手機(jī)號(hào)授權(quán)獲取收費(fèi)(手機(jī)號(hào)快速驗(yàn)證組件)剩余次數(shù)查看購(gòu)買

    登錄微信公眾平臺(tái)?,在管理---》付費(fèi)管理下查看,已用次數(shù)和剩余次數(shù) 該能力旨在幫助開(kāi)發(fā)者向用戶發(fā)起手機(jī)號(hào)申請(qǐng),并且 必須經(jīng)過(guò)用戶同意后 ,開(kāi)發(fā)者才可獲得由平臺(tái)驗(yàn)證后的手機(jī)號(hào),進(jìn)而為用戶提供相應(yīng)服務(wù)。 該能力與手機(jī)號(hào)實(shí)時(shí)驗(yàn)證組件的區(qū)別為: 手機(jī)號(hào)快速驗(yàn)證

    2024年02月22日
    瀏覽(95)
  • 【微信小程序】如何獲取用戶手機(jī)號(hào)授權(quán)登錄

    【微信小程序】如何獲取用戶手機(jī)號(hào)授權(quán)登錄

    目前該接口針對(duì)非個(gè)人開(kāi)發(fā)者,且完成了認(rèn)證的小程序開(kāi)放(不包含海外主體),也就是說(shuō)只針對(duì)企業(yè)認(rèn)證小程序開(kāi)放。若用戶舉報(bào)較多或被發(fā)現(xiàn)在不必要場(chǎng)景下使用,微信有權(quán)永久回收該小程序的該接口權(quán)限。 在使用該接口時(shí),用戶可使用微信綁定手機(jī)號(hào)進(jìn)行授權(quán),也添加

    2024年02月16日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包