config_loader = new Config_Loader(); } /** * Returns the item lookup URL for asins * * @param string $asin Asin value. * @param string $marketplaces Marketplace to search the products. * @param string $tracking_id Associate tag. * * @return string Signed URL for item lookup. */ function get_item_lookup_url( $asin_array, $marketplace, $tracking_id ) { $marketplace_endpoint = $this->get_marketplace_endpoint( $marketplace ); $asin = implode( ",", $asin_array ); $params = array( "Operation" => "ItemLookup", "ItemId" => "$asin", "IdType" => "ASIN", "ResponseGroup" => "Images,ItemAttributes,OfferFull", "AssociateTag" => "$tracking_id", ); $url = $this->aws_signed_url( $params, $marketplace_endpoint ); return $url; } /** * Returns signed URL for Paapi request * * @since 1.0.0 * * @param array $params Paapi parameters. * @param string $marketplace Marketplace to search the product. * * @return string Signed URL. */ function aws_signed_url( $params, $marketplace ) { $access_key_id = openssl_decrypt( base64_decode( get_option( Db_Constants::AWS_ACCESS_KEY ) ), Plugin_Constants::ENCRYPTION_ALGORITHM, Plugin_Constants::ENCRYPTION_KEY, 0, Plugin_Constants::ENCRYPTION_IV ); $secret_key = openssl_decrypt( base64_decode( get_option( Db_Constants::AWS_SECRET_KEY ) ), Plugin_Constants::ENCRYPTION_ALGORITHM, Plugin_Constants::ENCRYPTION_KEY, 0, Plugin_Constants::ENCRYPTION_IV ); $host = $marketplace; $method = 'GET'; $uri = Paapi_Constants::URI; $params["Service"] = Paapi_Constants::SERVICE; $params["AWSAccessKeyId"] = $access_key_id; $params["Timestamp"] = gmdate( 'Y-m-d\TH:i:s\Z' ); $params["Version"] = Paapi_Constants::VERSION; ksort( $params ); $canonicalized_query = array(); foreach ( $params as $param => $value ) { $param = str_replace( "%7E", "~", rawurlencode( $param ) ); $value = str_replace( "%7E", "~", rawurlencode( $value ) ); $canonicalized_query[] = $param . "=" . $value; } $canonicalized_query = implode( "&", $canonicalized_query ); $string_to_sign = $method . "\n" . $host . "\n" . $uri . "\n" . $canonicalized_query; $signature = base64_encode( hash_hmac( "sha256", $string_to_sign, $secret_key, true ) ); $signature = str_replace( "%7E", "~", rawurlencode( $signature ) ); $signed_url = Paapi_Constants::TRANSFER_PROTOCOL . $host . $uri . Paapi_Constants::URL_QUERY_SEPARATOR . $canonicalized_query . "&Signature=" . $signature; return $signed_url; } /** * Returns the item search URL for search keywords * * @param string $search_keywords Search keywords of the products. * @param string $marketplaces Marketplace to search the products. * @param string $tracking_id Associate tag. * * @return string Signed URL for item search. */ function get_item_search_url( $search_keywords, $marketplace, $tracking_id ) { $marketplace_endpoint = $this->get_marketplace_endpoint( $marketplace ); $params = array( "Operation" => "ItemSearch", "SearchIndex" => "All", "Keywords" => "$search_keywords", "ResponseGroup" => "Images,ItemAttributes,Offers", "AssociateTag" => "$tracking_id", ); $url = $this->aws_signed_url( $params, $marketplace_endpoint ); return $url; } /** * PA-API error messages to display in case of request errors * * @param string $error code Error code of the request. * * @return string PA-API error message. */ function get_error_message( $error ) { switch ( $error ) { case HTTP_Constants::BAD_REQUEST: /* translators: 1: URL of Associate sign-up page 2: _blank 3:URL of adding secondary user page 4: _blank */ return '