#####################################################################
# 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.
#####################################################################

################################################################################################
# Google Checkout can be done using following methods: 
# 1) HTML API.
# 2) XML API.
# 
# At this stage only XML API method is supported in OFBiz. 
# For this Server to Server communication method is used from XML API to send data in XML format.
#  XML API is also preferred way when you want to send your cart and supporting information in digitally signed form.  
################################################################################################


####Required Parameters:####
##your merchantId - sandbox will be different than live
merchantId = 634321449957567
#your merchantKey - sandbox will be different than live
merchantKey = DAnyTJLnPzhhK_CuCaQOCg
## URL to edit cart
editCartUrl = http://localhost:8080/ecommerce/control/view/showcart
## continue shopping url after payment
continueShoppingUrl = http://localhost:8080/ecommerce/control/returnBackFromGoogle

####Integration Parameters####
##location of template
xmlTemplateUri = component://googlecheckout/widget/GoogleCheckoutScreens.xml#CheckoutShoppingCart
##Does customer need to enter a phone number in order to complete order? true/false
requestPhone = false

####Google Specific Parameters####
##Production URL
#basePostUrl = https://checkout.google.com/api/checkout/v2/merchantCheckout/Merchant/
#orderProcessingUrl = https://checkout.google.com/api/checkout/v2/request/Merchant/ 

##Sandbox URL
basePostUrl = https://sandbox.google.com/checkout/api/checkout/v2/merchantCheckout/Merchant/
orderProcessingUrl = https://sandbox.google.com/checkout/api/checkout/v2/request/Merchant/

checkout = /checkout
request = /request
diagnose = /diagnose
