文章摘要:本篇文章介绍了c# .net使用Paypal支付Webhooks回调验证的流程,零基础可直接上手,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下。
c# .net PayPal支付配置验证(附代码)
发布时间:2022-08-07 作者:小沈子 分类:
一、添加web窗体接收通知
二、使用步骤
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回调请求
本文到这就结束了,希望对您有所帮助。
点击排行
标签云
-
C#
seo
SQLserver
IIS
.NET
SSL
程序员
VS
编程语言
https
微信小程序
jQuery
服务器
个人博客
网站关键词排名
301
.net8
http
KOL
C#集合
.NET框架
命名空间
面向对象编程
异常处理
异步编程
设计模式
编程学习网站
百度分享js
关键词研究工具
网页加载速度
外部链接优化
异步加载
snv
腾讯元器
AI智能体
C#接口
装潢设计
响应式
自动备份
个人网站
WPF
数据库优化
winform
UI
编程
Ngrok
内网穿透
开源框架
NanUI
网站
清明节
html
生成img
nginx
签到
2023跨年
快捷方式
标签打印
icon图标
博客模板
Web前端框架
JavaScript
TortoiseSVN
VS2019
数据库自动同步工具
Serv-U
.NETCore
微信接口
数组去重
404页面
保存图片
QQ
幸福
鸡汤
小沈子
超实用工具箱
Layui
51劳动节
C#面试题
疫情
数据库
Queue队列
网页
挖呀挖