微信小程序获取手机号---.NET WebApi2---C#语言

微信小程序获取手机号需要完成认证,才能获取得到

否则会出现下列情况
1

一、搭建后台服务器(WebApI)

新建webapi2空控制器 OnLoginController

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Web.Http;
using WebApplication1.Models;//引入实体类命名空间
using System.Web.Http.Cors;//跨域请求命名空间

namespace WebApplication1.Controllers
{
 //跨域请求
  [EnableCors(origins:"*",headers:"*",methods:"*")]
  [RoutePrefix("api/OnLogin")]
    public class OnLoginController : ApiController
    {
        [Route("Get")]
        [HttpGet]
        public object Get(string code)
        {
            string cod = code;
            string html = string.Empty;
            string url = "https://api.weixin.qq.com/sns/jscode2session?appid=wxb2f63b12a7371f2a&secret=110dc84617c235b5809a7f5d8d43af3a&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;
        }  
    }
}

新建实体类RepParamrep ,保存session_key和open_id

namespace WebApplication1.Models
{
    public class RepParamrep
    {
        public string session_key { get; set; }
        public string openid { get; set; }
    }
}

解析手机号码

[Route(“Get”)]
[HttpGet]
public string Get(string encryptedData, string iv, string session_key)
{

    string _telPhone = getPhoneNumber(encryptedData, iv, session_key);
    return _telPhone;
}
private string getPhoneNumber(string encryptedData, string IV, string 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;
        return model.phoneNumber;

    }
    catch (Exception ex)
    {
        return "";
    }
}

二、设计前端界面及逻辑

//index.wxss
<view>
  <button class="cu-btn bg-blue margin-tb-xs lg" hidden="{{hid1}}" open-type="getUserInfo" bindgetuserinfo="bindGetUserInfo">授权</button>
  <button class="cu-btn bg-blue margin-tb-xs lg" hidden="{{hid2}}" open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">进入</button>
</view>
//index.js
const app = getApp();
Page({
  data: {
    userPhone: '',
    userNicheng: '',
    hid1: false,
    hid2: true
  },
  bindGetUserInfo: function(e) {
    this.setData({
      userNicheng: e.detail.userInfo.nickName,
      hid1: true,
      hid2: false
    })
  },
  getPhoneNumber: function(e) {
    var that = this;
    console.log("getPhoneNumberok" + e.detail.errMsg);
    if (e.detail.errMsg == "getPhoneNumber:ok") {
        //端口号是由后端服务器生成
      wx.request({
        url: 'https://localhost:44358/api/OnLogin/Get',
        data: {
          encryptedData: e.detail.encryptedData,
          iv: e.detail.iv,
          session_key: app.globalData.session_key
        },
        method: "get",
        success: function(res) {
          console.log(res)
          that.setData({
            userPhone: res.data
          })
        },
        fail:function(res){
          console.log(res.errMsg)
        }
      })
    }
  }
})
//app.js
App({
  globalData:{
    session_key:'',
    openid:''
  },
  onLaunch: function() {
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        console.log(res)
        if (res.code) {
          console.log("code========" + JSON.stringify(res));
          //发起网络请求
          wx.request({
            url: 'https://localhost:44358/api/OnLogin/Get',
            data: {
              code: res.code
            },
            success: data => {
              console.log("data" + JSON.stringify(data.data));
              this.globalData.session_key = data.data.session_key;
              this.globalData.openid = data.data.openid;
              console.log("openid" + this.globalData.openid);
            },
            fail:data=>{
              console.log(data)
            }
          })
        } else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })
  } 
})
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值