<?xml version="1.0" encoding="UTF-8"?>
<!--
    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.
-->
<section xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    version="5.0" xmlns:xl="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude"
    xsi:schemaLocation="http://docbook.org/ns/docbook ../../../content/dtd/docbook.xsd"
    xmlns="http://docbook.org/ns/docbook">
    <title>Edit Ebay Configurations screen.</title>
    <para>
This screen allows the user to create a new/edit Ebay Configuration for intregrate ofbiz and Ebay. Ebay Configuration use for put keys and certificate get from ebay develop site after you register.        
    </para>
    <section>
        <title>How to edit Ebay configurations?</title>
        <orderedlist>
            <listitem><para>
                Please Select 'product store' you want to create configuration.
                Example product store is 'OFBiz E-Commerce Store [9000]')
            </para></listitem>
            <listitem><para>Enter  'Dev Id' (ex:f3586481-93c7-4aaf-ab87-d383d56b71b1)</para></listitem>
        <listitem><para>Enter  'App Id' (ex:antwebc0f-9bf9-4829-998b-e5e8fb773ac)</para></listitem>
        <listitem><para>Enter  'Cert Id' (ex:7f363bc0-11d6-489a-a54d-4a44de82f790)</para></listitem>
        <listitem><para>Enter  'Token' (# token key generated from ebay account ex:AgAAAA**AQAAAA**aAAAAA**Ccn7Sg.....)</para></listitem>
        <listitem><para>Enter  'Compatibility Level' (ex:635)</para></listitem>
        <listitem><para>Enter  'Site Id' (ex:0=US ,15=AU)</para></listitem>
        <listitem><para>Enter  'Xml Gateway Uri' (# sandbox
-eBayExport.xmlGatewayUri=https://api.sandbox.ebay.com/ws/api.dll
 # production
-eBayExport.xmlGatewayUri=https://api.ebay.com/ws/api.dll)</para></listitem>
        <listitem><para>Enter  'Custom XML' </para></listitem>
        <listitem><para>Enter  'Web Site' (ebay)</para></listitem>
 
            <listitem><para>Press the 'Update' button to create  configurations.</para></listitem>
        </orderedlist>
    </section>
</section>
