#####################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#####################################################################

# These are static configuration variable which could easily be hard coded.
# However, in case they ever do change they should be easy to modify so 
# they are configured here.

# Production server URL
production.root.url = https://checkout.google.com/api/checkout/v2

# Sandbox server URL
sandbox.root.url = https://sandbox.google.com/checkout/api/checkout/v2

# Request Commands
merchant.checkout.command = merchantCheckout
checkout.command = checkout
request.command = request
diagnose.command = diagnose

