javascript – 如何将codeigniter的CSRF令牌传递给Paypal Express Checkout?
作者:互联网
我正在将Paypal Express Checkout与服务器端REST集成到我的codeigniter网站中.
根据Paypal文档,我将以下内容添加到我的结帐页面:
<script src="https://www.paypalobjects.com/api/checkout.js"></script>
<script>
var CREATE_PAYMENT_URL = 'https://#######/paypal/create';
var EXECUTE_PAYMENT_URL = 'https://######/paypal/execute';
paypal.Button.render({
env: 'production', // Or 'sandbox'
commit: true, // Show a 'Pay Now' button
payment: function() {
return paypal.request.post(CREATE_PAYMENT_URL).then(function(data) {
return data.id;
});
},
onAuthorize: function(data) {
return paypal.request.post(EXECUTE_PAYMENT_URL, {
paymentID: data.paymentID,
payerID: data.payerID
}).then(function() {
// The payment is complete!
// You can now show a confirmation message to the customer
});
}
}, '#paypal-button');
</script>
一切都运行得很好但是,当我启用codeigniter CSRF保护时,checkout.js使用CREATE_PAYMENT_URL对我的服务器进行的调用被拒绝对缺少的CSRF令牌的事实.我对JavaScript知之甚少,我需要一些帮助才能将令牌传递给checkout.js,Paypal的文档没有帮助.
我尝试过的:
在codeigniter config上关闭CSRF工作! Paypal快速结账工作完美,但这不是一个选项,CSRF安全必须开启.
从codeignter配置中的CSRF检查中排除URI再次工作完美但我不满意.必须有一种方法来保护使用CSRF令牌的服务器调用.
我希望我的问题很明确,你可以建议一些解决方案.谢谢!
解决方法:
return paypal.request({
method: 'post',
url: CREATE_PAYMENT_URL,
headers: {
'x-csrf-token': CSRF_TOKEN
}
}).then(function(data) {
return data.id;
});
标签:php,javascript,codeigniter,paypal,csrf-protection 来源: https://codeday.me/bug/20190608/1196546.html