algoritmo de firma Sing

En un proyecto para utilizar la firma algoritmo, la interfaz se escribe así:

5.1.1 Parámetros de entrada 
Método = openapi.stockout.create 
marca de tiempo = 2015 - 04 - 26 es  00 : 00 : 07 
el formato = XML 
app_key = testerp_appkey 
V = 2,0 
sign_method = MD5 
la customerId = Prueba
 5.1.2 ascendente alfabético. 
app_key = testerp_appkey 
la customerId = cust- Stub- código de 
formato = XML 
Método = openapi.stockout.create
sign_method = MD5 
marca de tiempo = 2015 - 04 - 26 es  00 : 00 : 07 
V = 2.0 
5.1.3 Cadena de conexión. 
nombres de los parámetros de conexión y valores de parámetros, y incluido más secretas, supone aquí Secret = Test, como sigue: 
testapp_keytesterp_appkeycustomerIdstub - cust- codeformatxmlmethod 
openapi.stockout.createsign_methodmd5timestamp2015 - 04 - 26 es  00 : 00 .: 07v2 0 organismo de prueba
 en el que: el cuerpo con los datos de cuerpo de solicitud lugar
 . 5.1.4 generar la firma sesión
 32 mayúsculas valor MD5 ->D06D88CB34B2EC0E5C9BAB396C9542B6
 5.1.5 . Montaje de la petición de URL 
para convertir todos los valores de parámetros UTF -8 codifican , a continuación, montado, y la codificación URL de la siguiente manera: 
HTTP: // sandbox.vwms.cn/open/service?method= 
opeanapi.stockout.create y marca de tiempo = el año 2015 - 04 -
 26 de % 2000 : 00 : 07 y = formato XML y app_key = testerp_appkey & v = 2.0 & Sign = D06D88CB34B2EC0E5C9B 
AB396C9542B6 y sign_method = MD5 y customerId Trozo-Cust-código =

La práctica es la siguiente:

 // timestamp 
                    cadena de marca de tiempo = DateTime.Now.ToString (); 
                    Jobject O = nueva jobject (
                          nueva JProperty ( " app_key " , _Setting.Value.app_key.ToString ()),
                          nueva JProperty ( " customerId " , _Setting.Value.customerId.ToString ()),
                          nueva JProperty ( " formato " , " xml " ),
                          nuevo JProperty ( " método ", " Openapi.singleitem.synchronize " ),
                          nueva nuevo JProperty ( " sign_method " , " MD5 " ),
                          nueva nuevo JProperty ( " marca de tiempo " , marca de tiempo),
                          nueva nuevo JProperty ( " V " , " 2.0 " ) 
                        ); 

                    // put anteriormente ordenar 
                    cadena S = JsonConvert.SerializeObject (O); 
                    el Diccionario <cuerda, String > valores = JsonConvert.DeserializeObject <Dictionary < string , string >> (s);
                    cadena Sort_Ret = CommonData.GetSignature (valores, "" );
                    // 拼接URL链接
                    cadena secreta = _Setting.Value.secret;
                    cadena de sesión = CommonData.StrToMD5 (+ secreta Sort_Ret + + IN0 secreta);
                    string url = "" + _Setting.Value.UrlApi.ToString () + " ? " +
                      " method = "openapi.singleitem.synchronize " +
                      " y timestamp = " + timestamp + "" +
                      " y format = xml " +
                      " y app_key = " + _Setting.Value.app_key.ToString () + "" +
                      " & v = 2,0 " +
                      " y signo = " signo + + "" +
                      " y sign_method = MD5 " +
                      "Y customerId = "_Setting.Value.customerId.ToString + () + "" ;
                     // enviar solicitud HTTP 
                    HttpClient Cliente = httpClientFactory.CreateClient ();
                    HttpContent contenido = new nuevo objeto StringContent, (IN0, Encoding.UTF8 , "archivo application / JSON"); // El propiedad de UTF-8 codificada
                     var RET = la await client.PostAsync (URL, contenido);
                     var RR = la await ret.Content.ReadAsStringAsync ();

El método utilizado, es una especie de un valor de signo se obtiene

 pública  estática  Cadena GetSignature (el IDictionary < Cadena , Cadena > Parámetros, Cadena Secreto) 
        { 
            // primer parámetro tipo lexicográfico ascendente su nombre del parámetro 
            del IDictionary < Cadena , Cuerda > = sortedParams nueva nueva del SortedDictionary < cadena , cadena > (parámetros) ; 
            el IEnumerator <KeyValuePair < cuerdas , cuerdas >> iterador = sortedParams.GetEnumerator (); 

            // atravesar el diccionario ordenadas, todos los parámetros como los formatos "keyvaluekeyvalue" se empalman juntos 
            StringBuilder basestring =nuevo StringBuilder ();
            mientras que (iterator.MoveNext ()) 
            { 
                string clave = iterator.Current.Key;
                cadena de valor = iterator.Current.Value.ToString ();
                si (! cadena .IsNullOrEmpty (clave) && valor =! nula ) 
                { 
                    basestring.Append (clave) .Append (valor); 
                } 
            } 

            // 使用MD5对待签名串求签
             // cadena upperCaseStr = StrToMD5 (basestring.ToString ());
            // cadena resultado = StrToMD5 (+ secreta upperCaseStr);
            volver basestring.ToString (); 
        } 

        Pública  estática  cadena StrToMD5 ( string str) 
        { 
            byte [] = datos Encoding.UTF8.GetBytes (str); 
            MD5 md5 = nuevo MD5CryptoServiceProvider ();
            byte [] OutBytes = md5.ComputeHash (datos); 

            cadena OutString = "" ;
            para ( int i = 0 ; i <OutBytes.Length; i ++ ) 
            { 
                OutString + = OutBytes [i] .ToString ( " x2" ); 
            } 
            Volver OutString.ToUpper (); 
        } 

        pública  estática DateTime GetLocalTime ( cadena StandardTime) 
        { 
            var ChTimeZone = TimeZoneInfo.FindSystemTimeZoneById (StandardTime); 
            DateTime ChTime = TimeZoneInfo.ConvertTime (DateTime.Now, TimeZoneInfo.Local, ChTimeZone); 
           
            regreso ChTime; 
        }

 

Supongo que te gusta

Origin www.cnblogs.com/ZkbFighting/p/12587323.html
Recomendado
Clasificación