正在加载···
AI摘要
HunYuan-Lite

一、添加web窗体接收通知

用于接收第三方支付回调通知,请求链接例如:https://codeobservatory.cn/Paypal/PaypalNotifyPage.aspx

c# .net PayPal支付配置验证

二、使用步骤

1.引入bll

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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配置文件

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<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# .net PayPal支付配置验证

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

c# .net PayPal支付配置验证

3、代码

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
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

c# .net PayPal支付配置验证
c# .net PayPal支付配置验证
c# .net PayPal支付配置验证

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

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

c# .net PayPal支付配置验证

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