ASP.NET WEBAPIは微信JS-SDKインタフェース注入権限検証構成を実現
ASP.NET WEBAPIは微信JS-SDKインタフェース注入権限検証構成を実現
私たちのクライアントはHTML 5クライアントで、私たちは微信が提供するJS-SDKを採用する予定ですが、JS-SDKを使用する必要があるすべてのページはまず構成情報を注入しなければなりません.そうしないと、呼び出すことができません.構成のコードは
JS-SDKを使用する場合、微信は以上のパラメータを暗号化し、正しいかどうかを試算するので、正しい署名値を提供する必要があります.この署名を取得するには、次のUMLで説明する2つのステップを完了する必要があります.
Created with Raphal2.1.0微信クライアントWebAPI WebAPI微信サーバappid/timestamp/noncesStr grant_type/appid/secret access_token access_token/jsapi jsapi_ticket signature signature
ステップ1:アクセスtokenアクセスを取得するtokenは公衆番号のグローバル一意の手形であり、公衆番号が各インタフェースを呼び出す際にaccessを使用する必要がある.token.開発者は適切に保存する必要がある.access_tokenのストレージは、少なくとも512文字の空間を保持する必要があります.access_tokenの有効期間は現在2時間で、タイミングリフレッシュが必要で、繰り返し取得すると前回取得したaccess_tokenは無効です.微信提供インタフェースは
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
パラメータの説明
パラメータ
必要かどうか
説明
grant_type
はい
アクセスの取得tokenクライアントに記入_credential
appid
はい
サードパーティユーザー固有の資格証明
secret
はい
サードパーティユーザー固有の証明鍵、すなわちappsecret
アクセスtokenを取得するためのWEBAPIコードは
キャッシュに関する微信の要求に従うためにHttpRuntimeを採用した.Cacheはtokenを保存します.アクセスtokenを正しく取得した後、jsapi_を取得する必要があります.ticket
ステップ2:jsapi_を取得するticket jsapi_ticketは、WeChat JSインタフェースを呼び出すための公衆番号の一時手形です.通常、jsapi_ticketの有効期間は7200秒でaccess_を通過するtokenが取得します.jsapi_を取得するためticketのapi呼び出し回数は非常に限られており、jsapi_を頻繁にリフレッシュするticketはapi呼び出しが制限され、自分のビジネスに影響を与え、開発者は自分のサービスでjsapiをグローバルにキャッシュしなければならない.ticket .
jsapi_を取得するために使用しますticketのコードは
同様にキャッシュに関する手紙の要求に従うためにHttpRuntimeを採用した.Cacheはjsapiを保存するticket.今、私たちが署名に使う素材がそろっています.署名アルゴリズムを実現します.まず、署名アルゴリズムに関する微信の要求を見てみましょう.ステップ1.署名すべきすべてのパラメータをフィールド名のASCIIコードに従って小さいから大きいまで並べ替え(辞書順)た後、URLキー値ペアのフォーマット(すなわちkey 1=value 1&key 2=value 2...)を使用して文字列string 1につづる:ステップ2.string 1に対してsha 1署名を行ってsignatureを得る:このステップ1のソートは実は無視することができて、署名フィールドのソートは実は:jsapi_ticket、noncestr、timestamp、urlでいいですが、実現するコードは以下の通りです.
このとき私たちのフロントエンドのHTML 5はJS-SDKを正しく採用することができます.
私たちのクライアントはHTML 5クライアントで、私たちは微信が提供するJS-SDKを採用する予定ですが、JS-SDKを使用する必要があるすべてのページはまず構成情報を注入しなければなりません.そうしないと、呼び出すことができません.構成のコードは
wx.config({
debug: true, // , api alert , , pc , log , pc 。
appId: '', // ,
timestamp: , // ,
nonceStr: '', // ,
signature: '',// , , 1
jsApiList: [] // , JS , JS 2
});
JS-SDKを使用する場合、微信は以上のパラメータを暗号化し、正しいかどうかを試算するので、正しい署名値を提供する必要があります.この署名を取得するには、次のUMLで説明する2つのステップを完了する必要があります.
Created with Raphal2.1.0微信クライアントWebAPI WebAPI微信サーバappid/timestamp/noncesStr grant_type/appid/secret access_token access_token/jsapi jsapi_ticket signature signature
ステップ1:アクセスtokenアクセスを取得するtokenは公衆番号のグローバル一意の手形であり、公衆番号が各インタフェースを呼び出す際にaccessを使用する必要がある.token.開発者は適切に保存する必要がある.access_tokenのストレージは、少なくとも512文字の空間を保持する必要があります.access_tokenの有効期間は現在2時間で、タイミングリフレッシュが必要で、繰り返し取得すると前回取得したaccess_tokenは無効です.微信提供インタフェースは
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
パラメータの説明
パラメータ
必要かどうか
説明
grant_type
はい
アクセスの取得tokenクライアントに記入_credential
appid
はい
サードパーティユーザー固有の資格証明
secret
はい
サードパーティユーザー固有の証明鍵、すなわちappsecret
アクセスtokenを取得するためのWEBAPIコードは
if (HttpRuntime.Cache["access_token"] == null)
{
var queryString = HttpUtility.ParseQueryString(string.Empty);
queryString["grant_type"] = "client_credential";
queryString["appid"] = APPID;
queryString["secret"] = APPSECRET;
var uri = "https://api.weixin.qq.com/cgi-bin/token?" + queryString;
HttpResponseMessage response;
response = await client.GetAsync(uri);
var msg = await response.Content.ReadAsStringAsync();
var jsonobj = Newtonsoft.Json.Linq.JObject.Parse(msg);
HttpRuntime.Cache.Add("access_token",
(string)jsonobj["access_token"],
null,
DateTime.Now.AddMinutes((int)jsonobj["expires_in"]),
new TimeSpan(0, 0, 0),
System.Web.Caching.CacheItemPriority.AboveNormal,
null
);
}
キャッシュに関する微信の要求に従うためにHttpRuntimeを採用した.Cacheはtokenを保存します.アクセスtokenを正しく取得した後、jsapi_を取得する必要があります.ticket
ステップ2:jsapi_を取得するticket jsapi_ticketは、WeChat JSインタフェースを呼び出すための公衆番号の一時手形です.通常、jsapi_ticketの有効期間は7200秒でaccess_を通過するtokenが取得します.jsapi_を取得するためticketのapi呼び出し回数は非常に限られており、jsapi_を頻繁にリフレッシュするticketはapi呼び出しが制限され、自分のビジネスに影響を与え、開発者は自分のサービスでjsapiをグローバルにキャッシュしなければならない.ticket .
jsapi_を取得するために使用しますticketのコードは
if (HttpRuntime.Cache["jsapi_ticket"] == null)
{
var queryString = HttpUtility.ParseQueryString(string.Empty);
queryString["access_token"] = (string)HttpRuntime.Cache["access_token"];
queryString["type"] = "jsapi";
var uri = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?" + queryString;
HttpResponseMessage response;
response = await client.GetAsync(uri);
var msg = await response.Content.ReadAsStringAsync();
var jsonobj = Newtonsoft.Json.Linq.JObject.Parse(msg);
HttpRuntime.Cache.Add("jsapi_ticket",
(string)jsonobj["ticket"],
null,
DateTime.Now.AddMinutes((int)jsonobj["expires_in"]),
new TimeSpan(0, 0, 0),
System.Web.Caching.CacheItemPriority.AboveNormal,
null
);
}
同様にキャッシュに関する手紙の要求に従うためにHttpRuntimeを採用した.Cacheはjsapiを保存するticket.今、私たちが署名に使う素材がそろっています.署名アルゴリズムを実現します.まず、署名アルゴリズムに関する微信の要求を見てみましょう.ステップ1.署名すべきすべてのパラメータをフィールド名のASCIIコードに従って小さいから大きいまで並べ替え(辞書順)た後、URLキー値ペアのフォーマット(すなわちkey 1=value 1&key 2=value 2...)を使用して文字列string 1につづる:ステップ2.string 1に対してsha 1署名を行ってsignatureを得る:このステップ1のソートは実は無視することができて、署名フィールドのソートは実は:jsapi_ticket、noncestr、timestamp、urlでいいですが、実現するコードは以下の通りです.
var pwd = string.Format("jsapi_ticket={0}&noncestr={1}×tamp={2}&url={3}",
(string)HttpRuntime.Cache["jsapi_ticket"],
noncestr,
timestamp,
url
);
var tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(pwd, "SHA1");
return Request.CreateResponse(HttpStatusCode.OK, tmpStr);
このとき私たちのフロントエンドのHTML 5はJS-SDKを正しく採用することができます.