本帖最后由 zthsn 于 2011-10-24 16:30:29 编辑

解决方案 »

  1.   

    1.到https://developer.paypal.com注 册一个开发帐号,好了之后再进入Sandbox建立测试用的Paypal虚拟帐号(至少应该建立一个Business的和一 个Personal的),信息可以是假的,注意:这里的至少两个测试帐号是在你所建立的开发帐号里面建立的,不要注册错了;2. 测试是很麻烦,但是是必不可少的,因为如果客户买过一次出错之后,就不会来第二次了,所以花半天时间做测试是很重要的;3.代码帖出来给 大家参考一下,我做的是不很细,支付成功后返回的结果我就没有做,因为我在测试的时候已经没有问题了,所以没有做,改天有空会完善的;ASP.Net/C# 
    using System;
    using System.IO;
    using System.Text;
    using System.Net;
    using System.Web;public partial class csIPNexample :System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    //Post back to either sandbox or live
    string strSandbox = "https://www.sandbox.paypal.com/cgi-bin/webscr";
    string strLive = "https://www.paypal.com/cgi-bin/webscr";
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strSandbox);// Set values for the request back
    req.Method = "POST";
    req.ContentType = "application/x-www-form-urlencoded";
    byte[] param = Request.BinaryRead(HttpContext.Current.Request.ContentLength);
    string strRequest = Encoding.ASCII.GetString(param);
    strRequest += "&cmd=_notify-validate";
    req.ContentLength = strRequest.Length;//for proxy
    //WebProxy proxy = new WebProxy(new Uri("http://url:port#"));
    //req.Proxy = proxy;//Send the request to PayPal and get the response
    StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);
    streamOut.Write(strRequest);
    streamOut.Close();
    StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream());
    string strResponse = streamIn.ReadToEnd();
    streamIn.Close();if (strResponse == "VERIFIED")
    {
    // check the payment_status is Completed
    // check that txn_id has not been previously processed
    // check that receiver_email is your Primary PayPal email
    // check that payment_amount/payment_currency are correct
    // process payment
    }
    else if (strResponse == "INVALID")
    {
    // log for manual investigation
    }
    else
    {
    //log response/ipn data for manual investigation
    }
    }
    }
     
     ASP.Net/VB 
    Imports System.Net
    Imports System.IOPartial Class vbIPNexample
    Inherits System.Web.UI.PageProtected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    'Post back to either sandbox or live
    Dim strSandbox As String = "https://www.sandbox.paypal.com/cgi-bin/webscr"
    Dim strLive As String = "https://www.paypal.com/cgi-bin/webscr"
    Dim req As HttpWebRequest = CType(WebRequest.Create(strSandbox), HttpWebRequest)'Set values for the request back
    req.Method = "POST"
    req.ContentType = "application/x-www-form-urlencoded"
    Dim Param() As Byte = Request.BinaryRead(HttpContext.Current.Request.ContentLength)
    Dim strRequest As String = Encoding.ASCII.GetString(Param)
    strRequest = strRequest + "&cmd=_notify-validate"
    req.ContentLength = strRequest.Length'for proxy
    'Dim proxy As New WebProxy(New System.Uri("http://url:port#"))
    'req.Proxy = proxy'Send the request to PayPal and get the response
    Dim streamOut As StreamWriter = New StreamWriter(req.GetRequestStream(), Encoding.ASCII)
    streamOut.Write(strRequest)
    streamOut.Close()
    Dim streamIn As StreamReader = New StreamReader(req.GetResponse().GetResponseStream())
    Dim strResponse As String = streamIn.ReadToEnd()
    streamIn.Close()If strResponse = "VERIFIED" Then
    'check the payment_status is Completed
    'check that txn_id has not been previously processed
    'check that receiver_email is your Primary PayPal email
    'check that payment_amount/payment_currency are correct
    '处理付款
    ElseIf strResponse = "INVALID" Then
    'log for manual investigation
    Else
    'Response wasn't VERIFIED or INVALID, log for manual investigation
    End If
    End Sub
    End Class 
    ASP/VBScript 
    (requires MSXML)<%@LANGUAGE="VBScript"%>
    <%
    Dim Item_name, Item_number, Payment_status, Payment_amount
    Dim Txn_id, Receiver_email, Payer_email
    Dim objHttp, str' read post from PayPal system and add 'cmd'
    str = Request.Form & "&cmd=_notify-validate"' post back to PayPal system to validate
    set objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")
    ' set objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP.4.0")
    ' set objHttp = Server.CreateObject("Microsoft.XMLHTTP")
    objHttp.open "POST", "https://www.paypal.com/cgi-bin/webscr", false
    objHttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
    objHttp.Send str' assign posted variables to local variables
    Item_name = Request.Form("item_name")
    Item_number = Request.Form("item_number")
    Payment_status = Request.Form("payment_status")
    Payment_amount = Request.Form("mc_gross")
    Payment_currency = Request.Form("mc_currency")
    Txn_id = Request.Form("txn_id")
    Receiver_email = Request.Form("receiver_email")
    Payer_email = Request.Form("payer_email")' Check notification validation
    if (objHttp.status <> 200 ) then
    ' HTTP error handling
    elseif (objHttp.responseText = "VERIFIED") then
    ' check that Payment_status=Completed
    ' check that Txn_id has not been previously processed
    ' check that Receiver_email is your Primary PayPal email
    ' check that Payment_amount/Payment_currency are correct
    ' process payment
    elseif (objHttp.responseText = "INVALID") then
    ' log for manual investigation
    else
    ' error
    end if
    set objHttp = nothing
    %>
      

  2.   


    楼主,PayPal的API设置文档中有错误提示的解决方法,从错误代码中寻找解决方法吧,如果是方便的话请发邮件[email protected]给我,我给你回复API文档,不到1M.