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

二、使用步骤
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>
<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" />
</settings>
</paypal>
|
- 该处用于获取config 和accessToken的值。
- clientId和clientSecret获取方式:
- a、登录: PayPal Developer
- b、选择Sandbox,创建app

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

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();
string PaymentStatus = obj["resource"]["status"].ToString();
if (PaymentStatus == "COMPLETED")
{
}
else
{
}
}
}
catch (Exception ex)
{
}
page.Response.End();
page.Response.Close();
}
public string VerificationResponse(HttpRequest ipnRequest, string strRequest)
{
try
{
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";
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回调请求

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