c# - Paypal 快速结帐 Asp.Net

标签 c# asp.net web-services paypal

简单的问题。我该怎么做。

我已设法连接到 Paypal 网络服务并使用沙盒,但我什至无法开始。

该文档在您必须遵循的步骤中很容易理解,但我无法获得任何代码来编译更不用说运行了。据我所知。见下文,PayPalTest 是我的服务引用的名称

我已经标记了它开始出错的地方我无法获得正确的参数,无论我尝试声明或实例化什么并获得无效类型错误(厄运的红色波浪线)。

我应该做什么。有没有人可以分享工作样本。是的,我可以看到很多使用 Ajax、jQuery 等的示例。但是我找不到任何可以按照我想要的方式进行的操作。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

namespace GenericWebApplication.ApplicationClasses
{
    class PayPalIntegration
    {
        public void PayForGoods()
        {
            PayPalTest.CustomSecurityHeaderType c = new PayPalTest.CustomSecurityHeaderType();

            c.Credentials.Username = "xxxxx.xxxxx.xxxxx.xxxxx";
            c.Credentials.Password = "XXXXXXXXXXXX";
            c.Credentials.Signature = "XXxxX-XXXxxXXxX.XXXXXXXxxXXxXX-XXXXxxxXXXXxxXXXXxxXXX";

            PayPalTest.PayPalAPIAAInterfaceClient cl = new PayPalTest.PayPalAPIAAInterfaceClient();
            //I get stuck here
            PayPalTest.SetExpressCheckoutReq r = new PayPalTest.SetExpressCheckoutReq();

            PayPalTest.SetExpressCheckoutRequestDetailsType d = new SetExpressCheckoutRequestDetailsType();
            d.ReturnURL = "";
            d.CancelURL = "";

            PayPalTest.SetExpressCheckoutResponse re = cl.SetExpressCheckout(d, d);

        }
    }
}

[更新]

    encoder["METHOD"] = "SetExpressCheckout";
    encoder["USER"] = APIUsername;
    encoder["PWD"] = APIPassword;
    encoder["SIGNATURE"] = APISignature;
    encoder["RETURNURL"] = returnURL;
    encoder["CANCELURL"] = cancelURL;
    encoder["VERSION"] = SystemFunctions.Settings("PayPalVersion", "")[0].Value;
    encoder["NOSHIPPING"] = "2";
    encoder["PAYMENTREQUEST_0_AMT"] = amt;
    encoder["MAXAMT"] = amt;
    encoder["PAYMENTREQUEST_0_PAYMENTACTION"] = "Sale";
    encoder["PAYMENTREQUEST_0_CURRENCYCODE"]  = "GBP";
    encoder["PAYMENTREQUEST_0_DESC"] = "test EC payment";
    encoder["PAYMENTREQUEST_0_SHIPPINGAMT"] = SystemFunctions.Shipping;
    //Optional Shipping Address entered on the merchant site
    encoder["PAYMENTREQUEST_0_SHIPTONAME"]       = shipToName;
    encoder["PAYMENTREQUEST_0_SHIPTOSTREET"]     = shipToStreet;
    encoder["PAYMENTREQUEST_0_SHIPTOSTREET2"]    = shipToStreet2;
    encoder["PAYMENTREQUEST_0_SHIPTOCITY"]       = shipToCity;
    encoder["PAYMENTREQUEST_0_SHIPTOSTATE"]      = shipToState;
    encoder["PAYMENTREQUEST_0_SHIPTOZIP"]        = shipToZip;
    encoder["PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE"]= shipToCountryCode;
    encoder["EMAIL"] = SystemFunctions.UserAddress.Email;
    encoder["SOLUTIONTYPE"] = "Sole";
    encoder["LANDINGPAGE"] = "Billing";
    encoder["CHANNELTYPE"] = "Merchant";
    encoder["PAYMENTREQUEST_0_ITEMAMT"] = SystemFunctions.TrolleyTotal.ToString("0.00");
    encoder["L_PAYMENTREQUEST_0_NAME0"] = "Goods";
    encoder["L_PAYMENTREQUEST_0_AMT0"] = SystemFunctions.TrolleyTotal.ToString("0.00");
    encoder["L_PAYMENTREQUEST_0_NUMBER0"]="ABC123";
    encoder["L_PAYMENTREQUEST_0_QTY0"] = "1";

最佳答案

Paypal Code Wizard来自 PayPal Developer 站点的示例 ASP.Net for Express Checkout。只需从下拉列表中选择 ASP.net。

这里只是一些示例。您可以获得所有 ASP.Net 以及来自 PayPal 代码向导的功能。您需要从 PayPal 代码向导下载五个文件。我确实包含了来自 PayPal 向导站点的代码片段。

这是处理计费的代码部分:

if (PaymentOption == "PayPal")
{
NVPAPICaller test = new NVPAPICaller();

string retMsg = "";
string token = "";

if (Session["payment_amt"] != null)
{
    string amt = Session["payment_amt"].ToString();

    //Optional Shipping Address entered on the merchant site
    string shipToName           = "<PAYMENTREQUEST_0_SHIPTONAME>";
    string shipToStreet        = "<PAYMENTREQUEST_0_SHIPTOSTREET>";
    string shipToStreet2       = "<PAYMENTREQUEST_0_SHIPTOSTREET2>";
    string shipToCity           = "<PAYMENTREQUEST_0_SHIPTOCITY>";
    string shipToState          = "<PAYMENTREQUEST_0_SHIPTOSTATE>";
    string shipToZip            = "<PAYMENTREQUEST_0_SHIPTOZIP>";
    string shipToCountryCode    = "<PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE>";

    bool ret = test.MarkExpressCheckout(amt, shipToName, shipToStreet, shipToStreet2,
                    shipToCity, shipToState, shipToZip, shipToCountryCode,
                    ref token, ref retMsg);
    if (ret)
    {
        Session["token"] = token;
        Response.Redirect(retMsg);
    }
    else
    {
        Response.Redirect("APIError.aspx?" + retMsg);
    }
}
else
{
    Response.Redirect( "APIError.aspx?ErrorCode=AmtMissing" );
}
}

这是处理计费的部分:

if (PaymentOption == "PayPal")
{
NVPAPICaller test = new NVPAPICaller();

string retMsg = "";
string token = "";
string payerId = "";

token = Session["token"].ToString();

bool ret = test.GetShippingDetails( token, ref payerId, ref shippingAddress, ref retMsg );
if (ret)
{
    Session["payerId"] = payerId;
    Response.Write ( shippingAddress );    
}
else
{
    Response.Redirect("APIError.aspx?" + retMsg);
}
}

这是处理付款确认的部分:

if (PaymentOption == "PayPal")
{
NVPAPICaller test = new NVPAPICaller();

string retMsg = "";
string token = "";
string finalPaymentAmount = "";
string payerId = "";
NVPCodec decoder;

token = Session["token"].ToString();
payerId = Session["payerId"].ToString();
finalPaymentAmount = Session["payment_amt"].ToString();

bool ret = test.ConfirmPayment( finalPaymentAmount, token, PayerId, ref decoder, ref retMsg );
if (ret)
{
    // Unique transaction ID of the payment. Note:  If the PaymentAction of the request was Authorization or Order, this value is your AuthorizationID for use with the Authorization & Capture APIs. 
    string transactionId    = decoder["PAYMENTINFO_0_TRANSACTIONID"]; 

    // The type of transaction Possible values: l  cart l  express-checkout 
    string transactionType = decoder["PAYMENTINFO_0_TRANSACTIONTYPE"]; 

    // Indicates whether the payment is instant or delayed. Possible values: l  none l  echeck l  instant 
    string paymentType      = decoder["PAYMENTINFO_0_PAYMENTTYPE"]; 

    // Time/date stamp of payment
    string orderTime        = decoder["PAYMENTINFO_0_ORDERTIME"]; 

    // The final amount charged, including any shipping and taxes from your Merchant Profile.
    string amt              = decoder["PAYMENTINFO_0_AMT"];

    // A three-character currency code for one of the currencies listed in PayPay-Supported Transactional Currencies. Default: USD.    
    string currencyCode = decoder["PAYMENTINFO_0_CURRENCYCODE"];

    // PayPal fee amount charged for the transaction    
    string feeAmt           = decoder["PAYMENTINFO_0_FEEAMT"]; 

    // Amount deposited in your PayPal account after a currency conversion.    
    string settleAmt        = decoder["PAYMENTINFO_0_SETTLEAMT"]; 

    // Tax charged on the transaction.    
    string taxAmt           = decoder["PAYMENTINFO_0_TAXAMT"];

    //' Exchange rate if a currency conversion occurred. Relevant only if your are billing in their non-primary currency. If 
    string exchangeRate = decoder["PAYMENTINFO_0_EXCHANGERATE"];
}
else
{
    Response.Redirect("APIError.aspx?" + retMsg);
}
}

关于c# - Paypal 快速结帐 Asp.Net,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32187655/

相关文章:

C# MVC 文件上传问题

css - 为什么我的 bootstrap.css 文件停止更新?

c# - Response.Redirect 停止使用 IIS 7 重写规则

.net - 如何在 ASP.NET Web API 中指定我想要 JSON 还是 XML?

C# Web api post 参数始终为空

java - 定期调用Java Web服务方法

c# - 强制接口(interface)的子类实现 ToString

c# - 是否有一个属性可以与 ASP.NET MVC 3 一起使用来防止模型字段自动包含在我的 View 中?

c# - 在 C# 中使用本地网页作为界面

asp.net - 通过 ASP.Net SSRS ReportViewer 呈现后更改 Excel 中的行高