代码之家  ›  专栏  ›  技术社区  ›  Ram Singh

IPN Listner使用.NET sdk PayPal?

  •  0
  • Ram Singh  · 技术社区  · 7 年前

    我正在使用.NETSDKPayPal。我不确定sdk是否提供了ipn侦听器功能。我试过下面的代码,它总是返回true,这是正确的方式来验证ipn与否,我试图在google上找到。但什么也没找到。

     var ipn = Request.Form.AllKeys.ToDictionary(k => k, k => Request[k]);
    
            var param = Request.BinaryRead(Request.ContentLength);
            PayPal.IPNMessage iPNMessage = new PayPal.IPNMessage(ipn, param);
            PayPal.IPNMessage service = null;
    
            try
            {
                Dictionary<string, string> configurationMap = Configuration.GetAcctAndConfig();
                service = new PayPal.IPNMessage(configurationMap, param);
                var response = service.Validate();
            }
            catch (System.Exception ex)
            {
            }
    

    当我尝试使用httpwebrequest时,它总是为每个事务发送无效消息:

    这是我的代码:

     public HttpStatusCodeResult Receive()
        {
            LogRequest(Request);
            Task.Run(() => VerifyTask(Request));
            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");
                verificationRequest.Method = "POST";
                verificationRequest.ContentType = "application/x-www-form-urlencoded";
                var param = Request.BinaryRead(ipnRequest.ContentLength);
                var strRequest = Encoding.ASCII.GetString(param);
                strRequest = "cmd=_notify-validate&" + strRequest;
                verificationRequest.ContentLength = strRequest.Length;
                var streamOut = new StreamWriter(verificationRequest.GetRequestStream(), Encoding.ASCII);
                streamOut.Write(strRequest);
                streamOut.Close();
                var streamIn = new StreamReader(verificationRequest.GetResponse().GetResponseStream());
                verificationResponse = streamIn.ReadToEnd();
                streamIn.Close();
            }
            catch (Exception exception)
            {
            }
            ProcessVerificationResponse(verificationResponse);
        }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   PhonicUK    7 年前

    你必须在PayPals网站上使用IPN测试工具,除非你这样做,否则PayPal终端上没有匹配的交易,所以一切都将显示为无效。您当前正在使用沙盒端点,因此这将只验证来自测试人员的请求。

    对于使用实际付款进行的实时交易,您不使用沙盒终结点。

    推荐文章