Paypal IPN 示例代码没有 ActionResult。如果没有视图,我该如何提供网址?

Posted

技术标签:

【中文标题】Paypal IPN 示例代码没有 ActionResult。如果没有视图,我该如何提供网址?【英文标题】:Paypal IPN sample code has no ActionResult. How am i meant to give a url if there is no view? 【发布时间】:2017-09-02 15:58:22 【问题描述】:

这是 ipn 的 paypal 示例代码。我已经使用它几天了,但我无处可去。我不知道我该叫什么。在上一个问题中,我问了一些人说你不调用 Receive 方法。所以这让我开始思考 Paypal 将如何知道去哪里。 (即使用什么方法。)

public class IPNController : Controller

    [HttpPost]
    public HttpStatusCodeResult Receive()
    
        //Store the IPN received from PayPal
        LogRequest(Request);

        //Fire and forget verification task
        Task.Run(() =>  VerifyTask(Request));

        //Reply back a 200 code
        return new HttpStatusCodeResult(HttpStatusCode.OK);
    

    private void VerifyTask(HttpRequestBase ipnRequest)
    
        var verificationResponse = string.Empty;

        try
        
            var verificationRequest = (HttpWebRequest)WebRequest.Create("https://www.sandbox.paypal.com/cgi-bin/webscr");

            //Set values for the verification request
            verificationRequest.Method = "POST";
            verificationRequest.ContentType = "application/x-www-form-urlencoded";
            var param = Request.BinaryRead(ipnRequest.ContentLength);
            var strRequest = Encoding.ASCII.GetString(param);

            //Add cmd=_notify-validate to the payload
            strRequest = "cmd=_notify-validate&" + strRequest;
            verificationRequest.ContentLength = strRequest.Length;

            //Attach payload to the verification request
            var streamOut = new StreamWriter(verificationRequest.GetRequestStream(), Encoding.ASCII);
            streamOut.Write(strRequest);
            streamOut.Close();

            //Send the request to PayPal and get the response
            var streamIn = new StreamReader(verificationRequest.GetResponse().GetResponseStream());
            verificationResponse = streamIn.ReadToEnd();
            streamIn.Close();

        
        catch ( Exception exception)
        
            //Capture exception for manual investigation
        

        ProcessVerificationResponse(verificationResponse);
    


    private void LogRequest(HttpRequestBase request)
    
        // Persist the request values into a database or temporary data store
    

    private void ProcessVerificationResponse(string verificationResponse)
    
        if (verificationResponse.Equals("VERIFIED"))
        
            // 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
        
        else if (verificationResponse.Equals("INVALID"))
        
            //Log for manual investigation
        
        else
        
            //Log error
        
    

没有ActionResult,所以我打算如何提供一个URL。 我想到了这个,但它似乎返回无效

public ActionResult IPN() 
    Receive()



我已经问过之前的问题,但似乎仍然无法理解这个 IPN。

【问题讨论】:

【参考方案1】:

对于任何看到这个的人来说,这是一个没有经验的我,我所要做的就是 返回 Ok() 所以我的操作结果如下所示:

public ActionResult IPN() 

    Receive();  
    return Ok();

【讨论】:

以上是关于Paypal IPN 示例代码没有 ActionResult。如果没有视图,我该如何提供网址?的主要内容,如果未能解决你的问题,请参考以下文章

Paypal IPN 协议:为啥示例中没有发送空的 HTTP 200 响应?

PayPal IPN 安全性已验证

Paypal IPN 一直失败,我做错了啥?

Paypal IPN 不适用于订阅

PayPal PHP IPN 示例指的是哪些 POST 序列化问题?

PayPal 集成 (IPN) - 真的有多大可能?