由于现在公司在做一个国外的项目
在线支付现在在做的是 Pay pal pro 的接口方式
用到了2种:
Direct Payment 和  Express Checkout
但是要是短短三天内看完文档并集成到系统中
我感觉还是有点紧
所以希望有做过的高人能够在这里提供点经验或是一些相关的代码
最好是自己在实际中用到的
或是用过的朋友遇到的问题以及解决方法
希望都能够贴在这里
这样我就可以少走弯路了
希望大家不要吝啬自己的经验!!
^_^

解决方案 »

  1.   

    http://www.cnblogs.com/myzerg/archive/2006/02/07/326690.html
      

  2.   

    不用看太多文档
    注册paypal账户
    在控制面板去“商家工具”
    里面有详细说明
      

  3.   

    难确实不难
    只是三天的时间就用进去
    担心有什么纰漏
    毕竟这个和 dollar 扯上关系了
    也会和我的 money 扯上关系
    所以不敢随便
      

  4.   

    刚在这里:https://www.sandbox.paypal.com/玩了半天
    在里面可以建立测试账户买家和卖家
    在程序中:
    //using com.paypal.sdk.core.nvp;
    //using com.paypal.sdk.core;
    //using com.paypal.sdk.profiles;
    //using com.paypal.sdk.util;
    //using com.paypal.sdk.services;
           //验证卖家信息,申请后激活开通就有这个了
           IAPIProfile profile = ProfileFactory.createSignatureAPIProfile();
            profile.APIUsername = "sdk-three_api1.sdk.com";
            profile.APIPassword = "QFZCWN5HZM8VBG7Q";
            profile.APISignature = "A21eW1ch..NEqJJ-glaLhqkBMlzeAsWqX0ycck-CTc0tKI4pa1u.rgNF";
            profile.Environment = "sandbox";
            // SSL 证书,还不会玩,只用上面的简单验证(签名方式)
            //profile.CertificateFile = "sdk-seller.p12";      
            //profile.PrivateKeyPassword = "password"; 
            TestConnection test = new TestConnection();
            string result = test.testServerConnection(profile);
            //测试链接,如果正常,应该是返回 successful
            Response.Write("<hr/>"+result+"<hr/>");
    NVPCallerServices caller = new NVPCallerServices();
            caller.APIProfile = profile;
            NVPCodec encoder = new NVPCodec();
            encoder["METHOD"] = "DoDirectPayment";
            encoder["PAYMENTACTION"] = "Authorization"; //or "Sale"
            encoder["AMT"] = "99.99";
            encoder["CREDITCARDTYPE"] = "Visa";
            encoder["ACCT"] = "4595258908900506";
            encoder["EXPDATE"] = "082018";
            encoder["CVV2"] = "962";
            encoder["FIRSTNAME"] = "John";
            encoder["LASTNAME"] = "Doe";
            encoder["STREET"] = "123 Fake St";
            encoder["CITY"] = "Omaha";
            encoder["STATE"] = "NE";
            encoder["ZIP"] = "68104";
            encoder["COUNTRYCODE"] = "US";
            encoder["CURRENCYCODE"] = "USD";        string pStrrequestforNvp = encoder.Encode();
            string pStresponsenvp = caller.Call(pStrrequestforNvp);        NVPCodec decoder = new NVPCodec();
            decoder.Decode(pStresponsenvp);        string strAck = decoder["ACK"];
            if (strAck != null && (strAck == "Success" || strAck == "SuccessWithWarning"))
            {
                string pStrResQue = "TRANSACTIONID=" + decoder["TRANSACTIONID"] + "<br>" +
                    "AMT=" + decoder["AMT"] + "<br>" +
                    "AVSCODE=" + decoder["AVSCODE"] + "<br>" +
                    "CVV2MATCH=" + decoder["CVV2MATCH"];
                Response.Write(pStrResQue);
             }
            else
            {
                string pStrError = "ErrorCode=" + decoder["L_ERRORCODE0"] + "<br>" +
                    "Desc=" + decoder["L_SHORTMESSAGE0"] + "<br>" +
                    "Desc2=" + decoder["L_LONGMESSAGE0"];
                Response.Write(pStrError);
             }至此 DoDirectPayment  基本算是能够用了,不过 
    string pStresponsenvp = caller.Call(pStrrequestforNvp) 这个地方要等很长时间,看来还是得用 ajax 做一下,页面放个 waiting for proecessing...
    贴出来希望做过这个的给个意见
    接下来研究 Express Checkout 
    也希望大家能够帮一下!
      

  5.   

    自己去注册个沙箱做测试。web服务引用是
    http://www.sandbox.paypal.com/wsdl/PayPalSvc.wsdl
    public void ProcessDirectPayment( PayPalInformation paypalinformation )//PayPalInformation 结构体类型,我写在一个操作类里。
            {
                DoDirectPaymentRequestType DoDirectPmtReqType = new DoDirectPaymentRequestType();
                DoDirectPmtReqType.DoDirectPaymentRequestDetails = new DoDirectPaymentRequestDetailsType();            // set payment action            DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentAction = PaymentActionCodeType.Sale;            //set IP
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.IPAddress = HttpContext.Current.Request.UserHostAddress;            DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard = new CreditCardDetailsType();
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.CreditCardNumber = paypalinformation.Order.CreditCard.Number;  //信用卡号
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.CreditCardType = (CreditCardTypeType)StringToEnum(typeof(CreditCardTypeType), paypalinformation.Order.CreditCard.CardType);            DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.CVV2 = paypalinformation.Order.CreditCard.SecurityCode;
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.ExpMonth = paypalinformation.Order.CreditCard.ExpMonth;
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.ExpYear = paypalinformation.Order.CreditCard.ExpYear;            // Set the billing address  付款人的信息。
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.CardOwner = new PayerInfoType();
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.CardOwner.PayerName = new PersonNameType();
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.CardOwner.PayerName.FirstName = paypalinformation.Order.EndUser.FirstName;
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.CardOwner.PayerName.LastName = paypalinformation.Order.EndUser.LastName;
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address = new AddressType();
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.Street1 = paypalinformation.Order.CreditCard.Address.AddressLine;
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.Street2 = paypalinformation.Order.CreditCard.Address.AddressLine2;
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.CityName = paypalinformation.Order.CreditCard.Address.City;
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.StateOrProvince = paypalinformation.Order.CreditCard.Address.State;
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.PostalCode = paypalinformation.Order.CreditCard.Address.PostalCode;
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.CountrySpecified = true;
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.Country = CountryCodeType.US;
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.CreditCard.CardOwner.Address.Phone = paypalinformation.Order.EndUser.ContactInformation.Phone;            PaymentDetailsItemType[] itemArray = new PaymentDetailsItemType[paypalinformation.Order.OrderDetails.Products.Length];
                PaymentDetailsItemType items = null;            // Loop through all items that were added to the shopping cart.
                for (int i = 0; i < paypalinformation.Order.OrderDetails.Products.Length; i++)
                {
                    items = new PaymentDetailsItemType();
                    items.Amount = new BasicAmountType();
                    items.Amount.Value = paypalinformation.Order.OrderDetails.Products[i].Price.ToString();
                    items.Amount.currencyID = CurrencyCodeType.USD;
                    items.Quantity = paypalinformation.Order.OrderDetails.Products[i].Quantity.ToString();                //items.Tax = new BasicAmountType();
                    //items.Tax.Value = CalculationManager.CalcSalesTax( Convert.ToDecimal( items.Amount.Value ) ).ToString();
                    //items.Tax.currencyID = CurrencyCodeType.USD;                items.Name = paypalinformation.Order.OrderDetails.Products[i].Name;
                    items.Number = paypalinformation.Order.OrderDetails.Products[i].ProductID.ToString();                itemArray.SetValue(items, i);
                }            // set payment Details
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails = new PaymentDetailsType();
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.Custom = System.DateTime.Now.ToLongTimeString();
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.OrderDescription = "";            DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.PaymentDetailsItem = new PaymentDetailsItemType[itemArray.Length];
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.PaymentDetailsItem = itemArray;            for (int ii = 0; ii < itemArray.Length; ii++)
                {
                    DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.PaymentDetailsItem.SetValue(itemArray[ii], ii);
                }            // Order summary.
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.OrderTotal = new BasicAmountType();
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.OrderTotal.currencyID = CurrencyCodeType.USD;
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.OrderTotal.Value = paypalinformation.Order.OrderTotal.ToString();
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.ShippingTotal = new BasicAmountType();
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.ShippingTotal.currencyID = CurrencyCodeType.USD;
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.ShippingTotal.Value = paypalinformation.Order.ShippingTotal.ToString();
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.TaxTotal = new BasicAmountType();
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.TaxTotal.currencyID = CurrencyCodeType.USD;
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.TaxTotal.Value = paypalinformation.Order.Tax.ToString();
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.ItemTotal = new BasicAmountType();
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.ItemTotal.currencyID = CurrencyCodeType.USD;
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.ItemTotal.Value = paypalinformation.Order.SubTotal.ToString();            //set ship to address
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.ShipToAddress = new AddressType();
                DoDirectPmtReqType.DoDirectPaymentRequestDetails.PaymentDetails.ShipToAddress.Name = paypalinformation.Order.EndUser.FirstName + " " + paypalinformation.Order.EndUser.LastName;
                
    }
    一小部分代码,里面有很多我自己写的公共层中的类,不能全部解释。希望对楼主有帮助。
      

  6.   

    谢谢楼上的
        希望能够给一些地址验证,支付金额验证的思路或是代码
    再就是客户付款,我在后台该如何去取款?如果是 order,怎么去发货?