当前位置:首页 > 博客人生 > 技术分享

文章摘要:本篇文章介绍了c# .net使用Paypal支付Webhooks回调验证的流程,零基础可直接上手,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。

c# .net PayPal支付配置验证(附代码)

发布时间:2022-08-07 作者:小沈子 分类: PC支付

一、添加web窗体接收通知

用于接收第三方支付回调通知,请求链接例如:https://editor.csdn.net/Paypal/PaypalNotifyPage.aspx
在这里插入图片描述

二、使用步骤

1.引入bll

代码如下:

   using Newtonsoft.Json.Linq;

   using PayPal.Api; 

   using System; 

   using System.IO;

   using System.Net; 

   using System.Text;

   using System.Web;

   using System.Web.UI;

2.config配置文件

代码如下:

<paypal>

    <settings>

      <!-- 将模式替换为“ security-test-sandbox”以测试您的服务器是否支持TLSv1.2。 有关更多信息,请遵循README说明。-->

      <add name="connectionTimeout" value="360000" />

      <add name="requestRetries" value="1" />

      <!-- 测试 -->

      <add name="mode" value="sandbox" />

      <add name="clientId" value="ASx_gEpY2EynTh_SfDGIWzo7fSVJlrb8YDxr_X1YLz_SXU5Q5eTwC9_0r3d0rTrhyKPEe2lgwlAzb2Tc" />

      <add name="clientSecret" value="EGKDuKiVXK0TX3996cuHBba8UmEA29q9W3yoCfB_TAHS5KypxfirBvHrqUc-8u7CPy-lzFY4VaWF6L04" />

      <!-- 正式 -->

      <!--<add name="mode" value="live" />

      <add name="clientId" value="" />

      <add name="clientSecret" value="" />-->

    </settings>

 </paypal>

1、该处用于获取config 和accessToken的值。

2、clientId和clientSecret获取方式:

a、登录: PayPal Developer

b、选择Sandbox,创建app

在这里插入图片描述

c、点击进去就能看到 clientId和clientSecret 值

在这里插入图片描述

3.代码

代码如下:

public Page page { get; set; }

        public PaypalService(Page page)

        {

            this.page = page;

        }

        public void PaypalPayNotify()

        {

            string strRequest = "";

            try

            {

                page.Response.Write("200 OK");


                var param = page.Request.BinaryRead(page.Request.ContentLength);

                strRequest = Encoding.ASCII.GetString(param);

                if (VerificationResponse(page.Request, strRequest).Equals("SUCCESS"))

                {

                    WriteLog("执行业务操作VERIFIED");


                    JObject obj = JObject.Parse(strRequest);


                    string AmountTotal = obj["resource"]["amount"]["value"].ToString();//金额

                    string OrderNumber = obj["resource"]["invoice_id"].ToString();//订单号

                    string PayID = obj["resource"]["id"].ToString();//Paypal支付订单号

                    string PaymentStatus = obj["resource"]["status"].ToString();//交易状态

                    if (PaymentStatus == "COMPLETED")

                    {

                        //更新业务

                    }

                    else

                    {

                       //打印日志输出错误

                       // " Paypal更新支付出错,交易状态不正确!PaymentStatus:" + PaymentStatus

                    }

                }

            }

            catch (Exception ex)

            {

                //捕获异常,打印日志输出错误

            }

            page.Response.End();

            page.Response.Close();

        }


        /// <summary>

        /// Webhooks回调响应验证

        /// </summary>

        /// <param name="ipnRequest"></param>

        /// <param name="strRequest"></param>

        /// <returns></returns>

        public string VerificationResponse(HttpRequest ipnRequest, string strRequest)

        {

            try

            {

                //处理HttpWebRequest访问https有安全证书的问题( 请求被中止: 未能创建 SSL/TLS 安全通道。)

                ServicePointManager.ServerCertificateValidationCallback += (s, cert, chain, sslPolicyErrors) => true;

                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

                System.Net.ServicePointManager.Expect100Continue = false;

                

                var url = "https://api-m.sandbox.paypal.com/v1/notifications/verify-webhook-signature";//沙盒webhook回调通知


                string transmissionId = ipnRequest.Headers["PAYPAL-TRANSMISSION-ID"];

                string transmissionTime = ipnRequest.Headers["PAYPAL-TRANSMISSION-TIME"];

                string certUrl = ipnRequest.Headers["PAYPAL-CERT-URL"];

                string signatureAlgorithm = ipnRequest.Headers["PAYPAL-AUTH-ALGO"];

                string transmissionSig = ipnRequest.Headers["PAYPAL-TRANSMISSION-SIG"];

                var webhookId = "9XY05847MO097611P";


                var dataStr = "{\"transmission_id\":\"" + transmissionId + "\",\"transmission_time\":\"" + transmissionTime + "\",\"cert_url\":\"" + certUrl + "\",\"auth_algo\":\"" + signatureAlgorithm + "\"" +

                        ",\"transmission_sig\":\"" + transmissionSig + "\",\"webhook_id\":\"" + webhookId + "\",\"webhook_event\":" + strRequest + "}";

               

                var config = ConfigManager.Instance.GetProperties();//读取配置文件

                var accessToken = new OAuthTokenCredential(config).GetAccessToken();

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

                request.Method = "POST";

                request.ContentType = "application/json";

                request.Headers.Add("Authorization", accessToken);


                //将有效负载附加到验证请求

                var streamOut = new StreamWriter(request.GetRequestStream(), Encoding.ASCII);

                streamOut.Write(dataStr);

                streamOut.Close();


                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                Stream myResponseStream = response.GetResponseStream();

                StreamReader myStreamReader = new StreamReader(myResponseStream);

                string retString = myStreamReader.ReadToEnd();

                myStreamReader.Close();

                myResponseStream.Close();


                JObject obj = JObject.Parse(retString);

                var VerificationStatus = obj["verification_status"].ToString();


                return VerificationStatus;

            }

            catch (Exception exception)

            {

                //捕获异常,打印日志输出错误

                return "";

            }

        }

1、该处用于支付Webhooks回调验证。

2、官方文档: 如何使用网络钩子模拟器;验证 webhook 签名api:/v1/notifications/verify-webhook-signature;

3、添加网络钩子步骤:

a、点击打开新建的app,添加Webhooks

在这里插入图片描述在这里插入图片描述在这里插入图片描述

b、保存后就可以获取到WebhookId了

4、也可以模拟Webhooks回调请求

在这里插入图片描述

本文到这就结束了,希望对您有所帮助。


上一篇: Asp.Net 404页面设置,设置错误页面自动跳转


下一篇: javascript中怎么找父级标签和子级标签

赞助打赏

  • 支付宝扫码
  • 微信扫码