c# - 贝宝订单请求永远不会回来
问题描述
亲爱的,我从 payPal 开始,我尝试实现 SDK 提供的标准示例(c#,FW 4.6.1)
在我的服务器端方法下面
public async static Task<PayPalHttp.HttpResponse> CreateOrder()
{
OrdersCreateRequest oRequest = new OrdersCreateRequest();
oRequest.Prefer("return=representation");
//System.Net.ServicePointManager.Expect100Continue = true;
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
oRequest.RequestBody(BuildRequestBodyWithMinimumFields());
//3. Call PayPal to set up a transaction
PayPalHttp.HttpClient oClient = PayPalClient.client();
oClient.SetConnectTimeout(new TimeSpan(0, 0, 0, 10, 0));
var oResponse = await oClient.Execute(oRequest);
var result = oResponse.Result<Order>();
return oResponse;
}
在这里 jquery 调用
paypal.Buttons({
style: {
shape: 'rect',
color: 'blue',
layout: 'vertical',
label: 'pay',
},
createOrder: function () {
return fetch('/shop/paypal_test.aspx/CreateOrder', {
method: 'post',
headers: {
'content-type': 'application/json'
}
}).then(function (res) {
return res.json();
}).then(function (data) {
return data.orderID; // Use the same key name for order ID on the client and server
});
}
}).render('#paypal-button-container');
问题是对 oClient.Execute 的响应永远不会回来。
PayPalClient 完全按照 SDK 示例构建。
查看 PayPal API 调用日志,API 被正确调用,并标有绿旗。
你有什么想法吗?
先感谢您
解决方案
亲爱的,我终于找到了解决办法。
如前所述,在 API 调用后,在 developer.paypal 网站上,相关调用已标有绿色标志,表示调用已正确进行。
然后,我研究了服务器代码,以及如何管理任务。
异步调用嵌入在私有方法中,并由“等待”响应的同步方法调用。
这样一切正常
这里的代码片段允许例程工作而不是停止到“client.Execute(oRequest)”。
[WebMethod(EnableSession = true)]
public static PayPalCheckoutSdk.Orders.Order SetupTransaction()
{
data.tessutigenovataddei.com.Order oOrder = null;
//save order in database.
oOrder = CreateOrderWithPaypal();
OrdersCreateRequest oRequest = new OrdersCreateRequest();
oRequest.Prefer("return=representation");
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
oRequest.RequestBody(BuildRequestBodyWithMinimumFields(oOrder));
PayPalHttp.HttpClient oClient = PayPalClient.client();
oClient.SetConnectTimeout(new TimeSpan(0, 0, 0, 10, 0));
var oResponseTask = SetupTransactionAsync(oClient, oRequest);
oResponseTask.Wait();
return oResponseTask.Result.Result<PayPalCheckoutSdk.Orders.Order>();
}
private async static Task<PayPalHttp.HttpResponse> SetupTransactionAsync(PayPalHttp.HttpClient client, OrdersCreateRequest request)
{
SynchronizationContext.SetSynchronizationContext(null);
PayPalHttp.HttpResponse oResponse = await client.Execute(request);
return oResponse;
}
谢谢你的支持
推荐阅读
- c# - 创建一个页面后如何将自动生成的 GUID 转移到另一个页面
- python - 无法使用 BeautifulSoup find_all 或 Pandas.read_html 函数从表中抓取数据
- python - 如何从 jupyter notebook 运行 tf.test.TestCase - UnrecognizedFlagError: Unknown command line flag 'f'
- office-js - 强制 Office 2016 加载项使用 Edge 代替 IE
- reactjs - 在打字稿中设置反应类组件状态的默认值
- java - 将 Spring Cloud 版本从 Edgware 升级到 Hoxton
- python - 使用 for 循环打印名称
- rust - 为什么弧
> 需要 T:同步 + 发送? - macos - 如何在 mac 上安装 clang 11
- functional-programming - 无法在 agda 中安装默认库