国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ WeChat アプレット WeChatの開発 ASP.NET MVC WeChat JS-SDK 認(rèn)定サンプル チュートリアル

ASP.NET MVC WeChat JS-SDK 認(rèn)定サンプル チュートリアル

Apr 25, 2017 am 11:31 AM
asp.net mvc 微信

ASP.NET MVC微信JS-SDK認(rèn)證,具體內(nèi)容:

寫在前面

前陣子因?yàn)橛袀€(gè)項(xiàng)目需要做微信自定義分享功能,因而去研究了下微信JS-SDK相關(guān)知識。

此文做個(gè)簡單的記(tu)錄(cao)...

開始
所有的東西都從文檔開始:微信JSSDK說明文檔

項(xiàng)目需要用到的是分享接口 不過使用微信JS-SDK之前,需要做JS接口認(rèn)證。

認(rèn)證如下:

步驟一:綁定域名

步驟二:引入JS文件

步驟三:通過config接口注入權(quán)限驗(yàn)證配置

步驟四:通過ready接口處理成功驗(yàn)證

步驟五:通過error接口處理失敗驗(yàn)證

具體解釋:

步驟一中允許使用域名/子域名,只要xx.com/xxx.txt或者xx.com/mp/xxx.txt能訪問就好。域名認(rèn)證通過之后,此域名下的所有端口的網(wǎng)站都可以使用JS-SDK。

步驟二沒什么問題,略過。

步驟三最磨人,下面單獨(dú)講解。

config接口注入權(quán)限驗(yàn)證配置

先來一段說明:

所有需要使用JS-SDK的頁面必須先注入配置信息,否則將無法調(diào)用(同一個(gè)url僅需調(diào)用一次,對于變化url的SPA的web app可在每次url變化時(shí)進(jìn)行調(diào)用,目前Android微信客戶端不支持pushState的H5新特性,所以使用pushState來實(shí)現(xiàn)web app的頁面會導(dǎo)致簽名失敗,此問題會在Android6.2中修復(fù))。

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

看到這里肯定懵逼了,這是都什么鬼...怎么玩啊。

提示我們?nèi)タ锤戒?...看完之后總結(jié)如下:

1.使用config接口注入權(quán)限驗(yàn)證配置,重點(diǎn)是生成合法的signatrue
2.生成signature需要通過appid和secret獲取token
3.時(shí)間戳和調(diào)用接口URL必不可少
4.此操作需要服務(wù)端完成,不能使用客戶端實(shí)現(xiàn)

整個(gè)過程變成:

1.通過appid和secret獲取access_token,接著使用token獲取jsapi_ticket;

2.拿到j(luò)sapi_ticket之后,把jsapi_ticket、時(shí)間戳、隨機(jī)字符串、接口調(diào)用頁面URL 拼接成完整字符串,使用sha1算法加密得到signature。

3.最后返回至頁面,在wx.config里面填入appid,上一步的時(shí)間戳timestamp,上一部的隨機(jī)字符串、sha1拿到的signature,想要使用的JS接口。

廢話少說,直接上代碼吧。

代碼時(shí)間

 public class WeiXinController : Controller
 {
 public static readonly string appid =
 System.Web.Configuration.WebConfigurationManager.AppSettings["wxappid"];

 public static readonly string secret =
 System.Web.Configuration.WebConfigurationManager.AppSettings["wxsecret"];

 public static readonly bool isDedug =
 System.Web.Configuration.WebConfigurationManager.AppSettings["IsDebug"] =="true";


 public static string _ticket = "";
 public static DateTime _lastTimestamp;

 public ActionResult Info(string url,string noncestr)
 {
  if (string.IsNullOrEmpty(_ticket) || 
  _lastTimestamp == null || (_lastTimestamp - DateTime.Now).Milliseconds > 7200)
  {
  var resultString = HTTPHelper.GetHTMLByURL("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
   + appid + "&secret=" + secret);
  dynamic resultValue = JsonConvert.DeserializeObject<dynamic>(resultString);
  if (resultValue == null || resultValue.access_token == null 
  || resultValue.access_token.Value == null)
  {
   return Json(new { issuccess = false, 
   error = "獲取token失敗" });
  }
  var token = resultValue.access_token.Value;

  resultString = HTTPHelper.GetHTMLByURL
  ("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + 
  token + "&type=jsapi");
  dynamic ticketValue = JsonConvert.DeserializeObject<dynamic>(resultString);
  if (ticketValue == null || ticketValue.errcode == null
  || ticketValue.errcode.Value != 0 || ticketValue.ticket == null)
   return Json(new { issuccess = false,
   error = "獲取ticketValue失敗" });
  _ticket = ticketValue.ticket.Value;
  _lastTimestamp = DateTime.Now;
  var timestamp = GetTimeStamp();
  var hexString = string.Format("jsapi_ticket={0}&noncestr={3}&timestamp={1}&url={2}",
  _ticket, timestamp, url,noncestr);

  return Json(new {
   issuccess = true, 
   sha1value = GetSHA1Value(hexString), 
   timestamp = timestamp, 
   url = url, 
   appid = appid, 
   debug=isDedug,
   tiket=_ticket
  });
  
  }
  else
  {
  var timestamp = GetTimeStamp();
  var hexString = string.Format("jsapi_ticket={0}&noncestr=1234567890123456&timestamp={1}&url={2}",
   _ticket, timestamp, url);
  return Json(new { 
   issuccess = true, sha1value = GetSHA1Value(hexString),
   timestamp = timestamp, url = url,
   appid = appid, debug = isDedug,tiket = _ticket
  });
  }
 }


 private string GetSHA1Value(string sourceString)
 {
  var hash = SHA1.Create().ComputeHash(Encoding.UTF8.GetBytes(sourceString));
  return string.Join("", 
  hash.Select(b => b.ToString("x2")).ToArray());
 }

 private static string GetTimeStamp()
 {

  TimeSpan ts = DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0, 0);

  return Convert.ToInt64(ts.TotalSeconds).ToString();

 }

 }
 
 public class HTTPHelper
 {
 public static string GetHTMLByURL(string url)
 {
  string htmlCode = string.Empty;
  try
  {
  HttpWebRequest webRequest = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
  webRequest.Timeout = 30000;
  webRequest.Method = "GET";
  webRequest.UserAgent = "Mozilla/4.0";
  webRequest.Headers.Add("Accept-Encoding", "gzip, deflate");
  HttpWebResponse webResponse = (System.Net.HttpWebResponse)webRequest.GetResponse();
  //獲取目標(biāo)網(wǎng)站的編碼格式
  string contentype = webResponse.Headers["Content-Type"];
  Regex regex = new Regex("charset\\s*=\\s*[\\W]?\\s*([\\w-]+)", RegexOptions.IgnoreCase);
  if (webResponse.ContentEncoding.ToLower() == "gzip")//如果使用了GZip則先解壓
  {
   using (System.IO.Stream streamReceive = webResponse.GetResponseStream())
   {
   using (var zipStream = new System.IO.Compression.GZipStream(streamReceive, System.IO.Compression.CompressionMode.Decompress))
   {
    //匹配編碼格式
    if (regex.IsMatch(contentype))
    {
    Encoding ending = Encoding.GetEncoding
    (regex.Match(contentype).Groups[1].Value.Trim());
    using (StreamReader sr = new System.IO.StreamReader(zipStream, ending))
    {
     htmlCode = sr.ReadToEnd();
    }
    }
    else
    {
    using (StreamReader sr = new System.IO.StreamReader(zipStream, Encoding.UTF8))
    {
     htmlCode = sr.ReadToEnd();
    }
    }
   }
   }
  }
  else
  {
   using (System.IO.Stream streamReceive = webResponse.GetResponseStream())
   {
   var encoding = Encoding.Default;
   if (contentype.Contains("utf"))
    encoding = Encoding.UTF8;
   using (System.IO.StreamReader sr = new System.IO.StreamReader(streamReceive, encoding))
   {
    htmlCode = sr.ReadToEnd();
   }

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

PS:這里要注意緩存一下_ticket(即access_token),照微信文檔說的,access_token兩個(gè)小時(shí)內(nèi)有效,不需要頻繁調(diào)用。而且獲取access_token的接口有調(diào)用次數(shù)的限制,如果超過了次數(shù),就不允許調(diào)用了。

PPS:建議noncestr和URL由前臺傳入比較適合,使用 var theWebUrl = window.location.href.split('#')[0] 獲取URL,noncestr就隨意了。

PPPS:遇到詭異的invalid signature的時(shí)候,首先檢查url參數(shù),然后檢查noncestr,再不行重啟一下程序獲取一個(gè)新的token回來繼續(xù)玩。

以上がASP.NET MVC WeChat JS-SDK 認(rèn)定サンプル チュートリアルの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

コピーコミック(公式ウェブサイトの入り口)_COPYコミック(NBA)本物のオンライン読書ポータル コピーコミック(公式ウェブサイトの入り口)_COPYコミック(NBA)本物のオンライン読書ポータル Jun 05, 2025 pm 04:12 PM

コミックのコピーは間違いなく見逃せない寶物です。ここでは、情熱的で刺激的な競爭力のあるストーリーからリラックスしたユーモラスな毎日のコメディまで、さまざまなスタイルのバスケットボールコミックを見つけることができます。クラシックを追體験したいか、新しい作品を発見したいかにかかわらず、漫畫をコピーすることであなたのニーズを満たすことができます。 Copy Comicsが提供する本物のオンライン読書ポータルを通じて、海賊版のリソースのトラブルに別れを告げ、高解像度とスムーズな読書體験を楽しんで、お?dú)荬巳毪辘违偿撺氓骷窑颔单荸`トし、本物のコミックの発展に貢獻(xiàn)できます。

トップ10 AIライティングソフトウェアランキングは、どのAIライティングソフトウェアが無料であるかを推奨しています トップ10 AIライティングソフトウェアランキングは、どのAIライティングソフトウェアが無料であるかを推奨しています Jun 04, 2025 pm 03:27 PM

2025年の最新の業(yè)界動向と多次元評価データを組み合わせることで、以下は、一般的な創(chuàng)造、學(xué)術(shù)研究、商業(yè)マーケティングなどの主流のシナリオをカバーしながら、中國の最適化とローカリゼーションサービスを考慮しながら、包括的なAIライティングソフトウェアの推奨事項(xiàng)のトップ10です。

無料のコミックについては、NISコミックのオンラインで公式ページをご覧ください。 NIS Comicsログインページの無料エントリWebサイト 無料のコミックについては、NISコミックのオンラインで公式ページをご覧ください。 NIS Comicsログインページの無料エントリWebサイト Jun 12, 2025 pm 08:18 PM

コミック愛好家のために作成することに専念する沒入型の読書體験プラットフォームである素?cái)长圣偿撺氓?、自宅と海外で多?shù)の高品質(zhì)のコミックリソースを集めます。コミックリーディングプラットフォームであるだけでなく、コミックアーティストや読者をつなぎ、コミック文化を共有するコミュニティでもあります。 NES Comicsを使用すると、シンプルで直感的なインターフェイスデザインと強(qiáng)力な検索機(jī)能を通じて、お?dú)荬巳毪辘巫髌筏蚝唴gに見つけて、スムーズで快適な読書體験を楽しむことができます。長い待っていて退屈な作戦に別れを告げ、すぐに素?cái)长事嫟问澜绀巳毪?、コミックの旅を始めましょう?/p>

カエルマンオンライン視聴玄関マンカエルマン(ウェブページの入り口)オンラインで見る カエルマンオンライン視聴玄関マンカエルマン(ウェブページの入り口)オンラインで見る Jun 12, 2025 pm 08:06 PM

フロッグマンコミックは、豊かで多様なコミックリソースと便利でスムーズなオンライン読書體験を備えた多くのコミック愛好家にとって最初の選択肢となっています。それは活気のある池のようなもので、新鮮で興味深い物語が絶えず現(xiàn)れており、あなたが発見して探索するのを待っています。 Frog Man Comicsは、情熱的な冒険から甘い愛、ファンタジーやサイエンスフィクションからサスペンス推論まで、どんなジャンルが好きであっても、お?dú)荬巳毪辘巫髌筏蛞姢膜堡毪长趣扦蓼埂%伐螗抓毪侵备械膜圣ぅ螗咯`フェイスデザインにより、簡単に開始したり、読みたい漫畫をすぐに見つけたり、エキサイティングなコミックの世界に沒頭したりできます。

Baoziコミック(入り口)_ Baoziコミック(新しい入り口)2025 Baoziコミック(入り口)_ Baoziコミック(新しい入り口)2025 Jun 05, 2025 pm 04:18 PM

ここでは、漫畫の広大な海を楽しみ、情熱的な若い男のコミックから繊細(xì)で感動的な女の子のコミック、サスペンスで脳を燃やすミステリーコミックから、リラックスした面白い毎日のコミックまで、すべてがあり、常にあなたの心に觸れることができるものがあります。私たちは大量の本物のコミックリソースを持っているだけでなく、最新の作品を常に紹介し、更新して、お?dú)荬巳毪辘违偿撺氓颏扦毪坤痹绀iむことができるようにします。

b最新の登録アドレス_ Exchangeを登録する方法 b最新の登録アドレス_ Exchangeを登録する方法 May 26, 2025 pm 07:12 PM

2025b Anhuiの最新の公式ウェブサイトは、https://www.marketwebb.co/zh-cn/join?ref=507720986&amp; Type = Wenzi; Binance Exchangeは、北米、ヨーロッパ、臺灣、中東、香港、マレーシアを含む180か國と地域にサービスを提供するグローバルな暗號通貨取引所です。 600を超える暗號通貨を提供し、世界中に2億7000萬人の登録ユーザーがいます。

Android電話でHuobiをダウンロードする方法は? Huobiダウンロードチュートリアル(ステップバイステップチュートリアル) Android電話でHuobiをダウンロードする方法は? Huobiダウンロードチュートリアル(ステップバイステップチュートリアル) Jun 12, 2025 pm 10:12 PM

Android攜帯電話のユーザーは、次の手順からHuobi/Huobiアプリをダウンロードしてインストールできます。1。ネットワークが安定しており、ストレージスペースで十分であることを確認(rèn)してください。 2. Huobi/Huobiの公式Webサイトからアプリをダウンロードし、ブラウザを使用して公式Webサイトにアクセスし、ダウンロードリンクをクリックするか、QRコードをスキャンするか、ApptreasureやHuawei App Marketなどのサードパーティのアプリケーションストアを検索してダウンロードしてください。 3.ダウンロードされた.apkファイルを見つけ、「不明なソースアプリ」のインストール許可を有効にし、インストールを完了するためのプロンプトに従ってください。

2つの電話でWeChatを同時(shí)に使用できますか? 2つの電話でWeChatを同時(shí)に使用できますか? Jul 11, 2025 am 03:28 AM

はい、しかし制限があります。 iPhone電話とAndroidの両方の攜帯電話の両方で同じアカウントにログインできますが、最新のデバイスにログインすると、最も早いセッションがオフラインになります。攜帯電話とコンピューターデスクトップで同時(shí)にログインできますが、機(jī)能は同期されていません。 shurdサードパーティツールまたはデュアルアプリ機(jī)能を使用すると、2つの攜帯電話の間にログインすることができますが、非公式にサポートされており、規(guī)制に違反する可能性があります。 autaltertive代替ソリューションには、メインの電話に一致するWebバージョン/デスクトップバージョンを使用するか、クラウドバックアップおよびファイルツールを介してチャットレコードを転送することが含まれます。一部のAndroidマシンは、「デュアルアプリケーション」を使用して2つのアカウントインスタンスを?qū)g行することもできます。

See all articles