<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C#調用微信程序掃一掃

      還是照舊廢話不多說,直接上重點

      相信大家都搜到了這篇文章,那么肯定也不是啥也不會,因此在以下文章中省略一些基礎部分;

      先簡單說一下步驟【這是調用微信官方api的步驟】:

      1.首先拿到appId與AppSecret。

      2.獲取token

      3.根據token獲取ticket

      4.通過以上信息生成簽名,正確的配置完簽名才能調用微信api,簽名格式如下:

      
      const config = {  
          debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。  
          appId: '', // 必填,公眾號的唯一標識  
          timestamp: , // 必填,生成簽名的時間戳  
          nonceStr: '', // 必填,生成簽名的隨機串  
          signature: '',// 必填,簽名,見附錄1  
          jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2  
      }
      
      wx.config(config);
      

      接下來就是以上步驟的實現,不多說,直接上代碼:

      請求接口:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=xxx&secret=xxx

      appid與secret填進去即可;

      先寫一下HttpClientHelper.cs用來發送請求的靜態輔助類:

      
           public static T GetResponse<T>(string url)
                  where T : class, new()
              {
                  var httpClient = new HttpClient();
                  httpClient.DefaultRequestHeaders.Accept.Add(
                     new MediaTypeWithQualityHeaderValue("application/json"));
                  var response = httpClient.GetAsync(url).Result;
      
                  var result = default(T);
      
                  if (response.IsSuccessStatusCode)
                  {
                      var t = response.Content.ReadAsStringAsync();
                      var s = t.Result;
      
                      result = JsonConvert.DeserializeObject<T>(s);
                  }
                  return result;
              }
      

      ok工具類有了,還需要實體來接收微信api返回的信息:

      
           public class wechatResquert
              {
                  //簽名需要當前調用接口的頁面地址,哪個頁面調用掃一掃,穿哪個頁面完整url進來
                  public string src { get; set; }
              }
              public class wechatResposen
              {
                  public bool debug { get; set; }
                  public string appId { get; set; }
      
                  public string timestamp { get; set; }
      
                  public string nonceStr { get; set; }
      
                  public string signature { get; set; }
      
                  public string jsApid { get; set; }
                  public string ticket { get; set; }
      
      
                  public string string1 { get; set; }
      
              }
      
              public class wechatData
              {
                  public string expires_in { get; set; }
                  public string access_token { get; set; }
                  public string errcode { get; set; }
                  public string ticket { get; set; }
                  public string errmsg { get; set; }
              }
      
              public class chatData
              {
                  public bool succcess { get; set; }
      
                  public string msg { get; set; }
      
                  public string src { get; set; }
      
                  public wechatResposen data { get; set; } = new wechatResposen();//生成的簽名
      
              }
      

      接下來就是缺一個生成簽名的方法了,新建一個方法GetWeChatConfig

      
      public ApiResult GetWeChatConfig(wechatResquert resquert){
      
                  chatData result = new chatData();
      
                  //記錄當前是哪個頁面,方便調試
                  result.src = resquert.src;
      
                  //獲取token
                  wechatData data = HttpClientHelper.GetResponse<wechatData>("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}");
               
                  if (data.errcode != "" && data.errcode != null)
                  {//失敗就直接返回
                      result.succcess = false;
                      result.msg = data.errmsg;
      
                      return Success(result);
                  }
      
                  //獲取ticket
                  wechatData ticket = HttpClientHelper.GetResponse<wechatData>($"https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={data.access_token}&type=jsapi");
      
                  if (ticket.errcode != "0" && ticket.errcode != null)
                  {//失敗就直接返回
                      result.succcess = false;
                      result.msg = data.errmsg;
      
                      return Success(result);
                  }
                  //獲取時間戳,生成隨機字符,拼湊string1,將string1 Sha1加密生成signature
                  TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
      
                  string timestamp = Convert.ToInt64(ts.TotalMilliseconds / 1000).ToString();//微信默認處理時間戳是10位數,所以在這里除以1000
      
                  string noncestr = Guid.NewGuid().ToString();
      
                  string string1 = $"jsapi_ticket={ticket.ticket}&noncestr={noncestr}&timestamp={timestamp}&url={resquert.src}";//順序不能改
      
                   using (SHA1 sha1 = SHA1.Create())
                  {
                      // 將輸入字符串轉換為字節數組
                      byte[] inputBytes = Encoding.UTF8.GetBytes(string1);
      
                      // 計算哈希值
                      byte[] hashBytes = sha1.ComputeHash(inputBytes);
      
                      // 將字節數組轉換為十六進制字符串
                      StringBuilder sb = new StringBuilder();
                      foreach (byte b in hashBytes)
                      {
                          sb.Append(b.ToString("x2")); // "x2" 表示將字節轉換為兩位十六進制
                      }
      
                      result.succcess = true;
                      result.msg = "ok";
      
                      result.data.appId = "xxx";
                      result.data.debug = false;
                      result.data.jsApid = "scanQRCode";
                      result.data.nonceStr = noncestr;
                      result.data.timestamp = timestamp;
                      result.data.signature = sb.ToString();
                      result.data.ticket = ticket.ticket;
                      result.data.string1 = string1;
      
                      return Success(result);
                  }
      }
      

      ok后端代碼層面就這么簡單,data中就是生成的簽名

      前端引入<script src="https://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script>

                                  
                                    // 配置微信 JS-SDK,加入你已經通過后端GetWeChatConfig獲取了配置信息_data
                                     wx.config({
                                         debug: false, // 調試模式,true 時會彈出調試信息
                                         appId: _data.data.appId,
                                         timestamp: _data.data.timestamp,
                                         nonceStr: _data.data.nonceStr,
                                         signature: _data.data.signature,
                                         jsApiList: [_data.data.jsApid] // 需要使用的JS接口列表
                                     });
      
                                     // 配置完成后調用
                                     wx.ready(function () {
                                         console.log("微信 JS-SDK 配置完成");
                                         wx.scanQRCode({
                                             needResult: 1, // 默認為0,掃描結果由微信處理;1則直接返回掃描結果
                                             scanType: ["qrCode"], // 可以指定掃二維碼還是條形碼
                                             success: function (res) {
                                                 debugger
                                                 const result = res.resultStr; // 掃碼結果
                                                 alert(result);
      
                                             },
                                             fail: function (err) {
                                                 alert("掃碼失敗: ", err);
                                             }
                                         });
                                     });
      
                                     // 處理配置失敗
                                     wx.error(function (err) {
                                         console.error("微信 JS-SDK 配置失敗: ", err);
                                     });
      

      將以上這段js代碼寫入你需要觸發掃碼的事件中,效果如圖:

      posted @ 2025-02-26 11:21  hadxs  閱讀(92)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久精品国产蜜臀av| 欧美三级中文字幕在线观看| 又爽又黄又无遮掩的免费视频| 亚洲午夜激情久久加勒比| 人妻有码中文字幕在线| 亚洲精品欧美综合二区| 玩弄少妇人妻| 欧美高清狂热视频60一70| 亚洲一区二区av在线| 国产精品一区在线蜜臀| aaa少妇高潮大片免费看| 国产精品国产三级在线专区| 国产成人无码免费看片软件| 亚洲国产精品热久久一区| 26uuu另类亚洲欧美日本| 亚洲国产午夜理论片不卡| 成人无码视频在线观看免费播放| 一本精品中文字幕在线| 国产办公室秘书无码精品99| 日韩在线视频一区二区三区| 麻豆a级片| 国产999久久高清免费观看| 国产精品白丝久久av网站| 中文字幕日本一区二区在线观看| 亚洲精品美女一区二区| 日本亚洲欧洲无免费码在线| 免费人妻无码不卡中文字幕18禁| 国产成人不卡一区二区| 极品人妻少妇一区二区| 亚洲精品久久久久国产| 久久综合香蕉国产蜜臀av| 一卡二卡三卡四卡视频区| 999精品全免费观看视频| 免费无码观看的AV在线播放| 国产第一页浮力影院入口| 青青国产揄拍视频| 中文字幕国产精品自拍| 青青狠狠噜天天噜日日噜| 国产成人一卡2卡3卡四卡视频| 国产仑乱无码内谢| 久久国内精品自在自线91|