• amazon 签名类


    此类用于调用WMS APi时请求参数生成签名

    <?php
    
    
    namespace amazon;
    
    
    class Signature
    {
        /**
         * The signed string.
         *
         * @var string
         */
        protected $signedString;
    
        /**
         * Create a new signature instance.
         *
         * @param  string  $url
         * @param  array   $data
         * @param  string  $secretAccessKey
         */
        public function __construct($url, array $parameters, $secretAccessKey)
        {
            $stringToSign = $this->calculateStringToSign($url, $parameters);
    
            $this->signedString = $this->sign($stringToSign, $secretAccessKey);
        }
    
        /**
         * Calculate the string to sign.
         *
         * @param  string  $url
         * @param  array   $parameters
         * @return string
         */
        protected function calculateStringToSign($url, array $parameters)
        {
            $url = parse_url($url);
    
            $string = "POST
    ";
            $string .= $url['host']."
    ";
            $string .= $url['path']."
    ";
            $string .= $this->getParametersAsString($parameters);
    
            return $string;
        }
    
        /**
         * Computes RFC 2104-compliant HMAC signature.
         *
         * @param  string  $data
         * @param  string  $secretAccessKey
         * @return string
         */
        protected function sign($data, $secretAccessKey)
        {
            return base64_encode(hash_hmac('sha256', $data, $secretAccessKey, true));
        }
    
        /**
         * Convert paremeters to URL-encoded query string.
         *
         * @param  array  $parameters
         * @return string
         */
        protected function getParametersAsString(array $parameters)
        {
            uksort($parameters, 'strcmp');
    
            $queryParameters = [];
    
            foreach ($parameters as $key => $value) {
                $key = rawurlencode($key);
                $value = rawurlencode($value);
    
                $queryParameters[] = sprintf('%s=%s', $key, $value);
            }
    
            return implode('&', $queryParameters);
        }
    
        /**
         * The string representation of this signature.
         *
         * @return string
         */
        public function __toString()
        {
            return $this->signedString;
        }
    
    }
    你优秀了,自然有对的人与你并肩,错的人迟早走散,而相爱的终将再相逢。
  • 相关阅读:
    CSS3中的Transition属性详解
    jq 全选/取消效果
    多维数组问题 int (*a)[] int []
    C语言输入多组问题~ungetc回退字符到stdin
    2015-12-14重启博客之旅
    转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解
    lsof 一切皆文件
    转载自~浮云比翼: 不忘初衷,照顾好自己。
    转载自~浮云比翼:Step by Step:Linux C多线程编程入门(基本API及多线程的同步与互斥)
    梳理回顾
  • 原文地址:https://www.cnblogs.com/szrhsd/p/14068992.html
Copyright © 2020-2023  润新知