ASP.NET WEBAPIは微信JS-SDKインタフェース注入権限検証構成を実現

7979 ワード

ASP.NET WEBAPIは微信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 Raphal2.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}&timestamp={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を正しく採用することができます.