c#微信小程序登錄及獲取電話號碼


開發前建議先閱讀微信小程序官方開發文檔
1.微信小程序登錄

// 登錄
    wx.login({
      success: res => {
        // 發送 res.code 到后台換取 openId, sessionKey, unionId
        if (res.code) {
          console.log("code========" + JSON.stringify(res));
          //發起網絡請求
          wx.request({
            url: 'http://xxxxxx/Weixin/'+res.code,
            method: 'GET',
            header: {
              'content-type': 'application/x-www-form-urlencoded'
            },
        
            success: function (res) {
              console.log(res)
              console.log('response.data----'+JSON.stringify(res.data));
              wx.setStorageSync('sessionKey', res.data.session_key); //存儲sessionKey在Storage
              wx.setStorageSync('app_openid', res.data.openid); //存儲openid在Storage 
            }
          })
        } else {
          console.log('登錄失敗!' + res.errMsg)
        }
      }
    })

2.后端登錄接口

 [HttpGet("{code}")]
        public RepParamrep Get(string code)
        {
            string appid = "xxxxx";
            string secret = "xxxxx";
            return Get(code, appid, secret);
        }
public RepParamrep Get(string code, string appid, string secret)
        {
            string cod = code;
            string html = string.Empty;
            string url = "https://api.weixin.qq.com/sns/jscode2session?appid=" + appid + "&secret=" + secret + "&js_code=" + cod + "&grant_type=authorization_code";

            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.Method = "GET";
            request.ContentType = "text/html;charset=UTF-8";
            HttpWebResponse response = request.GetResponse() as HttpWebResponse;
            Stream ioStream = response.GetResponseStream();
            StreamReader sr = new StreamReader(ioStream, Encoding.UTF8);
            html = sr.ReadToEnd();
            sr.Close();
            ioStream.Close();
            response.Close();
            RepParamrep rep = JsonConvert.DeserializeObject<RepParamrep>(html);
            return rep;
        }

        public class RepParamrep
        {
            public string session_key { get; set; }
            public string openid { get; set; }
        }

3.前端獲取用戶信息

  // 獲取用戶信息
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已經授權,可以直接調用 getUserInfo 獲取頭像昵稱,不會彈框
          wx.getUserInfo({
            success: res => {
             console.log(res);
            }
          })
        }
      }
    })

4.前端獲取手機號

<button type="primary" open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">獲取手機號</button>

  getPhoneNumber: function(e) {
    if (e.detail.errMsg == "getPhoneNumber:ok") {
  wx.request({
    url: 'http://xxxx/Weixin',
    method:'post',
   header:{
    'Content-type':'application/json'
   },
    data: {
      encryptedData:e.detail.encryptedData,
      iv:e.detail.iv,
      session_key:wx.getStorageSync('sessionKey')
      },
    success: function (res) {
      console.log(res)
     
    },
    fail: function (res) {
      //錯誤處理
      app.ylShowLog(res)
    },
    complete: function (res) {
      //完成處理
      wx.hideLoading();
    }
  })
}},

5.后端手機號解碼接口

[HttpPost]
        public string getPhoneNumber(UserRepParamrep userRepParamrep)
        {
            String encryptedData = userRepParamrep.encryptedData;
            String iv = userRepParamrep.iv;
            String session_key = userRepParamrep.session_key;
            try
            {
                byte[] encryData = Convert.FromBase64String(encryptedData);
                RijndaelManaged rijndaelCipher = new RijndaelManaged();
                rijndaelCipher.Key = Convert.FromBase64String(session_key);
                rijndaelCipher.IV = Convert.FromBase64String(iv);
                rijndaelCipher.Mode = CipherMode.CBC;
                rijndaelCipher.Padding = PaddingMode.PKCS7;
                ICryptoTransform transform = rijndaelCipher.CreateDecryptor();
                byte[] plainText = transform.TransformFinalBlock(encryData, 0, encryData.Length);
                string result = Encoding.Default.GetString(plainText);

                dynamic model = Newtonsoft.Json.Linq.JToken.Parse(result) as dynamic;
                string phoneNumber = model.phoneNumber;
                //return model.phoneNumber;
                if (string.IsNullOrEmpty(phoneNumber))
                {
                    return "";
                }
                return phoneNumber;
            }
            catch (Exception ex)
            {
                return "";
            }
        }

  public class UserRepParamrep
        {
            public string session_key { get; set; }
            public string iv { get; set; }
            public string encryptedData { get; set; }
        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM