- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我尝试按照此处的说明进行操作:https://developer.paypal.com/docs/checkout/how-to/server-integration/#将 paypal checkout 集成到我的网站中(由 Nodejs-krakenjs、Angularjs 开发)
// FOR PAYPAL PAYMENT
function renderPaypalButton() {
paypal.Button.render({
env: 'sandbox', // Or 'production'
// Set up the payment:
// 1. Add a payment callback
payment: function (data, actions) {
// 2. Make a request to your server
console.log('Make a request to your server');
return actions.request.post('/file/createPayment', {
//_token: csrf_token()
}).then(function (res) {
console.log('return res id');
// 3. Return res.id from the response
return res.id;
});
},
// Execute the payment:
// 1. Add an onAuthorize callback
onAuthorize: function (data, actions) {
// 2. Make a request to your server
return actions.request.post('/file/executePayment', {
paymentID: data.paymentID,
payerID: data.payerID
})
.then(function (res) {
// 3. Show the buyer a confirmation message.
alert(res);
console.log(res);
});
}
}, '#paypal-button');
}
服务器端:
// Set up the payment:
// 1. Set up a URL to handle requests from the PayPal button
router.post('/createPayment', function (req, res) {
console.log('aa');
// 2. Call /v1/payments/payment to set up the payment
request.post(PAYPAL_API + '/v1/payments/payment',
{
auth:
{
user: CLIENT,
pass: SECRET
},
body:
{
intent: 'sale',
payer:
{
payment_method: 'paypal'
},
transactions: [
{
amount:
{
total: '5.99',
currency: 'USD'
}
}],
redirect_urls:
{
return_url: 'http://localhost:1272',
cancel_url: 'http://localhost:1272'
}
},
json: true
}, function (err, response) {
if (err) {
console.error(err);
return res.sendStatus(500);
}
// 3. Return the payment ID to the client
res.json(
{
id: response.body.id
});
});
});
// Execute the payment:
// 1. Set up a URL to handle requests from the PayPal button.
router.post('/executePayment', function (req, res) {
// 2. Get the payment ID and the payer ID from the request body.
var paymentID = req.body.paymentID;
var payerID = req.body.payerID;
// 3. Call /v1/payments/payment/PAY-XXX/execute to finalize the payment.
request.post(PAYPAL_API + '/v1/payments/payment/' + paymentID + '/execute',
{
auth:
{
user: CLIENT,
pass: SECRET
},
body:
{
payer_id: payerID,
transactions: [
{
amount:
{
total: '10.99',
currency: 'USD'
}
}]
},
json: true
},
function (err, response) {
if (err) {
console.error(err);
return res.sendStatus(500);
}
// 4. Return a success response to the client
res.json(
{
status: 'success'
});
});
});
paypal 库在 index.html 中加载:
<script src="https://www.paypalobjects.com/api/checkout.js"></script>
并且在模态形式中集成了 paypal 结帐按钮:
<div id="paypal-button"></div>
<script>
setTimeout(renderPaypalButton(), 3000);
</script>
Paypal-checkout 按钮被渲染并显示在模态上,但是点击按钮后,Palpay 登录模态出现几秒钟然后消失,出现“错误:CSRF token 丢失”:
POST http://localhost:1272/file/createPayment 500 (Internal Server Error) Uncaught Error: Error: Request to post /file/createPayment failed with 500 error. Correlation id: unknown
URL /file/createPayment
出现以下错误 错误:缺少 CSRF token
。
at XMLHttpRequest.<anonymous> (https://www.paypalobjects.com/api/checkout.js:14010:39)
at Object._RECEIVE_MESSAGE_TYPE.(anonymous function) [as postrobot_message_response] (https://www.paypalobjects.com/api/checkout.js:2569:31)
at receiveMessage (https://www.paypalobjects.com/api/checkout.js:2614:60)
at messageListener (https://www.paypalobjects.com/api/checkout.js:2635:13)
at XMLHttpRequest.<anonymous> (https://www.paypalobjects.com/api/checkout.js:14010:39)
at Object._RECEIVE_MESSAGE_TYPE.(anonymous function) [as postrobot_message_response] (https://www.paypalobjects.com/api/checkout.js:2569:31)
at receiveMessage (https://www.paypalobjects.com/api/checkout.js:2614:60)
at messageListener (https://www.paypalobjects.com/api/checkout.js:2635:13)
at deserializeError (https://www.paypalobjects.com/api/checkout.js:3302:23)
at https://www.paypalobjects.com/api/checkout.js:3323:270
at https://www.paypalobjects.com/api/checkout.js:3052:30
at eachArray (https://www.paypalobjects.com/api/checkout.js:3035:51)
at each (https://www.paypalobjects.com/api/checkout.js:3041:35)
at replaceObject (https://www.paypalobjects.com/api/checkout.js:3051:13)
at https://www.paypalobjects.com/api/checkout.js:3053:169
at eachObject (https://www.paypalobjects.com/api/checkout.js:3038:65)
at each (https://www.paypalobjects.com/api/checkout.js:3041:144)
at replaceObject (https://www.paypalobjects.com/api/checkout.js:3051:13)
你们都可以帮助我。我不明白是什么让 Csrf 在这里。谢谢大家!!
最佳答案
The example code shown in the PayPal documentation does not work. You
必须向它传递一个 QAuth 访问 token ,而不是 CLIENT/SECRET。我得到了密码 可以工作,但必须对其进行相当大的更改。
Here's the node.js server code:
var express = require('express');
var request = require('request');
var app = express();
var port = 3000;
var bodyParser = require('body-parser');
app.use(bodyParser.json());
// support json encoded bodies
app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies
var PAYPAL_API = 'https://api.sandbox.paypal.com';
app.post('/my-api/create-payment/', function(req, res)
{
// Set up the payment:
// 1. Set up a URL to handle requests from the PayPal button
// 2. Allow cross-domain
res.setHeader('access-control-allow-origin', '*');
request.post(PAYPAL_API + '/v1/payments/payment',
{
headers: {
Authorization: 'Bearer <your access token>'
},
body:
{
intent: 'sale',
payer:
{
payment_method: 'paypal'
},
transactions: [
{
amount:
{
total: '5.99',
currency: 'USD'
}
}],
redirect_urls:
{
return_url: 'https://www.yourwebsite.com',
cancel_url: 'https://www.yourwebsite.com'
}
},
json: true
}, function(err, response)
{
if (err)
{
console.error(err);
return res.sendStatus(500);
}
// 3. Return the payment ID to the client
res.json(
{
id: response.body.id
});
});
})
// Execute the payment:
// 1. Set up a URL to handle requests from the PayPal button.
app.post('/my-api/execute-payment/', function(req, res)
{
// 2. Get the payment ID and the payer ID from the request body.
var paymentID = req.body.paymentID;
var payerID = req.body.payerID;
res.setHeader('access-control-allow-origin', '*');
// 3. Call /v1/payments/payment/PAY-XXX/execute to finalize the payment.
request.post(PAYPAL_API + '/v1/payments/payment/' + paymentID +
'/execute',
{
headers: {
Authorization: 'Bearer <your access token>'
},
body:
{
payer_id: payerID
},
json: true
},
function(err, response)
{
if (err)
{
console.error(err);
return res.sendStatus(500);
}
// 4. Return a success response to the client
res.json(
{
status: 'success'
});
});
}).listen(3000, function()
{
console.log('Server listening at http://localhost:3000/');
});
Here's the HTML:
<!DOCTYPE html>
<html>
<title>PayPal Client Test</title>
<body>
<p>This is the PayPal button for my client sandbox test</p>
<script src="https://www.paypalobjects.com/api/checkout.js"></script>
<div id="paypal-button"></div>
<script>
paypal.Button.render({
env: 'sandbox', // Or 'production'
// Set up the payment:
// 1. Add a payment callback
payment: function(data, actions) {
// 2. Make a request to your server
return actions.request.post('http://localhost:3000/my-api/create-payment/')
.then(function(res) {
// 3. Return res.id from the response
//alert("Res ID="+res.id);
return res.id;
});
},
// Execute the payment:
// 1. Add an onAuthorize callback
onAuthorize: function(data, actions) {
return actions.request.post('http://localhost:3000/my-api/execute-payment/', {
paymentID: data.paymentID,
payerID: data.payerID
})
.then(function(res) {
alert("Payment made!");
});
},
onError: function (err) {
alert("err="+err);
}
}, '#paypal-button');
</script>
</body>
</html>
关于paypal-sandbox - Nodejs-Krakenjs : PayPal Checkout Server Integration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52069901/
Paypal 最近更改了他们在 developers.paypal 中的用户界面,因此,我找不到可以登录旧 SANDBOX 帐户的位置。 在新的 developer.paypal.com 中,在 Ap
我正在尝试使用 loadPhotoForSize: withCompletionHandler: 为游戏中心的 friend 获取头像但它一直在抛出GKErrorDomain Code=3 "The
我在 paypal developer 中创建了多个沙箱帐户。我已在所有这些帐户上启用 business pro,以便接收直接付款。但是,对于在美国以外的国家/地区创建的商业专业账户,发送直接付款的
我能够使用 node 用户并使用 --cap-add=SYS_ADMIN 设置沙箱使其正常工作,但 AWS ECS Fargate 不支持添加 SYS_ADMIN 作为 linux 参数。因此,我试图
我正在尝试使用 scotty 创建一个简单网站的教程,但是当我尝试命令“cabal sandbox init”时出现错误: cabal: unrecognised command: sandbox (
我想制作一个非常基本的 Excel 插件。但是,在 Excel Online 中加载 xml 文件后出现错误: 有人知道如何修复这些错误吗? 这是 xml 文件: 2145a915-4e7b-
我使用 Ambari 运行了 pig 服务检查,但它失败了并出现以下异常。 2016-04-09 20:35:19,399 [JobControl] INFO org.apache.hadoop.m
我正在尝试将一个Firebase函数部署到使用Pupeteer的FireBase项目中,我让它在我的本地计算机上运行,但当它尝试在FireBase上运行时,我收到以下错误:。我在网上看到其他人说要使用
我已阅读 Wikipedia article ,但我不太确定它的含义,以及它与版本控制有多么相似。 如果有人能用非常简单的术语解释什么是沙箱,那将会很有帮助。 最佳答案 A sandpit or sa
重新访问一个一个月左右没打开的项目,发现之前设置的沙箱账户无法访问,访问; http://admin.wechat.com/debug/cgi-bin/sandbox?t=sandbox/login
Apple 在 WWDC 17 上推出了 ARKit,他们还在 Xcode 9 中添加了一个名为“增强现实应用程序”的新项目模板,它基本上应该是 WWDC 主题演讲或类似事件期间的演示应用程序。 但是
我正在尝试使用 How can I create a secure Lua sandbox?构建我自己的泄漏沙箱。 我正在尝试创建一个 Lua 沙箱,其中一些 Lua 函数可以访问沙箱外的其他一些 L
Hy 这里是一个例子 Example 为什么当我使用 沙箱我看不到播放器..我想使用沙箱来阻止弹出窗口,但看起来如果我使用它我看不到播放器 有没有allow-objects ? 我在那个页面上也有一
我对新的 PayPal 开发人员网站和 Sandbox 感到悲痛。我在 Developer 中创建了一个个人帐户,但我添加的资金没有显示出来。我读过一篇论坛帖子,说您必须通过 Sandbox 登录来添
在沙盒模式下查询 Instagram API 以获取与 token 相关的用户喜欢的媒体,我没有得到任何数据。当然,用户被授权在沙盒中使用该应用程序。 获取:https://api.instagram
我正在开发记录用户音频的应用程序,并在表格 View 的另一个屏幕上显示从此应用程序制作的所有早期录音。单击特定行时,必须播放录音。我如何实现这一目标,是否有任何资源可以帮助我实现同样的目标? 我的代
我有运行 Express Checkout 的沙箱。当我在我的沙盒中使用卖家账户进行测试付款时,一切正常,付款成功,买家账户从中扣除购买金额。但是卖家账户从来没有得到任何钱。 我在某处读到,要激活卖家
谁知道我在哪里可以启用 “商家未启用账单地址请求” 在沙箱环境中? 谢谢达尔科 最佳答案 请打开ticket向 MTS 技术团队提供帮助。 关于paypal-sandbox - 商家未启用账单地址请求
您好,我是 Paypal 集成的新手。 我已在我的在线商店中成功设置了 Express Checkout。 但在我的 Sandbox 帐户中,无论实际值(value)多少,每笔交易的余额总是减少 20
在 Paypal Sandbox 中,当我尝试向买家账户添加信用卡时,我不断收到错误消息“该卡号已分配给另一个 PayPal 账户。”我不明白,因为当我创建测试帐户时,Paypal 刚刚为我生成了号码
我是一名优秀的程序员,十分优秀!