在AngularJS应用中,我将表单发布到支付网关。我有一个标题字段叫"授权"将会话令牌传递给后端API。
尝试向支付网关发出请求时,出现以下错误:
XMLHttpRequest无法加载 https://transact.nab.com.au/test/directpostv2/authorise。请求 标题字段不允许授权 接入控制允许集管。
使用Postman发出相同的请求时,一切正常,状态代码为200。
我已经创建了一个快速演示的plunkr,它也获得了200状态http://plnkr.co/edit/8Ts6s0VDTTUVVC9dbCJC
$http({
method: 'POST',
url: authoriseURL,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
data: nabPaymentData
}).
success(function (response, status, headers) {
alert('Success:' + response + ' status:' + status + ' headers:' + headers);
}).
error(function (err, status, headers) {
alert('Error:' + err + ' status:' + status + ' headers:' + headers);
});
有没有办法去除一个帖子请求的标题字段?
答案 0 :(得分:1)
正如我上面的评论,您可以使用拦截器仅删除对支付网关的请求的auth标头。解决方案将是这样的。首先我们使用工厂定义拦截器。后来我们在角配置中推动拦截器。
app.factory('myInterceptor', ['$log', function($log) {
return {
// optional method
'request': function(config) {
$log.debug(config.url);
// if request to payment gateway, delete the auth header
if(config.url.indexOf('https://transact.nab.com.au') > -1) {
$log.debug('before deleting auth header');
$log.debug(config.headers);
delete config.headers.Authorization;
$log.debug('after deleting auth header');
$log.debug(config.headers);
}
$log.debug(config.url);
$log.debug(config.headers);
// do something on success
return config;
},
};
}]);
app.config(['$httpProvider', function($httpProvider) {
$httpProvider.interceptors.push('myInterceptor');
}]);
答案 1 :(得分:0)
您可以通过将其设置为Authorization
来删除该POST请求的undefined
字段:
$http({
method: 'POST',
url: authoriseURL,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': undefined
},
data: nabPaymentData
});