0

Paypal のカートに追加フォームを使用して、購入者の購入金額に基づいて割引を提供しようとしています。基本的に私は割引コード Disc1、Disc2、Disc3、Disc4 を配っています。これらは $5、$10、$20、$50 の割引になります。ただし、それぞれが機能するのは、購入金額がそれぞれ 25 ドル、50 ドル、100 ドル、250 ドルを超えた場合のみです。

最低価格条件が満たされた場合に割引を適用する Javascript ファイルを呼び出して、これを実行しようとしています。

問題は、フォームが複数のアイテム用であることです。したがって、「金額」の変数はありませんが、オプションごとに異なる金額があるため、option_amount0、option_amount1、option_amount2....などです。「金額」が1つある場合はコードを機能させることができますが、ここではそうではありません複数のアイテム/価格。

HTML コードは次のようになります。

    <head>
<script language="JavaScript" type="text/javascript" src="coupon.js"></script>
</head>
        <form target="_blank" action="https://www.paypal.com/cgi-bin/webscr" method="post">
    <input type="hidden" name="cmd" value="_cart">
    <input type="hidden" name="business" value="email@email.com">
    <input type="hidden" name="lc" value="US">
    <input type="hidden" name="item_name" value="Products">
    <input type="hidden" name="button_subtype" value="">
    <input type="hidden" name="no_shipping" value="1">
    <input type="hidden" name="undefined_quantity" value="1">
    <input type="hidden" name="rm" value="1">
    <input type="hidden" name="return" value="www.website.com">
    <input type="hidden" name="cancel_return" value="www.website.com">
    <input type="hidden" name="currency_code" value="USD">
    <input type="hidden" name="tax_rate" value="0.000">
    <input type="hidden" name="shipping" value="0.00">
    <input type="hidden" name="add" value="1">
    <input type="hidden" name="bn" value="PP-ShopCartBF:btn_cart_LG.gif:NonHosted">
    <table>
    <tr><td><br /><h4>
    <center><input type="hidden" name="on0" value="Products">Choose a Product</center></h4></td></tr><tr><td><center>
    <select name="os0" style="width: 230px"></center>
        <option value="item1">Product 1 : $15</option>
            <option value="item2">Product 2 : $25</option>
        <option value="item3">Product 3 : $75</option>
        <option value="item4">Product 4 : $150</option>
        <option value="item5">Product 5 : $300</option>

    </select> </td></tr>
    </table>
    <input type="hidden" name="currency_code" value="USD">

    <input type="hidden" name="option_select0" value="item1">
    <input type="hidden" name="option_amount0" value="15.00">
    <input type="hidden" name="option_select1" value="item2">
    <input type="hidden" name="option_amount1" value="25.00">
    <input type="hidden" name="option_select2" value="item3">
    <input type="hidden" name="option_amount2" value="75.00">
    <input type="hidden" name="option_select3" value="item4">
    <input type="hidden" name="option_amount3" value="150.00">
    <input type="hidden" name="option_select4" value="item4">
    <input type="hidden" name="option_amount4" value="300.00">
    <input type="hidden" name="option_index" value="0">


    <input type="hidden" name="discount_amount">

    <br />
    <!--  Enter Coupon  --> 
    <center>Coupon Code:</span> <br />
    <input type="text" name="text1" /> </center>
    <br />
    <!--  End Coupon  --> 

    <input type="image" src="images/btn_cart.gif" border="0" onclick=CalculateOrder(this.form) name="submit" alt="PayPal - The safer, easier way to pay online!">
    <img alt="" border="0" src="images/btn_cart.gif" width="1" height="1">
    </form>

Javascript ファイルは次のとおりです。

var coup1="Disc1";
var coup2="Disc2";
var coup3="Disc3";
var coup4="Disc4";



function CalculateOrder(form) {

if (form.text1.value == coup1 && ((form.option_amount.value>=25)))

{

form.discount_amount.value = "5";

}

if (form.text1.value == coup2 && ((form.option_amount.value>=50)))

{

form.discount_amount.value = "10";

}



if (form.text1.value == coup3 && ((form.option_amount.value>=100)))

{

form.discount_amount.value = "20";

}


if (form.text1.value == coup4) && ((form.option_amount.value>=250)))

{

form.discount_amount.value = "50";

}

}

HTML フォームからの option_amount のスクリプト アカウントを作成するにはどうすればよいですか? どんな助けでも大歓迎です!

4

2 に答える 2

2

カートの統合に PayPalMerchantSDK を使用しています。

あなたの答えとして、エクスプレスチェックアウトボタンでバスケットをペイパルに送る必要があるため、このシナリオを取り上げます。また、私のバスケットには、合計金額に適用できる割引券があります。Asp.Net MVC ソリューションを使用しています

PayPal 支払い統合のコードと指示に従ってください。

ステップ 1 : PayPal_Merchant_SDK.dll をダウンロードして参照する

ステップ 2 : PayPal_Merchant_SDK サービスの web.config ファイルに必要な設定を追加します。

ステップ 3:バスケット コントローラーの Payment アクションに、次のコードを追加します。

    [HttpPost]
    public ActionResult Payment()
    {
        var basketForPayment = GetBasket();
        if (basketForPayment.Order == null || basketForPayment.OrderItem.Count <= 0 || basketForPayment.Order.DVEcomOrderStatus.ID != (int)DvEcomOrderStatusEnum.Initiated) { return View("basket-empty", new DvClientViewModel(UrlBasketEmptyPage, Languages.English)); }


        //Paypal Expresscheckout Integration===============================

        // Step 1: Create the paypal request object
        var request = new SetExpressCheckoutRequestType();
        PopulatePaypalRequestObject(request, basketForPayment);

        // Step 2: Invoke the API
        SetExpressCheckoutReq getTockenWrapper = new SetExpressCheckoutReq();
        getTockenWrapper.SetExpressCheckoutRequest = request;
        PayPalAPIInterfaceServiceService service = new PayPalAPIInterfaceServiceService();
        SetExpressCheckoutResponseType setEcResponse = service.SetExpressCheckout(getTockenWrapper);

        // Step 3: Check for API return status and get the payment tocken
        HttpContext currContext = System.Web.HttpContext.Current;
        currContext.Items.Add("paymentDetails", request.SetExpressCheckoutRequestDetails.PaymentDetails);
        var currResponseContext = SetPayPalKeyResponseObjects(service, setEcResponse);

        var responseobject = (Dictionary<string, string>) currResponseContext.Items["Response_keyResponseObject"];
        if (responseobject["API Status"] != "SUCCESS")
        {
            return View("Invalid-basket", new DvClientViewModel(UrlBasketEmptyPage, Languages.English));
        }

        //Step 4: Make Payment with the tocken
        var tocken = responseobject["EC token"];
        string queryString = "https://www.sandbox.paypal.com/webscr?cmd=_express-checkout";
        if(!string.IsNullOrEmpty(tocken))
        {

            //Update Order with the transaction token
            _orderRepository.UpdateOrder(model.Order.OrderNumber, tocken);

            queryString += string.Format("&token={0}", tocken);
            Response.Redirect(queryString);
        }

        return RedirectToAction("Payment");
    }

ステップ 4:支払い応答アクション

    public ActionResult PaymentResponse()
    {
        // If we have a SECURE_SECRET then validate the incoming data using the MD5 hash
        //included in the incoming data
        if (Request.QueryString["token"].Length > 0 && Request.QueryString["PayerID"].Length > 0 )
        {
            var token = Request.QueryString["token"];
            var payerId = Request.QueryString["PayerID"];
            var order = _orderRepository.GetOrderTransaction(token);

            if(order !=null)
            {
                //Update Order with the transaction token
                _orderRepository.UpdateOrderSuccess(order.OrderNumber, token, payerId);
            }

            PaymentResponseClearSessionAndCookie();
            Response.Redirect("/");

        }

        return View("Invalid-basket", new DvClientViewModel(UrlBasketEmptyPage, Languages.English));

    }

ステップ 5: PayPal のバスケットを準備する

   private void PopulatePaypalRequestObject(SetExpressCheckoutRequestType request, DvEcomOrderViewModel basket)
    {
        var ecDetails = new SetExpressCheckoutRequestDetailsType();
        ecDetails.ReturnURL = ConfigurationManager.AppSettings["PayPalReturnUrl"];            ecDetails.CancelURL = ConfigurationManager.AppSettings["PayPalCancelUrl"];            ecDetails.BuyerEmail = basket.Order.CustomerEmailAddress;

        //Fix for release
        ecDetails.AddressOverride = "0";
        ecDetails.NoShipping = "1";

        /* Populate payment requestDetails. 
         * SetExpressCheckout allows parallel payments of upto 10 payments. 
         * This samples shows just one payment.
         */
        var paymentDetails = new PaymentDetailsType();
        ecDetails.PaymentDetails.Add(paymentDetails);
        double orderTotal = 0.0;
        double itemTotal = 0.0;
        var currency = (CurrencyCodeType)
            Enum.Parse(typeof(CurrencyCodeType), ConfigurationManager.AppSettings["PayPalCurrency"]);


        paymentDetails.OrderTotal = new BasicAmountType(currency, orderTotal.ToString(CultureInfo.InvariantCulture));
        orderTotal += Double.Parse(basket.Order.SubTotal.ToString(CultureInfo.InvariantCulture)); // Subtotal

        paymentDetails.ShippingTotal = new BasicAmountType(currency, basket.Order.DeliveryAmount.ToString(CultureInfo.InvariantCulture)); // Add delivery charge
        orderTotal += Double.Parse(basket.Order.DeliveryAmount.ToString(CultureInfo.InvariantCulture));

        paymentDetails.TaxTotal = new BasicAmountType(currency, basket.Order.VAT.ToString(CultureInfo.InvariantCulture)); //Add Vat Tax
        orderTotal += Double.Parse(basket.Order.VAT.ToString(CultureInfo.InvariantCulture));

        //paymentDetails.ShippingDiscount = new BasicAmountType(currency, basket.Order.DiscountAmount.ToString(CultureInfo.InvariantCulture)); // Subtract discount
        orderTotal -= Double.Parse(basket.Order.DiscountAmount.ToString(CultureInfo.InvariantCulture));


        paymentDetails.OrderDescription = string.Format("Payment for the basket order {0}", basket.Order.OrderNumber);

        paymentDetails.PaymentAction = (PaymentActionCodeType)
            Enum.Parse(typeof(PaymentActionCodeType), "SALE");


        AddressType shipAddress = new AddressType();
        shipAddress.Name = string.Format("{0} {1}", basket.Order.DeliveryFirstName, basket.Order.DeliverySurname);
        shipAddress.Street1 = basket.Order.BillingAddress1;
        shipAddress.Street2 = basket.Order.BillingAddress2 ?? "-";
        shipAddress.CityName = basket.Order.DeliveryTown ?? "-";
        shipAddress.StateOrProvince = basket.Order.DeliveryCounty;
        shipAddress.Country = (CountryCodeType)
            Enum.Parse(typeof(CountryCodeType), "GB");
        shipAddress.PostalCode = basket.Order.DeliveryPostcode;

        //Fix for release
        shipAddress.Phone = basket.Order.DeliveryTelePhone;

        ecDetails.PaymentDetails[0].ShipToAddress = shipAddress;


        // Each payment can include requestDetails about multiple items
        // This example shows just one payment item

        //ApplyDiscount
        if (basket.Order.DiscountAmount > 0)
        {
            decimal disAmt = basket.Order.DiscountAmount -
                             (basket.Order.DiscountAmount + basket.Order.DiscountAmount);
            PaymentDetailsItemType discount = new PaymentDetailsItemType();
            discount.Amount = new BasicAmountType(currency, disAmt.ToString(CultureInfo.InvariantCulture));
            discount.Description = "Discount Applied";
            discount.Name = "Voucher Code";
            paymentDetails.PaymentDetailsItem.Add(discount);
        }

        var itemDetails = new PaymentDetailsItemType();
        foreach (var item in basket.OrderItem)
        {                
            itemDetails.Name = item.ProductName;
            itemDetails.Amount = new BasicAmountType(currency, item.UnitPrice.ToString(CultureInfo.InvariantCulture));
            itemDetails.Quantity = Int32.Parse(item.Quantity.ToString(CultureInfo.InvariantCulture));
            itemDetails.ItemCategory = (ItemCategoryType)
            Enum.Parse(typeof(ItemCategoryType), "0");
            itemTotal += Double.Parse(item.UnitPrice.ToString(CultureInfo.InvariantCulture)) * itemDetails.Quantity.Value;

            itemDetails.Tax = new BasicAmountType(currency, item.VAT.ToString(CultureInfo.InvariantCulture));

            itemDetails.Description = item.ProductName;


            paymentDetails.PaymentDetailsItem.Add(itemDetails);
        }

        itemTotal -= Double.Parse(basket.Order.DiscountAmount.ToString(CultureInfo.InvariantCulture));
        paymentDetails.ItemTotal = new BasicAmountType(currency, itemTotal.ToString(CultureInfo.InvariantCulture));
        paymentDetails.OrderTotal = new BasicAmountType(currency, orderTotal.ToString(CultureInfo.InvariantCulture));

        request.SetExpressCheckoutRequestDetails = ecDetails;
    }

ステップ 6:開始する必要はありません...

ステップ 7 : 上記の手順により、PayPal のトランザクションが成功します。次に、Post メソッドを介して別の Paypal Authorize API 関数を呼び出して、実際のトランザクションを承認する必要があります。プロセスは上記の手順と同じです。

于 2012-10-17T14:03:01.547 に答える
0

少し長いですが、解決策を見つけましたが、それでも目的は達成されます。

私はjsコードを次のようにしました:

var coup1="Disc1";
var coup2="Disc2";
var coup3="Disc3";
var coup4="Disc4";



function CalculateOrder(form) {

if (form.text1.value == coup1 && (form.os0.value == "item2" || form.os0.value == "item3" || form.os0.value == "item4" || form.os0.value == "item5"))

{

form.discount_amount.value = "5";

}

if (form.text1.value == coup2 && (form.os0.value == "item3" || form.os0.value == "item4" || form.os0.value == "item5"))

{

form.discount_amount.value = "10";

}



if (form.text1.value == coup3 && (form.os0.value == "item4" || form.os0.value == "item5"))

{

form.discount_amount.value = "20";

}


if (form.text1.value == coup4 && (form.os0.value == "item5"))

{

form.discount_amount.value = "50";

}

}
于 2011-10-29T18:25:15.320 に答える