0

私は問題があります 。ウェブサイト プロジェクト (.net 4.0 aspx webform) でペイパル (rest api & PaypalCoreSDK バージョンは 1.3.4.0、RestApiSDK バージョンは 0.7.3.0) で支払いを試みると、問題が発生し、エラー メッセージが表示されます。このメッセージは;

{"The request was aborted: The request was canceled."}
{"Cannot close stream until all bytes are written."}
   at System.Net.ConnectStream.CloseInternal(Boolean internalCall, Boolean aborting)
   at System.Net.ConnectStream.System.Net.ICloseEx.CloseEx(CloseExState closeState)
   at System.Net.ConnectStream.Dispose(Boolean disposing)
   at System.IO.Stream.Close()
   at System.IO.StreamWriter.Dispose(Boolean disposing)
   at System.IO.TextWriter.Dispose()
   at PayPal.HttpConnection.Execute(String payLoad, HttpWebRequest httpRequest)
   at PayPal.PayPalResource.ConfigureAndExecute[T](APIContext apiContext, HttpMethod httpMethod, String resource, Dictionary`2 headersMap, String payLoad)
   at PayPal.PayPalResource.ConfigureAndExecute[T](APIContext apiContext, HttpMethod httpMethod, String resource, String payLoad)
   at PayPal.Api.Payments.Payment.Create(APIContext apiContext)
   at DEPOSANAT.Web.CheckOut.PaymentWithPaypal(String totalAmount, String amountCurrency, String amountDetailShipping, String amountDetailSubTotal, String amountDetailTax, String orderID, String recipientName, String shipingAddressLine1, String shipingAddressLine2, List`1 shoppinListItems) in C:\Users\tahsin.ozcelik\Desktop\DEPOSANAT_Proj_TFS\DEPOSANAT\DEPOSANAT.Web\CheckOut.aspx.cs:line 181
   at DEPOSANAT.Web.CheckOut.imgBtnPaypalOdeme_Click(Object sender, ImageClickEventArgs e) in C:\Users\tahsin.ozcelik\Desktop\DEPOSANAT_Proj_TFS\DEPOSANAT\DEPOSANAT.Web\CheckOut.aspx.cs:line 94
   at System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e)
   at System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

私のコード;

private static string GetAccessToken()
    { 
        string accessToken = new OAuthTokenCredential("XXXXXXXX", "XXXXXXXXX", GetConfig()).GetAccessToken();
        return accessToken;
    }
    public static APIContext GetAPIContext()
    {
        APIContext apiContext = new APIContext(GetAccessToken());
        apiContext.Config = GetConfig();
        return apiContext;
    }
    private static Dictionary<string, string> GetConfig()
    {
        Dictionary<string, string> configMap = new Dictionary<string, string>();
        configMap.Add("mode", "sandbox");
        configMap.Add("connectionTimeout", "36000");
       return configMap;
    }

APIContext apiContext = GetAPIContext();

        ProductLBll pLBll = new ProductLBll();
        List<Item> itms = new List<Item>();
        decimal productTotal = 0;
        foreach (var myObj in shoppinListItems)
        {
            Item myAddItem = new Item();
            myAddItem.currency = amountCurrency;
            myAddItem.name = pLBll.GetName(VariableHelper.CheckValueOfInt(myObj.ProductVariant.ProductId), SessionUser.LanguageTypeId);//pLBll.GetName(VariableHelper.CheckValueOfInt(myObj.ProductVariant.ProductId), SessionUser.LanguageTypeId);
            myAddItem.price = String.Format("{0:0.00}", myObj.ProductVariant.CurrentAmount.Value);//String.Format("{0:0.00}", myObj.ProductVariant.CurrentAmount.Value);
            myAddItem.quantity = shoppinListItems[0].Qtty.ToString();//myObj.Qtty.ToString();
            myAddItem.sku = myObj.ProductVariant.ProductId.HasValue ? myObj.ProductVariant.ProductId.Value.ToString() : "ID YOK";
            productTotal += myObj.ProductVariant.CurrentAmount.Value * myObj.Qtty;//myObj.ProductVariant.CurrentAmount.Value * myObj.Qtty;
            itms.Add(myAddItem);
        }

       ItemList itemList = new ItemList();
        itemList.items = itms;


        Payer payr = new Payer();
        payr.payment_method = "paypal";

        string baseURI = Request.Url.Scheme + "://" + Request.Url.Authority + "/odeme?";
        string requestUrl = Request.Url.OriginalString;
        orderID = System.Guid.NewGuid().ToString();
        string returnUrl = baseURI + "snc=true";
        //+ orderID.Substring(0, 10);
        string cancelUrl = baseURI + "snc=false";
        //+orderID.Substring(0, 13);
        RedirectUrls redirUrls = new RedirectUrls();
        redirUrls.cancel_url = cancelUrl;
        redirUrls.return_url = returnUrl;

        Details details = new Details();
        details.tax = String.Format("{0:0.00}", amountDetailTax);
       details.shipping = String.Format("{0:0.00}", amountDetailShipping);
        details.subtotal = String.Format("{0:0.00}", productTotal);



        decimal total = VariableHelper.CheckValueOfDecimal(details.tax) + VariableHelper.CheckValueOfDecimal(details.shipping) + productTotal;
        Amount amnt = new Amount();
        amnt.currency = amountCurrency;
        amnt.total = total.ToString();
        amnt.details = details;

        List<Transaction> transactionList = new List<Transaction>();
        Transaction tran = new Transaction();
        tran.description = "işlem açıklaması";
        tran.amount = amnt;
        tran.item_list = itemList;

        transactionList.Add(tran);


        Payment pymnt = new Payment();
        pymnt.intent = "sale";
        pymnt.payer = payr;
        pymnt.transactions = transactionList;
        pymnt.redirect_urls = redirUrls;
        #endregion

        string redirectUrl = "";
        try
        {
            Payment createdPayment = pymnt.Create(apiContext);
            foreach (var itemm in createdPayment.links)
            {
                if (itemm.rel.Contains("approval_url"))
                    redirectUrl = itemm.href;
            }
        }
        catch (PayPal.Exception.PayPalException ex)
        {
            //Response.Write(ex.Message);
        }

        Response.Redirect(redirectUrl);

すぐに助けてもらえますか?ありがとう。

4

2 に答える 2

0

Jan はまさにその通りです。その重要な手がかりに感謝します。

先週新しい支払いフォームを使用してから数日間、この時折発生するエラーに苦しんでいました。結局のところ、多くの国際住所には分音記号を含む文字が含まれています ( http://en.wikipedia.org/wiki/Diacritic )。投稿データでこれらの文字を使用して、PayPal サンドボックスでこの問題を確認しましたが、上記の正確なエラーが繰り返し発生しました。私も上記と同じライブラリを使用しています。

この問題を解決するために (これまでのすべてのテストで機能します)、次の方法でユーザー入力 (住所行 1、行 2、first_name、last_name など) をスクラブしています。

    // http://msdn.microsoft.com/en-us/library/ebza6ck1.aspx
    String NormalizeString(String value)
    {
        if (!value.IsNullOrEmpty())
        {
            var newStringBuilder = new StringBuilder();
            newStringBuilder.Append(value.Normalize(NormalizationForm.FormKD)
                                            .Where(x => x < 128)
                                            .ToArray());
            return newStringBuilder.ToString();
        }

        return value;
    }
于 2013-10-22T06:54:59.650 に答える
0

同じ問題が発生しました。私にとっては、トランザクションの説明とトランザクション内のアイテムの特定の文字が原因であることが判明しました。例えば。「ユーロ記号」、á é ä など。

これのエンコーディングは、ライブラリによって (正しく) 処理されていないようです。

于 2013-10-21T21:03:36.273 に答える