dart - PayPal Orders v2:订单的approvalurl(“checkoutnow?token..”)返回302重定向
问题描述
我正在努力使用 Orders v2 PayPal API 创建订单。
我有令牌,我使用这些标头发出请求以创建订单:
{
"intent": "CAPTURE",
"purchase_units": [{
"description": "Payment",
"amount": {
"value": 'X',
"currency_code": "EUR",
"breakdown": {
"item_total": {
"currency_code": "EUR",
"value": 'X'
},
}
},
"items": [{
"unit_amount": {
"currency_code": "EUR",
"value": 'X'
},
"quantity": "1",
"name": 'item name',
}]
}],
"application_context": {
"brand_name": "My brand name",
"locale": "it-IT",
"return_url": 'my-return-url',
}
}
订单已创建,我可以approveurl
让用户付款。
随着approveurl
我做这个电话:
try {
var response = await http.post(approveurl, body: jsonEncode({"payer_id": payerId}), headers: {
"content-type": "application/json",
'Authorization': 'Bearer ' + accessToken
});
final body = jsonDecode(response.body);
if (response.statusCode == 200) {
return body;
}
return null;
} catch (e) {
rethrow;
}
但我得到了这个回应:
url = "https://www.sandbox.paypal.com/checkoutnow?token=..."
payerId = "..."
accessToken = "..."
response = {Response}
request = {Request} POST https://www.sandbox.paypal.com/checkoutnow?token=...
statusCode = 302
reasonPhrase = "Found"
contentLength = 61
headers = {_InternalLinkedHashMap} size = 9
0 = {map entry} "paypal-debug-id" -> "95934918777a1"
1 = {map entry} "cache-control" -> "max-age=0, no-cache, no-store, must-revalidate"
2 = {map entry} "location" -> "/webapps/hermes?token=..."
3 = {map entry} "set-cookie" -> "X-PP-SILOVER=name%3DSANDBOX3.WEB.1%26silo_version%3D880%26app%3Dhermesnodeweb%26TIME%3D1595167415%26..."
4 = {map entry} "date" -> "Sun, 19 Jul 2020 14:03:35 GMT"
5 = {map entry} "vary" -> "Accept"
6 = {map entry} "strict-transport-security" -> "max-age=63072000"
7 = {map entry} "content-length" -> "61"
8 = {map entry} "content-type" -> "text/plain; charset=utf-8"
isRedirect = false
persistentConnection = true
而且response.body
是:
Found. Redirecting to /webapps/hermes?token=...
解决方案
使用approvalurl我做这个电话:
批准 URL 不是供您调用的。它是一个 Web URL,而不是 API URL。付款客户需要登录并批准付款。
但是,将他们重定向到它会是一个糟糕的网络体验。对于现代网页设计,您应该提供“在上下文中”批准,您的网站仍然在后台加载。这是如何做到这一点:https ://developer.paypal.com/demo/checkout/#/pattern/server
通过此集成,您无需自己阅读approval_url,只需在从createOrder 获取时返回Order id。
推荐阅读
- r - 合并多个连接的列
- javascript - 在父组件中反映(递归)的子组件中的计算
- html - 将 OTF 字体与 CSS 链接
- powershell - 使用 Get-Job 测试连接,但完全不同
- r - 为什么我的 R 代码在使用 foreach 时不是并行 CPU
- javascript - (SVG - stroke-dsaharray)当我开始动画时,我的路径分为两条路径
- libimobiledevice - autogen.sh - 没有这样的文件或目录
- r - 如何从 2 个二进制变量创建具有 3 个级别的新分类变量?
- javascript - Sharp JS:输入为由 base64 制成的缓冲区时出错
- javascript - 名称中带有方括号和空格的 JavaScript JSON 对象