Page 1 of 1

PayPal orders - Abandoned without submitting payment

Posted: Sun Nov 01, 2009 10:35 pm
by draneb
I have paypal express checkout disabled so the customer can enter their separate billing and shipping addresses, if needed. But I notice I have been getting like 2 out of 3 PayPal orders showing $0.00 payments. (they did not complete the paypal checkout process)

I went through the checkout process myself and selected PayPal and I can see why I am getting so many PayPal orders with customers not completing the checkout process. I was shocked to see that I had to scroll to the bottom of the page to see the small PayPal button needed to be clicked on in order to finalize the order. I really think that should be moved up to the top so they know there is another step in the process.

When I email the customers they say they thought they were done. They actually think they did complete the checkout process because of all the information they have provided. We have to make this thing as idiot proof as possible. I had to make an email template for unpaid PayPal orders as this has been happening for quite some time now but I think we should try and nip it in the bumm before the Christmas shopping season.

If the payment section was moved to the top so it's the first thing they see then that's about all that can be asked... What are your thoughts on this?

Re: PayPal orders - Abandoned without submitting payment

Posted: Mon Nov 02, 2009 5:29 am
by Mike718NY
Some people are going to think that the order has been submitted to paypal
when they click the first "Click here to pay with PayPal" button.
I thought this was confusing from day one.
So here is what I did:
For the first "Pay with Paypal" button, replace it with a "Continue" button
and put this above it:
"NOTE: You must click the Pay Now with PayPal button on the next page to continue to PayPal and pay the order balance."

Re: PayPal orders - Abandoned without submitting payment

Posted: Mon Nov 02, 2009 7:17 am
by draneb
Ahhhh, nice... Thanks Mike!

Re: PayPal orders - Abandoned without submitting payment

Posted: Mon Nov 02, 2009 12:59 pm
by DBounlom
I have this problem as well. Could you explain how to replace the buttons for idiots like myself with little to no programming knowledge? Thanks!

Re: PayPal orders - Abandoned without submitting payment

Posted: Wed Nov 04, 2009 11:06 am
by Mike718NY
In the file "Checkout\PaymentForms\PayPalPaymentForm.ascx",
I did this (The code is at the very bottom of the page):

Code: Select all

                ....................   
                warningMessages.Insert(0, "The order could not be completed because the basket contents changed during checkout.  Please review your basket contents and try again.");
            }
        }
    }
</script>

// MY CODE START HERE:

<table class="paymentForm">
<tr>
<th class="caption"><asp:Label ID="Caption" runat="server" Text="Pay with {0}"></asp:Label></th></tr>
<tr>
<td class="pFcontent">
<p align="justify"><asp:Label ID="PayPalHelpText" runat="server" 
Text="NOTE: You must click the <b>Pay Now with PayPal</b> button on the next page to continue to PayPal and pay the order balance."></asp:Label></p></td></tr>

<tr>
<td class="submit">
<asp:ValidationSummary ID="ValidationSummary1" runat="server" ValidationGroup="PayPal" Visible="false" />
<asp:ImageButton ID="PayPalButton" runat="server" ImageUrl="~/App_Themes/Glass_Aqua/images/continue.gif" OnClick="PayPalButton_Click" ValidationGroup="PayPal" />
</td></tr></table>
You need to move the continue.gif image into the correct theme you are using:

ImageUrl="~/App_Themes/Glass_Aqua/images/continue.gif"

Re: PayPal orders - Abandoned without submitting payment

Posted: Wed Nov 04, 2009 2:40 pm
by Mike718NY
one more thing I forgot, you have to comment out the image path in the Page_Load:

protected void Page_Load(object sender, EventArgs e)
{
.........
// PayPalButton.ImageUrl = Request.Url.Scheme + "://www.paypal.com/en_US/i/btn/x-click-but1.gif";

I wish this first button went right to PayPal instead of going to the Reciept page, then PayPal.
This is just an extra step and gives the shopper one more chance to cancel the order.
I'd rather have them not go to the Receipt page and right to PayPal.
I'll see if I can figure out how to do that.
Maybe the shopper can be returned to Receipt page after they have been to PayPal.
I've seen some sites do this.

Re: PayPal orders - Abandoned without submitting payment

Posted: Wed Nov 04, 2009 4:21 pm
by DBounlom
Thank you Mike for the two posts. They were extremely helpful, and I got it to work. However, in the code you wrote, I had to include this line in order to get the page to load.
<asp:HiddenField runat="server" ID="FormIsSubmitted" value="0" />
The final code looks like this.
<table class="paymentForm">
<tr>
<th class="caption">
<asp:Label ID="Caption" runat="server" Text="Pay with {0}"></asp:Label>
</th>
</tr>
<tr>
<td class="pFcontent">
<p align="justify"><asp:Label ID="PayPalHelpText" runat="server" Text="NOTE: You must click the

<b>PayPal</b> button on the <b>next page</b> to continue to PayPal and pay the order

balance."></asp:Label></p>
</td>
</tr>
<tr>
<td class="submit">
<asp:ValidationSummary ID="ValidationSummary1" runat="server" ValidationGroup="PayPal"

Visible="false" />
<asp:ImageButton ID="PayPalButton" runat="server"

ImageUrl="~/App_Themes/Glass_Midnight/images/continue.gif" OnClick="PayPalButton_Click"

ValidationGroup="PayPal"/>
<asp:HiddenField runat="server" ID="FormIsSubmitted" value="0" />
</td>
</tr>
</table>
Maybe perhaps you are using a different AC version than I am? I am running AbleCommerce 7.0.3 build 12458. Also, there was already a continue.gif image in my theme folder that I was using. Regardless, thank you very much for your detailed notes. I appreciate it tremendously.

I also do agree with Mike, and I wish the shopper could skip the first receipt page. If anyone ever figures out how to do that while allowing the shopper to return to the receipt page after payment at PayPal, please post instructions on how to do so. Thanks!!

Re: PayPal orders - Abandoned without submitting payment

Posted: Thu Nov 05, 2009 10:56 am
by Mike718NY
Yes, you are right, keep that Hidden field.
I was looking at a previous AC version.

Re: PayPal orders - Abandoned without submitting payment

Posted: Sat Nov 21, 2009 4:19 pm
by draneb
Today I got two more unprocessed PayPal orders so I decided it was time to work on this change. These changes took care of the PayPalPaymentForm page but I think we really need to work on the Order Receipt page (Checkout/Receipt.aspx) and move the entire PAYMENT INFORMATION section from the very bottom of the page to the top of the page - right above the SHIPMENT INFORMATION section.

I believe the [PayPal - Click Here to Pay] button should be visible on that page without scrolling. Don't you?

I definitely want to get this done before the holiday shopping season (if I am fortunate to have one this year)
I'm going to go look at the code. Hopefully it is just a matter of switching code around...

Re: PayPal orders - Abandoned without submitting payment

Posted: Sat Nov 21, 2009 4:42 pm
by draneb
Okay, luckily I think it was just a matter of moving some code around. I moved the Payment Information area up so that it is above the Shipping Information panel and is viewable without scrolling. I think it looks better. It doesn't appear I can add attachments so If anyone is interested just let me know. Thanks.

Re: PayPal orders - Abandoned without submitting payment

Posted: Mon Nov 23, 2009 10:34 am
by DBounlom
Please do so Draneb. It would be much appreciated.

Re: PayPal orders - Abandoned without submitting payment

Posted: Mon Nov 23, 2009 10:45 am
by draneb
Okay, well I will just paste the code here. I hope I did things right. I am a novice but just moved the Payment Information section to the top of the page. So far I have had no more abandoned PayPal checkouts.

Code: Select all

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ReceiptPage.ascx.cs" Inherits="ConLib_ReceiptPage" %>
<%--
<conlib>
<summary>Display page to show details of an order like order items, shipping address, billing address etc.</summary>
<param name="AllowAddNote" default="true">If true, the customer can add notes to the order.  If false, the customer can only see notes added by the merchant.</param>
<param name="HandleFailedPayments" default="false">If true, the customer is redirected to an order payment page if the payment fails at checkout.</param>
</conlib>
--%>
<%@ Register Src="~/ConLib/OrderTotalSummary.ascx" TagName="OrderTotalSummary" TagPrefix="uc" %>
<%@ Register Src="~/ConLib/BreadCrumbs.ascx" TagName="BreadCrumbs" TagPrefix="uc" %>
<%@ Register Src="~/ConLib/Utility/OrderItemDetail.ascx" TagName="OrderItemDetail" TagPrefix="uc" %>
<%@ Register Src="~/ConLib/Utility/PayPalPayNowButton.ascx" TagName="PayPalPayNowButton" TagPrefix="uc" %>
<%-- this file is identical to ~/ConLib/MyOrderPage.ascx, with the addition of the affiliate tracker tag --%>
<%@ Register Src="~/Checkout/AffiliateTracker.ascx" TagName="AffiliateTracker" TagPrefix="uc" %>
<asp:PlaceHolder ID="BalanceDuePanel" runat="server" Visible="false" EnableViewState="false">
    <br />
    <asp:Label ID="BalanceDueMessage" runat="server" Text="** Your order has a balance of {0:lc} due.&nbsp&nbsp;<a href='{1}'><u>Pay Now</u></a>" SkinID="ErrorCondition"></asp:Label>
    <br /><br />
</asp:PlaceHolder>
<asp:PlaceHolder ID="OrderInvalidPanel" runat="server" Visible="false" EnableViewState="false">
    <br />
	<asp:Label ID="OrderInvalidMessage" runat="server" Text="** Your order has been cancelled or invalidated." SkinID="ErrorCondition"></asp:Label>
    <br /><br />
</asp:PlaceHolder>
<asp:Panel ID="PageHeaderPanel" runat="server" CssClass="pageHeader">
    <h1><asp:Localize ID="Caption" runat="server" Text="View Order #{0}"></asp:Localize></h1>
</asp:Panel>
<asp:Panel ID="OrderSummaryPanel" runat="server" SkinID="OrderSummaryPanel">
    <table class="orderSummaryTable">
        <tr>
            <th class="rowHeader">
                <asp:Label ID="OrderDateLabel" runat="server" Text="Order Date: "></asp:Label>
            </th>
            <td>
                <asp:Label ID="OrderDate" runat="server" Text=""></asp:Label>
            </td>
            <th class="rowHeader">
                <asp:Label ID="TotalChargesLabel" runat="server" Text="Order Total: "></asp:Label>
            </th>
            <td>
                <asp:Label ID="TotalCharges" runat="server" Text=""></asp:Label>
            </td>
            <th class="rowHeader">
                <asp:Label ID="BalanceLabel" runat="server" Text="Balance: "></asp:Label>
            </th>
            <td>
                <asp:Label ID="Balance" runat="server" Text=""></asp:Label>
            </td>
        </tr>
        <tr>
            <th class="rowHeader">
                <asp:Label ID="OrderStatusLabel" runat="server" Text="Status: "></asp:Label>
            </th>
            <td>
                <asp:Label ID="OrderStatus" runat="server" Text=""></asp:Label>
            </td>
            <th class="rowHeader">
                <asp:Label ID="TotalPaymentsLabel" runat="server" Text="Payments: "></asp:Label>
            </th>
            <td>
                <asp:Label ID="TotalPayments" runat="server" Text=""></asp:Label>
            </td>
            <th class="rowHeader">
                <asp:Label ID="UnprocessedPaymentsLabel" runat="server" Text="Unprocessed Payments: "></asp:Label>
            </th>
            <td>
                <asp:Label ID="UnprocessedPayments" runat="server" Text=""></asp:Label>				
            </td>
        </tr >
		<tr>
			<td colspan="6" align="right">
                <asp:HyperLink ID="PrintOrder" runat="server" Text="Printable Version" NavigateUrl="~/Members/PrintMyOrder.aspx"></asp:HyperLink>
            </td>
		</tr>
    </table>
</asp:Panel>
<asp:Panel ID="PaymentPanel" runat="server">
<table align="center" class="form" cellpadding="0" cellspacing="0" border="1">
    <tr>
        <th colspan="2">
            <asp:Localize ID="PaymentMethodCaption" runat="server" Text="PAYMENT INFORMATION"></asp:Localize>
        </th>
    </tr>
    <tr>
        <td class="orderSummary" valign="top">
            <uc:OrderTotalSummary ID="OrderTotalSummary1" runat="server" />
        </td>
        <td valign="top" class="expand">
            <asp:Label ID="BillingAddressCaption" runat="server" Text="Billing Address:" SkinID="FieldHeader"></asp:Label><br />
            <asp:Literal ID="BillToAddress" runat="server"></asp:Literal><br /><br />
            <asp:Repeater ID="PaymentRepeater" runat="server">
                <ItemTemplate>
                    <asp:Label ID="PaymentMethodLabel" runat="server" Text="Payment Method: " SkinID="FieldHeader"></asp:Label>
                    <asp:Label ID="PaymentMethodName" runat="server" Text='<%#Eval("PaymentMethodName")%>'></asp:Label> 
                    <asp:Label ID="ReferenceNumber" runat="server" Text='<%#Eval("ReferenceNumber")%>'></asp:Label><br />
                    <asp:Label ID="PaymentStatusLabel" runat="server" Text="Status: " SkinID="FieldHeader"></asp:Label>
                    <asp:Label ID="PaymentStatus" runat="server" Text='<%#StoreDataHelper.GetFriendlyPaymentStatus((Payment)Container.DataItem)%>'></asp:Label>
                    <asp:Panel ID="ExtendedDetailsPanel" runat="server" Visible='<%#ShowExtendedPaymentDetails(Container.DataItem) %>'>
                        <asp:Label ID="PaymentDateLabel" runat="server" Text="Date: " SkinID="FieldHeader"></asp:Label>
                        <asp:Label ID="PaymentDate" runat="server" Text='<%#Eval("PaymentDate", "{0:g}")%>'></asp:Label><br />
                        <asp:Label ID="AmountLabel" runat="server" Text="Amount: " SkinID="FieldHeader"></asp:Label>
                        <asp:Label ID="Amount" runat="server" Text='<%#Eval("Amount", "{0:ulc}")%>'></asp:Label><br />
                    </asp:Panel>
                    <asp:Panel ID="MailPayMethodMessage" runat="server" Visible='<%# ShowMailPaymentMessage(Container.DataItem) %>'>
                        <asp:Label ID="MessageLabel" runat="server" Text="Make your check payable to:" SkinID="FieldHeader"></asp:Label><br />
                        <asp:Label ID="StoreNameLabel" runat="server" Text='<%# Token.Instance.Store.Name%>'></asp:Label><br />
                        <asp:Label ID="StoreAddress" runat="server" Text='<%# Token.Instance.Store.DefaultWarehouse.FormatAddress(true)%>'></asp:Label>
                    </asp:Panel>
                    <uc:PayPalPayNowButton ID="PayPalPayNowButton" runat="server" PaymentId='<%#Eval("PaymentId")%>'></uc:PayPalPayNowButton><br />
                </ItemTemplate>
            </asp:Repeater>
        </td>
    </tr>
</table>
</asp:Panel>
<asp:Repeater ID="ShipmentRepeater" runat="server">
    <ItemTemplate>
        <table align="center" class="form" cellpadding="0" cellspacing="0" border="1">
            <tr>
                <th colspan="3">
                    <asp:Localize ID="ShipmentCaption" runat="server" Text="SHIPMENT INFORMATION" Visible='<%# (this.Order.Shipments.Count == 1) %>'></asp:Localize>
                    <asp:Localize ID="ShipmentCaption2" runat="server" Text='<%# string.Format("SHIPMENT {0} OF {1}", ((OrderShipment)Container.DataItem).ShipmentNumber, this.Order.Shipments.Count) %>' Visible='<%# (this.Order.Shipments.Count > 1) %>'></asp:Localize>
                </th>
            </tr>
            <tr>
                <th class="verticalText">
                    S<br />
                    H<br />
                    I<br />
                    P<br /><br />
                    T<br />
                    O<br />
                </th>
                <td class="address">
                    <%# GetShipToAddress(Container.DataItem) %>
                </td>
                <td valign="top" class="expand">
                    <asp:Label ID="ShipStatusLabel" runat="server" Text="Status:" SkinID="FieldHeader"></asp:Label>
                    <asp:Label ID="ShipStatus" runat="server" Text='<%#GetShipStatus(Container.DataItem)%>'></asp:Label><br />
                    <asp:Label ID="ShippingMethodLabel" runat="server" Text="Shipping Method:" SkinID="FieldHeader"></asp:Label>
                    <asp:Label ID="ShippingMethod" runat="server" Text='<%#Eval("ShipMethodName") %>'></asp:Label>
                    <asp:Panel ID="TrackingNumberPanel" runat="Server" Visible='<%#HasTrackingNumbers(Container.DataItem)%>'>
                        <br />         
                        <asp:Label ID="TrackingNumbersLabel" runat="server" Text="Tracking :" SkinID="FieldHeader"></asp:Label>
                        <asp:Repeater ID="TrackingRepeater" runat="server" DataSource='<%#Eval("TrackingNumbers")%>'>
                            <ItemTemplate>
                                <asp:HyperLink ID="TrackingNumberData"  Target="_blank" runat="server" Text='<%#Eval("TrackingNumberData")%>' NavigateUrl='<%#GetTrackingUrl(Container.DataItem)%>'></asp:HyperLink>
                            </ItemTemplate>
                            <SeparatorTemplate>, </SeparatorTemplate>
                        </asp:Repeater>                         
                    </asp:Panel>
                    <asp:Panel ID="ShipMessagePanel" runat="Server" Visible='<%# !string.IsNullOrEmpty((string)Eval("ShipMessage")) %>'>
                        <br /><br />
                        <asp:Label ID="ShipMessageLabel" runat="server" Text="Delivery Instructions:" SkinID="FieldHeader"></asp:Label>
                        <asp:Label ID="ShipMessage" runat="server" Text='<%#Eval("ShipMessage")%>'></asp:Label>
                    </asp:Panel>
                </td>
            </tr>
            <tr>
                <td colspan="3" class="dataSheet">
                    <asp:GridView ID="ShipmentItemsGrid" runat="server" Width="100%" AutoGenerateColumns="false" DataSource='<%# OrderHelper.GetShipmentItems(Container.DataItem) %>' GridLines="none" SkinID="ItemList" OnDataBinding="ItemsGrid_DataBinding">
                        <Columns>
                            <asp:TemplateField HeaderText="Qty">
                                <HeaderStyle Width="50" HorizontalAlign="Center" />
                                <ItemStyle HorizontalAlign="center" />
                                <ItemTemplate>
                                    <asp:Label ID="Quantity" runat="server" Text='<%#Eval("Quantity")%>'></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="SKU">
                                <HeaderStyle Width="80" HorizontalAlign="Center" />
                                <ItemStyle HorizontalAlign="center" />
                                <ItemTemplate>
                                    <asp:Label ID="SKU" runat="server" Text='<%#ProductHelper.GetSKU(Container.DataItem)%>'></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Item">
                                <ItemTemplate>
                                    <uc:OrderItemDetail ID="OrderItemDetail1" runat="server" OrderItem='<%#(OrderItem)Container.DataItem%>' ShowAssets="False" LinkProducts="False" />
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Tax">
                                <HeaderStyle HorizontalAlign="Center" />
                                <ItemStyle HorizontalAlign="Center" Width="40px" />
                                <ItemTemplate>
                                    <%#TaxHelper.GetTaxRate(Order, (OrderItem)Container.DataItem).ToString("0.#")%>%
                                </ItemTemplate>
                            </asp:TemplateField>
                            <asp:TemplateField HeaderText="Price">
                                <HeaderStyle Width="80" HorizontalAlign="Right" />
                                <ItemStyle HorizontalAlign="Right" />
                                <ItemTemplate>
                                    <asp:Label ID="Price" runat="server" Text='<%#TaxHelper.GetInvoiceExtendedPrice(Order, (OrderItem)Container.DataItem).ToString("ulc")%>'></asp:Label>
                                </ItemTemplate>
                            </asp:TemplateField>
                        </Columns>
                    </asp:GridView>
                </td>
            </tr>
        </table>
    </ItemTemplate>
</asp:Repeater>
<asp:Panel ID="NonShippingItemsPanel" runat="server">
    <table align="center" class="form" cellpadding="0" cellspacing="0" border="1">
        <tr>
            <th colspan="3">
                <asp:Localize ID="NonShippingItemsCaption" runat="server" Text="NON SHIPPING ITEMS"></asp:Localize>
            </th>
        </tr>
        <tr>
            <td colspan="3" class="dataSheet">
                <asp:GridView ID="NonShippingItemsGrid" runat="server" Width="100%" AutoGenerateColumns="false" GridLines="none" SkinID="PagedList" OnDataBinding="ItemsGrid_DataBinding">
                    <Columns>
                        <asp:TemplateField HeaderText="Qty">
                            <HeaderStyle Width="50" HorizontalAlign="Center" />
                            <ItemStyle HorizontalAlign="center" />
                            <ItemTemplate>
                                <asp:Label ID="Quantity" runat="server" Text='<%#Eval("Quantity")%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="SKU">
                            <HeaderStyle Width="80" HorizontalAlign="Center" />
                            <ItemStyle HorizontalAlign="center" />
                            <ItemTemplate>
                                <asp:Label ID="SKU" runat="server" Text='<%#ProductHelper.GetSKU(Container.DataItem)%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Item">
                            <ItemTemplate>
                                <uc:OrderItemDetail ID="OrderItemDetail1" runat="server" OrderItem='<%#(OrderItem)Container.DataItem%>' ShowAssets="False" LinkProducts="False" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Tax">
                            <HeaderStyle HorizontalAlign="Center" />
                            <ItemStyle HorizontalAlign="Center" Width="40px" />
                            <ItemTemplate>
                                <%#TaxHelper.GetTaxRate(Order, (OrderItem)Container.DataItem).ToString("0.#")%>%
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Price">
                            <HeaderStyle Width="80" HorizontalAlign="Right" />
                            <ItemStyle HorizontalAlign="Right" />
                            <ItemTemplate>
                                <asp:Label ID="Price" runat="server" Text='<%#TaxHelper.GetInvoiceExtendedPrice(Order, (OrderItem)Container.DataItem).ToString("ulc")%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </td>
        </tr>
    </table>
</asp:Panel>
<asp:PlaceHolder ID="DigitalGoodsPanel" runat="server">
    <table align="center" class="form" cellpadding="0" cellspacing="0" border="1">
        <tr>
            <th colspan="3">
                <asp:Localize ID="DigitalGoodsCaption" runat="server" Text="DIGITAL GOODS"></asp:Localize>
            </th>
        </tr>
        <tr>
            <td colspan="3" class="dataSheet">
                <asp:GridView ID="DigitalGoodsGrid" runat="server" AutoGenerateColumns="false" 
                    GridLines="none" OnRowDataBound="DigitalGoodsGrid_RowDataBound" Width="100%"
                    SkinID="PagedList">
                    <Columns>
                        <asp:TemplateField HeaderText="Name">
                            <HeaderStyle HorizontalAlign="Left" />
                            <ItemStyle HorizontalAlign="Left" Width="200px" />
                            <ItemTemplate>
                                <%#Eval("Name")%>
                                <asp:PlaceHolder ID="phAssets" runat="server"></asp:PlaceHolder>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Download">
                            <ItemStyle HorizontalAlign="Center" Width="80px" />
                            <HeaderStyle HorizontalAlign="Center" />
                            <ItemTemplate>
                                <asp:PlaceHolder ID="phDownloadIcon" runat="server" Visible='<%# (((DownloadStatus)Eval("DownloadStatus")) == DownloadStatus.Valid && DGFileExists(Eval("DigitalGood")))%>'>
                                    <a href="<%#GetDownloadUrl(Container.DataItem)%>"><asp:Image ID="DI" runat="server" SkinID="DownloadIcon" AlternateText="Download" /></a>
                                </asp:PlaceHolder>
                                <asp:Literal ID="DownloadStatus" runat="server" Text='<%# Eval("DownloadStatus") %>' Visible='<%# ((DownloadStatus)Eval("DownloadStatus")) != DownloadStatus.Valid %>'></asp:Literal>
                                <asp:Literal ID="MissingDownloadText" runat="server" Text="unavailable" EnableViewState="false" Visible='<%#( !DGFileExists(Eval("DigitalGood")) && ((DownloadStatus)Eval("DownloadStatus")) == DownloadStatus.Valid)%>'/>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Remaining">
                            <HeaderStyle HorizontalAlign="Center" />
                            <ItemStyle HorizontalAlign="Center" Width="80px" />
                            <ItemTemplate>
                                <%#GetMaxDownloads(Container.DataItem)%>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="">
                            <HeaderStyle HorizontalAlign="Left" />
                            <ItemStyle HorizontalAlign="Left" />
                            <ItemTemplate>
                                <asp:Label ID="SerialKeyLabel" runat="server" Text="Serial Key: " SkinID="FieldHeader" Visible='<%#!string.IsNullOrEmpty(Eval("SerialKeyData").ToString())%>'></asp:Label>
                                <asp:Literal ID="SerialKey" runat="server" Visible='<%#ShowSerialKey(Container.DataItem)%>' Text='<%#Eval("SerialKeyData")%>' />
                                <asp:LinkButton runat="server" ID="SerialKeyLink" Text="view" OnClientClick="<%#GetPopUpScript(Container.DataItem)%>" Visible='<%#ShowSerialKeyLink(Container.DataItem)%>'></asp:LinkButton>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </td>
        </tr>           
    </table>
</asp:PlaceHolder>
<asp:Panel ID="GiftCertificatesPanel" runat="server">
    <table align="center" class="form" cellpadding="0" cellspacing="0" border="1">
        <tr>
            <th colspan="3">
                <asp:Localize ID="Localize1" runat="server" Text="GIFT CERTIFICATES"></asp:Localize>
            </th>
        </tr>
         <tr>
            <td colspan="3" class="dataSheet">
                <asp:GridView ID="GiftCertificatesGrid" runat="server" Width="100%" AutoGenerateColumns="False" GridLines="none" SkinID="ItemList">
                    <Columns>
                        <asp:TemplateField HeaderText="Name" ItemStyle-HorizontalAlign="Left">
                            <ItemTemplate>
                                <asp:HyperLink ID="Name" runat="server" Text='<%#Eval("Name")%>' NavigateUrl='<%# Eval("GiftCertificateId", "~/Members/MyGiftCertificate.aspx?GiftCertificateId={0}")%>'></asp:HyperLink>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Status" ItemStyle-HorizontalAlign="Left">
                            <ItemTemplate>
                                <asp:Label ID="Status" runat="server" Text='<%#GetGCDescription(Container.DataItem)%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                          <asp:TemplateField HeaderText="Expiration Date" ItemStyle-HorizontalAlign="Left">
                            <ItemTemplate>
                                <asp:Label ID="ExpirationDate" runat="server" Text='<%#Eval("ExpirationDate", "{0:d}")%>' visible='<%# ((DateTime)Eval("ExpirationDate") != DateTime.MinValue) %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>                          
                    </Columns>
                </asp:GridView>
            </td>
        </tr>
    </table>
</asp:Panel>
<asp:Panel ID="OrderNotesPanel" runat="server">
    <ajax:UpdatePanel ID="OrderNotesAjax" runat="server">
        <ContentTemplate>
            <table align="center" class="form" cellpadding="0" cellspacing="0" border="1">
                <tr>
                    <th>
                        <asp:Label ID="OrderNotesCaption" runat="server" Text="ORDER NOTES"></asp:Label>
                    </th>
                </tr>
                <tr>
                    <td class="dataSheet">
                        <asp:GridView ID="OrderNotesGrid" runat="server" Width="100%" AutoGenerateColumns="false" 
                            GridLines="none" SkinID="ItemList" EnableViewState="false">
                            <Columns>
                                <asp:TemplateField HeaderText="Date" ItemStyle-Wrap="false">
                                    <ItemTemplate>
                                        <%# Eval("CreatedDate") %>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="From">
                                    <ItemTemplate>
                                        <%# GetNoteAuthor(Container.DataItem) %>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="Comment">
                                    <ItemTemplate>
                                        <%# Eval("Comment") %>
                                    </ItemTemplate>
                                </asp:TemplateField>
                            </Columns>
                        </asp:GridView>
                    </td>
                </tr>
                <tr id="trAddNote" runat="server">
                    <td>
                        <table class="inputForm">
                            <tr>
                                <th class="rowHeader" valign="top">
                                    Add Note:
                                </th>
                                <td>
                                    <asp:TextBox ID="NewOrderNote" runat="server" TextMode="multiline" Width="400px" Height="80px"></asp:TextBox>
                                </td>
                            </tr>
                            <tr>
                                <td>&nbsp;</td>
                                <td><asp:LinkButton ID="NewOrderNoteButton" runat="server" Text="Submit my Note" SkinID="Button" OnClick="NewOrderNoteButton_Click"></asp:LinkButton></td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
        </ContentTemplate>
    </ajax:UpdatePanel>
</asp:Panel>
<asp:Panel ID="SubscriptionsPanel" runat="server">
    <table align="center" class="form" cellpadding="0" cellspacing="0" border="1">
        <tr>
            <th>
                <asp:Localize ID="SubscriptionsCaption" runat="server" Text="SUBSCRIPTIONS"></asp:Localize>
            </th>
        </tr>
        <tr>
            <td class="dataSheet">
                <asp:GridView ID="SubscriptionGrid" runat="server" AutoGenerateColumns="False" DataKeyNames="SubscriptionId" DataSourceID="SubscriptionDs" 
                    SkinID="ItemList" AllowSorting="False" AllowPaging="false" CellSpacing="4" BorderWidth="0" EnableViewState="false">
                    <Columns>
                        <asp:TemplateField HeaderText="Subscription Plan">
                            <HeaderStyle HorizontalAlign="Left" />
                            <ItemStyle HorizontalAlign="Left" />
                            <ItemTemplate>
                                <asp:Label ID="SubscriptionPlan" runat="server" text='<%#Eval("SubscriptionPlan.Name")%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Ship To">
                            <HeaderStyle HorizontalAlign="Left" />
                            <ItemStyle HorizontalAlign="Left" />
                            <ItemTemplate>
                                <asp:Label ID="ShipTo" runat="server" text='<%#Eval("OrderItem.OrderShipment.ShipToFullName")%>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Active">
                            <ItemStyle HorizontalAlign="Center" />
                            <ItemTemplate>
                                <asp:CheckBox ID="Active" runat="server" Checked='<%#Eval("IsActive")%>' Enabled="False" />
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Expiration">
                            <ItemStyle HorizontalAlign="Center" />
                            <ItemTemplate>
                                <asp:Label ID="Expiration" runat="server" text='<%#Eval("ExpirationDate", "{0:d}")%>' visible='<%# ((DateTime)Eval("ExpirationDate") != DateTime.MinValue) %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                    <EmptyDataTemplate>
                        <asp:Label ID="EmptyMessage" runat="server" Text="There are no subscriptions associated with this order."></asp:Label> 
                    </EmptyDataTemplate>
                </asp:GridView>
                <asp:ObjectDataSource ID="SubscriptionDs" runat="server" OldValuesParameterFormatString="original_{0}"
                    SelectMethod="LoadForOrder" TypeName="CommerceBuilder.Orders.SubscriptionDataSource" DataObjectTypeName="CommerceBuilder.Orders.Subscription">
                    <SelectParameters>
                        <asp:QueryStringParameter Name="OrderId" QueryStringField="OrderId" />
                    </SelectParameters>
                </asp:ObjectDataSource>
            </td>
        </tr>
    </table>
</asp:Panel>
<uc:AffiliateTracker ID="AffiliateTracker1" runat="server" />

Re: PayPal orders - Abandoned without submitting payment

Posted: Sat Nov 28, 2009 4:31 pm
by draneb
Wow, I am so happy. I still haven't had any abandoned paypal orders since implementing the changes above.
1. Continue Button replaces first small paypal button on checkout page
2. Moved Payment Information to the top of the next page so that the Pay Now with PayPal button is visible without scrolling all the way to the bottom.

How have you guys and gals faired with your changes?

I did have one question... As far as coding goes, is there some code that would insert the current Theme instead of having to hard-code it?
For example, instead of
ImageUrl="~/App_Themes/Glass_Midnight/images/continue.gif" OnClick="PayPalButton_Click"
it might look something like
ImageUrl="[CurrentTheme]/images/continue.gif" OnClick="PayPalButton_Click"

Thank you very much!

Re: PayPal orders - Abandoned without submitting payment

Posted: Tue Dec 01, 2009 12:26 pm
by DBounlom
Dear Draneb,

I haven't gotten around to implementing your change yet because of the busy holiday season. I am still getting abandoned carts. Where did you implement this code? I am more of a novice than you. :roll: Thanks!

Re: PayPal orders - Abandoned without submitting payment

Posted: Sun Dec 06, 2009 7:15 am
by draneb
Ooops, sorry. That is the entire code/file for
Conlib/ReceiptPage.ascx

All I did was move the payment information section towards the top of the page so the customer could see the paypal icon without scrolling. I have still had a 100% paypal checkout success rate since making these changes.