繁体   English   中英

Paypal IPN示例代码没有ActionResult。 如果没有视图,我打算如何给出网址?

[英]Paypal IPN sample code has no ActionResult. How am i meant to give a url if there is no view?

这是ipn的paypals示例代码。 我已经在这几天了,而且我没有在哪里。 我不确定我打算打电话给谁。 在之前的一个问题中,我问过一些人说你不要调用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。

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

public ActionResult IPN() 
{
    Receive();  
    return Ok();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM