简体   繁体   English

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

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

This is paypals sample code for the ipn. 这是ipn的paypals示例代码。 I have been on it for a few days now and am getting no where. 我已经在这几天了,而且我没有在哪里。 I am not sure what i am meant to call. 我不确定我打算打电话给谁。 In a previous question i asked some said you dont call the Receive method. 在之前的一个问题中,我问过一些人说你不要调用Receive方法。 So this then lead me on to think how will Paypal know where to go. 所以这引导我思考Paypal将如何知道去哪里。 (ie what method to use.) (即使用什么方法。)

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
        }
    }
}

There is no ActionResult so how am i meant to give a URL. 没有ActionResult,所以我打算如何提供一个URL。 I thought of this but it seems to return invalid 我想到了这个,但它似乎返回无效

public ActionResult IPN() {
    Receive()


}

I have asked previous questions but still cant seem to get my head around this IPN. 我已经问过以前的问题,但似乎仍然无法理解这个IPN。

For anyone that sees this, this was an inexperienced me and all i had to do was return Ok() so my action result would look like the below: 对于任何看到这个的人来说,这是一个没有经验的我,我所要做的就是返回Ok()所以我的行动结果如下所示:

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

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

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