美团认证工具类



美团认证测试工具

java版本

依赖HttpClient、Apache Common Codec

package xxx;
  
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.apache.http.client.methods.HttpRequestBase;
  
public class BaseAuthorizationUtils {
  
    public static void generateAuthAndDateHeader(HttpRequestBase request, String partnerId, String secret) {
        Date sysdate = new Date();
        SimpleDateFormat df = new SimpleDateFormat( "EEE\', \'dd\' \'MMM\' \'yyyy\' \'HH:mm:ss\' \'z", Locale.US);
        df.setTimeZone(TimeZone.getTimeZone( "GMT"));
        String date = df.format(sysdate);
        String string_to_sign = request.getMethod().toUpperCase() +  " " + request.getURI().getPath() +  "\n" + date;
        String sig = secret;
        String encoding =  "";
 
        try {
                byte[] authorization = getSignature(string_to_sign.getBytes(), sig.getBytes());
                encoding = new String(Base64.encodeBase64(authorization));
        catch (Exception var10) {
                return;
        }
 
        String authorization1 =  "MWS " + partnerId +  ":" + encoding;
        request.addHeader( "Authorization", authorization1);
        request.addHeader( "Date", date);
    }
  
    public static byte[] getSignature(byte[] data, byte[] key) throws InvalidKeyException, NoSuchAlgorithmException {
        SecretKeySpec signingKey = new SecretKeySpec(key,  "HmacSHA1");
        Mac mac = Mac.getInstance( "HmacSHA1");
        mac.init(signingKey);
        byte[] rawHmac = mac.doFinal(data);
        return rawHmac;
    }
}

C#版本

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Security.Cryptography;
using System.IO;
  
public static void generateAuthAndDateHeader(HttpWebRequest request, string partnerId, string secret)
{
    DateTime nowDate = DateTime.UtcNow;
    string date = nowDate.GetDateTimeFormats( 'r')[0].ToString();//Sat, 05 Nov 2005 14:06:25 GMT
    string string_to_sign = request.Method.ToUpper() +  " " + request.RequestUri.AbsolutePath +  "\n" + date;
    string sig = secret;
    string encoding =  "";
    byte[] authorization = getSignature(Encoding.UTF8.GetBytes(string_to_sign), Encoding.UTF8.GetBytes(sig));
    encoding = Convert.ToBase64String(authorization);
    String authorization1 =  "MWS " + partnerId +  ":" + encoding;
    request.Headers.Add( "Authorization", authorization1);
    request.Date = nowDate;
}
  
public static byte[] getSignature(byte[] data, byte[] key)
{
    HMACSHA1 hmac = new HMACSHA1(key);
    CryptoStream cs = new CryptoStream(Stream.Null, hmac, CryptoStreamMode.Write);
    cs.Write(data, 0, data.Length);
    cs.Close();
    return hmac.Hash;
    //HMACSHA1 myHMACSHA1 = new HMACSHA1(key);
    //byte[] rawHmac = myHMACSHA1.ComputeHash(data);
    //return rawHmac;
}


php版本

<?php 
  
class AuthorizationUtils {
    public  static $partnerId = '';
    public  static $clientSecret = '';
  
    private function buildSign($method,$uri,$date) {
        $string_to_sign = $method . ' ' . $uri . "\n" . $date; 
        $signature = base64_encode(hash_hmac('sha1', $string_to_sign, self::$clientSecret, true)); 
        return'MWS ' . self::$partnerId . ':' . $signature;;
    }
    private function  validSign( {
        if($_SERVER['HTTP_AUTHORIZATION'] == $this->buildSign( $_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI'], $_SERVER['HTTP_DATE'])){
          return
 true ;
        }else{
          return false;
         }
    }
}


返回
顶部