PayPal:创建和获取订单
Posted
技术标签:
【中文标题】PayPal:创建和获取订单【英文标题】:PayPal: Create and Capture Order 【发布时间】:2020-02-10 22:34:17 【问题描述】:我正在关注此示例 (https://developer.paypal.com/docs/checkout/reference/server-integration/set-up-transaction/#on-the-server) 以让 PayPal 在服务器上运行。
我已完成创建订单,但它没有同时捕获订单。是否可以同时创建和捕获订单?
var request = new OrdersCreateRequest();
request.Prefer("return=representation");
request.RequestBody(BuildRequestBody());
var response = await PayPalClient.client().Execute(request); //this will only create the order. How to capture it at the same time?
当我试图捕捉订单时:
//continue from above
var result = response.Result<Order>();
var requestCapture = new OrdersCaptureRequest(result.Id);
requestCapture.Prefer("return=representation");
requestCapture.RequestBody(new OrderActionRequest());
response = await PayPalClient.Client().Execute(requestCapture);
我得到错误:
"name":"UNPROCESSABLE_ENTITY",
"details": [
"issue":"ORDER_NOT_APPROVED",
"description":"Payer has not yet approved the Order for payment. Please redirect the payer to the 'rel':'approve' url returned as part of the HATEOAS links within the Create Order call or provide a valid payment_source in the request."
],
"message": "The requested action could not be performed, semantically incorrect, or failed business validation.",
"links": [
"href": "https://developer.paypal.com/docs/api/orders/v2/#error-ORDER_NOT_APPROVED",
"rel": "information_link",
"method": "GET"
]
我的问题是,是否可以同时同时创建订单、授权和捕获?
谢谢
【问题讨论】:
我什至无法从 var response = await PayPalClient.client().Execute(request) 得到回复; :( 它应该给你某种响应,即使它不起作用(例如超时)。你得到了什么回应? 这就是我没有接到这个电话的原因,var response = await PayPalHttpClient(currentShoppingCart).Execute(request);去并且永远不会回来,我可以在沙盒 API 调用中看到带有橙色感叹号警告的请求,但不知道问题是什么:( 挂起吗?这可能不是因为贝宝。可能是因为死锁...你是通过async
函数调用这个函数还是创建Task
来调用await PayPalClient.client().Execute(request);
?
对不起,为了一些更重要的工作,我把它停了一会儿,所以基本上有一个异步任务,如果它有成功状态,我已经设置它返回订单。当我离开时,它注意到在我将货币设置为 AUD 时出现错误,并且所有价格也必须为 AUD,但即使我更改了此设置,paypal 沙箱中的请求现在变为绿色(而不是橙色) 直到至少大约 30 多秒才恢复订单,这不切实际:(
【参考方案1】:
在使用OrdersCaptureRequest
之前,您必须从OrdersCreateRequest
的响应中重定向到 [rel] => 批准链接:
$client = PayPalClient::client();
$response = $client->execute($request);
$res_links = $response->result->links;
$approve_index = array_search('approve',array_column($res_links,'rel'));
redirect($res_links[$approve_index]->href,'location',302);`
然后使用OrdersCaptureRequest
。
【讨论】:
【参考方案2】:我认为即使在沙盒环境中,也无法在 PayPal 中同时创建、授权和捕获订单。您必须分别执行每个步骤。
关于ORDER_NOT_APPROVED
错误,您可以像@raj-kamal 所说的那样让用户批准订单,或者您可以制作Paypal-Auth-Assertion
并将其发送到标题中。此标头是一个 API 客户端提供的 JSON Web Token (JWT) 断言,用于识别商家。
参考:https://developer.paypal.com/docs/api/reference/api-requests/#paypal-auth-assertion
注意:
要使用此标头,您必须获得代表商家的同意。
【讨论】:
以上是关于PayPal:创建和获取订单的主要内容,如果未能解决你的问题,请参考以下文章