使用PayPal Webhooks时,WebClient请求失败而HttpClient成功的原因排查
PayPal Webhook签名验证:WebClient调用失败而HttpClient成功的解决方法
问题分析
同样的请求JSON和access_token,使用WebClient调用PayPal的webhook签名验证接口始终返回FAILURE,但HttpClient调用正常返回SUCCESS,核心差异在于两者对请求头和内容编码的处理细节不同:
HttpClient的StringContent会自动在Content-Type头中追加; charset=utf-8,明确告知服务器内容的编码格式WebClient仅设置了content-type: application/json,未指定字符编码,PayPal的验证接口可能对编码标识有严格要求- 此外,
WebClient的UploadString在某些场景下可能对字符串做额外转义,导致请求内容与预期不符
修复后的WebClient代码
var client = new WebClient(); client.Headers.Add("authorization", "Bearer " + accessToken); // 明确指定Content-Type的字符编码 client.Headers.Add("content-type", "application/json; charset=utf-8"); client.Encoding = Encoding.UTF8; string response = client.UploadString("https://api.sandbox.paypal.com/v1/notifications/verify-webhook-signature", "POST", paypalVerifyRequestJsonString);
额外排查建议
- 抓包对比两个请求的完整内容(包括请求头、请求体),确认是否存在其他差异(比如请求体的编码、字符转义)
- 检查
paypalVerifyRequestJsonString是否包含特殊字符,WebClient是否对其做了额外处理(比如自动转义Unicode字符)
内容的提问来源于stack exchange,提问作者Programmer Joe
相关产品推荐
相关产品推荐

