在 Sandbox 中使用 PayPal .NET SDK 验证 PayPal Webhook 调用
Validating PayPal Webhook calls with PayPal .NET SDK in Sandbox
我一直在尝试设置 PayPal Webhooks(在沙盒模式下)以接收有关拒绝和成功付款的通知。我的问题是我无法进行验证。关于我的尝试的一些细节:
- 该应用程序是一个 OWIN 自托管网站 API 2.
- 托管为 Azure Web 应用程序,也在 Azure 上进行了测试。
- 我将 Paypal 仪表板中的 Paypal Webhook 接收器 URL 设置为我在 Azure 上的端点的 URL。
- 我使用 Paypal 仪表板中的 Paypal Webhooks 模拟器向 Azure 端点发送消息。
我尝试通过两种方式监听 Webhook 调用:
- ASP.NET Webhook 接收器 (http://blogs.msdn.com/b/webdev/archive/2015/09/04/introducing-microsoft-asp-net-webhooks-preview.aspx),它不起作用。我收到错误消息 "WebHook validation failed: "
尝试创建 Web API 端点来接收和验证请求,但也没有用。代码在这里:
[HttpPost]
public async Task<IHttpActionResult> PaymentCaptureCompleted()
{
// Get the received request's headers
NameValueCollection nvc = new NameValueCollection();
foreach (var item in Request.Headers)
{
nvc.Add(item.Key, string.Join(",", item.Value));
}
// Get the received request's body
var requestBody = await Request.Content.ReadAsStringAsync();
var isValid = WebhookEvent.ValidateReceivedEvent(Api, nvc, requestBody, ConfigurationManager.AppSettings["paypal.webhook.id"]);
if (isValid)
{
return Ok();
}
else
{
return BadRequest("Could not validate request");
}
}
当然还有很多细节,但我不确定需要多少信息才能回答我的问题。让我知道你需要什么,我会编辑这个问题。
请参考 PayPal Dot Net SDK 获取代码示例。 https://github.com/paypal/PayPal-NET-SDK
另外如果你的模拟器不工作,排除webhook或azure的配置有问题,你可能需要使用Runscope。 Ypu 可以将 Runscope 存储桶配置为 webhook 端点,如果您在那里收到 webhook 通知,您可能需要在 Azure 配置中进行更改。
真的不要去看文档。它是旧的,但对象仍然很好。
您可以为此使用 WebhookEvent class。
只需在您的控制器中使用此操作即可。
public JsonResult Index(WebhookEvent event)
{
// event has all the data
return Json(new { success = true });
}
验证不适用于 IPN 沙箱和来自模拟的 Webhook 事件。它在 PayPal 文档中有说明。验证仅适用于 PayPal 的生产环境。
将 WebhookEvent.ValidateReceivedEvent 包裹在 try catch 中。如果调用失败,它可以挂起而不用挂起。异常将向您显示错误。
try
{
var isValid = WebhookEvent.ValidateReceivedEvent(apiContext, nv, requestBody, hookId);
}
catch(Exception e)
{
}
在我的例子中,异常显示“无法加载受信任的证书”
我一直在尝试设置 PayPal Webhooks(在沙盒模式下)以接收有关拒绝和成功付款的通知。我的问题是我无法进行验证。关于我的尝试的一些细节:
- 该应用程序是一个 OWIN 自托管网站 API 2.
- 托管为 Azure Web 应用程序,也在 Azure 上进行了测试。
- 我将 Paypal 仪表板中的 Paypal Webhook 接收器 URL 设置为我在 Azure 上的端点的 URL。
- 我使用 Paypal 仪表板中的 Paypal Webhooks 模拟器向 Azure 端点发送消息。
我尝试通过两种方式监听 Webhook 调用:
- ASP.NET Webhook 接收器 (http://blogs.msdn.com/b/webdev/archive/2015/09/04/introducing-microsoft-asp-net-webhooks-preview.aspx),它不起作用。我收到错误消息 "WebHook validation failed: "
尝试创建 Web API 端点来接收和验证请求,但也没有用。代码在这里:
[HttpPost] public async Task<IHttpActionResult> PaymentCaptureCompleted() { // Get the received request's headers NameValueCollection nvc = new NameValueCollection(); foreach (var item in Request.Headers) { nvc.Add(item.Key, string.Join(",", item.Value)); } // Get the received request's body var requestBody = await Request.Content.ReadAsStringAsync(); var isValid = WebhookEvent.ValidateReceivedEvent(Api, nvc, requestBody, ConfigurationManager.AppSettings["paypal.webhook.id"]); if (isValid) { return Ok(); } else { return BadRequest("Could not validate request"); } }
当然还有很多细节,但我不确定需要多少信息才能回答我的问题。让我知道你需要什么,我会编辑这个问题。
请参考 PayPal Dot Net SDK 获取代码示例。 https://github.com/paypal/PayPal-NET-SDK
另外如果你的模拟器不工作,排除webhook或azure的配置有问题,你可能需要使用Runscope。 Ypu 可以将 Runscope 存储桶配置为 webhook 端点,如果您在那里收到 webhook 通知,您可能需要在 Azure 配置中进行更改。
真的不要去看文档。它是旧的,但对象仍然很好。 您可以为此使用 WebhookEvent class。 只需在您的控制器中使用此操作即可。
public JsonResult Index(WebhookEvent event)
{
// event has all the data
return Json(new { success = true });
}
验证不适用于 IPN 沙箱和来自模拟的 Webhook 事件。它在 PayPal 文档中有说明。验证仅适用于 PayPal 的生产环境。
将 WebhookEvent.ValidateReceivedEvent 包裹在 try catch 中。如果调用失败,它可以挂起而不用挂起。异常将向您显示错误。
try
{
var isValid = WebhookEvent.ValidateReceivedEvent(apiContext, nv, requestBody, hookId);
}
catch(Exception e)
{
}
在我的例子中,异常显示“无法加载受信任的证书”