欧美三级国产三级日韩三级_亚洲熟妇丰满大屁股熟妇_欧美亚洲成人一区二区三区_国产精品久久久久久模特

小程序如何獲取用戶綁定的手機號 - 新聞資訊 - 云南小程序開發(fā)|云南軟件開發(fā)|云南網(wǎng)站建設-昆明葵宇信息科技有限公司

159-8711-8523

云南網(wǎng)建設/小程序開發(fā)/軟件開發(fā)

知識

不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!

您當前位置>首頁 » 新聞資訊 » 小程序相關 >

小程序如何獲取用戶綁定的手機號

發(fā)表時間:2021-1-5

發(fā)布人:葵宇科技

瀏覽次數(shù):104

小程序官方文檔中介紹:

獲取微信用戶綁定的手機號,需先調(diào)用wx.login接口。 因為需要用戶主動觸發(fā)才能發(fā)起獲取手機號接口,所以該功能不由 API 來調(diào)用,需用 button 組件的點擊來觸發(fā)。

注意:目前該接口針對非個人開發(fā)者,且完成了認證的小程序開放(不包含海外主體)。需謹慎使用,若用戶舉報較多或被發(fā)現(xiàn)在不必要場景下使用,微信有權永久回收該小程序的該接口權限。具體可參考小程序API

使用方法 需要將 button 組件 open-type 的值設置為 getPhoneNumber,當用戶點擊并同意之后,可以通過 bindgetphonenumber 事件回調(diào)獲取到微信服務器返回的加密數(shù)據(jù), 然后在第三方服務端結合 session_key 以及 app_id 進行解密獲取手機號。

     
復制代碼

在使用組件之前先調(diào)用login

App({  
    onLaunch: function () {  
        wx.login({  
            success: function (res) {  
                if (res.code) {  
                    //發(fā)起網(wǎng)絡請求 
                    this.globalData.code = res.code;
                    console.log(res.code)  
                } else {  
                    console.log('獲取用戶登錄態(tài)失??!' + res.errMsg)  
                }  
            }  
        });  
    },
    globalData: {}
})
復制代碼

getPhoneNumber中將返回用戶是否同意授權的數(shù)據(jù),

const App = getApp();
Page({
    getPhoneNumber(e) {
        const { iv, encryptedData, errMsg } = e.detail;
        if (errMsg === 'getPhoneNumber:ok') {
            // 同意授權
            wx.request({
                url: '/GetPhone',
                data: {
                    code: App.globalData.code,
                    iv,
                    encryptedData
                },
                success: (res) => {
                    console.log(res);
                }
            })
        }
    }
})
復制代碼

后端需要根據(jù)前端傳遞的code,iv, encryptedData,結合小程序的appID,secret,先獲取session_key,然后在進行電話號碼解析。為了安全考慮,我們的appID和secret都是存放在后端的,所以獲取session_key和電話解析都放后端進行了,前端只需調(diào)用接口即可。

獲取session_key的地址

const APP_ID = '';
const SECRET = '';
const BASE_URL = 'https://api.weixin.qq.com';

const url = `${BASE_URL}/sns/jscode2session?appid=${APP_ID}&secret=${SECRET}&js_code=${res.code}&grant_type=authorization_code`;
復制代碼

電話號碼解析實例(java版)

import org.apache.shiro.codec.Base64;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.spec.AlgorithmParameterSpec;

@Controller

public class GetPhone {
    /*用戶手機號解析*/
    @RequestMapping("/getPhoneNumber")
    @ResponseBody
    public String getPhoneNumber(String encryptedData, String iv, String sessionKey) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, UnsupportedEncodingException {

        System.out.println(encryptedData + "-------" + iv + "-------" + sessionKey);

        byte[] encData = http://www.wxapp-union.com/Base64.decode(encryptedData);
        byte[] keyByte = Base64.decode(iv);
        byte[] key = Base64.decode(sessionKey);

        AlgorithmParameterSpec ivSpec = new IvParameterSpec(keyByte);
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
        cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);// 初始化
        byte[] resultByte = cipher.doFinal(encData);
        if (null != resultByte && resultByte.length > 0) {
            String result = new String(resultByte, "UTF-8");
            System.out.println(result);
            return result;
        }
        return null;
    }
復制代碼

注意:在回調(diào)中調(diào)用 wx.login 登錄,可能會刷新登錄態(tài)。此時服務器使用 code 換取的 sessionKey 不是加密時使用的 sessionKey,導致解密失敗。建議開發(fā)者提前進行 login;或者在回調(diào)中先使用 checkSession 進行登錄態(tài)檢查,避免 login 刷新登錄態(tài)。

最后提醒大家,進入一個未知的小程序時,彈出用戶授權詢問框時,謹慎授權。如下圖


作者:筱筱醬40023
來源:掘金
著作權歸作者所有。商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處。

相關案例查看更多