package Ġcom . c un yn . android . fin ances ystem . util Ċ Ċ import Ġjava . net . URL Decoder Ċ import Ġjava . util .* Ċ Ċ object ĠSign Utils Ġ{ ĊĊĠĠĠ Ġfun Ġsign ( Ġmap : Map < String , String ?> Ġ, Ġapp Secret Ġ: ĠString Ġ): String { ĊĠĠĠĠĠĠĠ Ġif ( Ġmap . size < 1 ) Ġreturn Ġ"" ĊĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġremove Null ( map ) ĊĠĠĠĠĠĠĠ Ġresult Ġ= Ġdecode ( result ) ĊĊĠĠĠĠĠĠĠ Ġval Ġresult String Ġ= Ġsort ( result , Ġapp Secret ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmd 5 ( result String ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç§»éĻ¤ åıĤæķ° ä¸Ń ç©º çļĦåıĤæķ° ĊĠĠĠĠ Ġ* Ġ@ param Ġmap ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġremove Null ( map : ĠMap < *, Ġ* >): ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlower Map Ġ= ĠHashMap < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġval Ġlower It Ġ= Ġmap . entries . iterator () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( lower It . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġlower It . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġentry . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( null Ġ!= Ġvalue Ġ&& Ġvalue . toString (). isEmpty () Ġ== Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlower Map [ entry . key . toString (). toLowerCase ()] Ġ= Ġvalue . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġlower Map ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdecode ( Ġmap : Ġ ĠMap < *, Ġ* >): Map < String , String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlower It Ġ= Ġmap . entries . iterator () ĊĊĠĠĠĠĠĠĠ Ġvar Ġlow Map Ġ= ĠHashMap < String , String >() ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ( lower It . hasNext ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġlower It . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġkey Ġ= Ġentry . key . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġkey . toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġentry . value . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdes Code Value Ġ: String Ġ= ĠURL Decoder . decode ( value , Ġ" utf - 8 ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// entry . value Ġ= des Code Value ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlow Map . put ( Ġkey Ġ, Ġdes Code Value ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlow Map . put ( key Ġ, Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġlow Map ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå¯¹ åıĤæķ° æĮī åŃĹ æ¯į æİĴåºı ï¼Į ç»Ħ æĪĲ key + value , æľĢåĲİ åĬł + app secret è¿ĶåĽŀ åŃĹç¬¦ä¸² ĊĠĠĠĠ Ġ* Ġ@ param Ġmap ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsort ( map : ĠMap < String , ĠString > ?, Ġapp Secret : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġ// map . put (" app Secret ", ĠConstants . APP _ SECRET ); ĊĠĠĠĠĠĠĠ Ġif Ġ( map Ġ== Ġnull ) Ġreturn Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠStringBuffer () ĊĠĠĠĠĠĠĠ Ġvar Ġsort Map Ġ= Ġmap . to Sorted Map () Ċ // ĠĠĠĠĠĠĠ Ġval Ġarray List Ġ= ĠArrayList ( map . entries ) Ċ Ċ // ĠĠĠĠĠĠĠ ĠCollections . sort < Any >( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray List , Ġobject Ġ: ĠComparator < Any > Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompare ( arg 1 : ĠAny , Ġarg 2 : ĠAny ): ĠInt Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj 1 Ġ= Ġarg 1 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj 2 Ġ= Ġarg 2 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobj 1 . key . toString (). compareTo ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobj 2 . key Ġas ĠString Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĊĠĠĠĠĠĠĠ Ġval Ġiter Ġ= Ġsort Map . iterator () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( iter . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġiter . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġentry . key Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . append ( key ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . append ( map [ key ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbuffer . append ( app Secret ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuffer . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġå¯¹ åŃĹç¬¦ä¸² è¿Ľè¡Į md 5 åĬłå¯Ĩ ï¼Į è½¬ å¤§ åĨĻ ĊĠĠĠĠ Ġ* Ġ@ param Ġresult ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġmd 5 ( result : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmd 5 String Ġ= ĠDigest Utils . md 5 ( result ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmd 5 String !!. toUpperCase () ĊĠĠĠ Ġ} Ċ Ċ // ĠĠĠ Ġcompanion Ġobject Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġprivate Ġvar Ġinstance Ġ= ĠSign Utils () Ċ // ĠĠĠĠĠĠĠ Ġfun ĠgetInstance (): Sign Utils { Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstance Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠ Ġ} Ċ }