Javascript 向Intuit/Quickbooks支付API提交令牌化卡数据时出错
我正在将Intuit/Quickbooks支付API集成到现有的电子商务网站中。由于PCI的要求,我需要在卡数据到达服务器之前通过JavaScript标记卡数据,然后使用该标记而不是实际的卡数据提交费用 为什么我从Payments API收到“token is invalid”错误 第一次尝试 我按照上的说明操作,其中描述了如何使用因纽特人提供的JavaScript文件来标记卡数据Javascript 向Intuit/Quickbooks支付API提交令牌化卡数据时出错,javascript,php,quickbooks,payment-processing,intuit,Javascript,Php,Quickbooks,Payment Processing,Intuit,我正在将Intuit/Quickbooks支付API集成到现有的电子商务网站中。由于PCI的要求,我需要在卡数据到达服务器之前通过JavaScript标记卡数据,然后使用该标记而不是实际的卡数据提交费用 为什么我从Payments API收到“token is invalid”错误 第一次尝试 我按照上的说明操作,其中描述了如何使用因纽特人提供的JavaScript文件来标记卡数据 intuit.ipp.payments.tokenize( qbAppToken{ 卡片:{ 编号:$(“#标记
intuit.ipp.payments.tokenize(
qbAppToken{
卡片:{
编号:$(“#标记化_cc-number”).val(),
expMonth:$(“#标记化_cc-expMonth”).val(),
expYear:$(“#标记化_cc-expYear”).val(),
cvc:$(“#标记化_cc-cvc”).val(),
地址:{
streetAddress:$(“#标记化_cc-address-street”).val(),
城市:$(“#标记化_cc-address-city”).val(),
区域:$(“#标记化_cc-address-region”).val(),
国家:$(“#标记化_cc-address-country”).val(),
postalCode:$(“#令牌化_cc-address-postalCode”).val()
}
}
},
功能(令牌、响应){
控制台日志(响应);
if(令牌!=null){
console.log(令牌);
$cardToken.val(代币);
$paymentForm[0]。提交();
}否则{
console.log(“标记化期间出错”+response.code+”;“+response.message+”;“+response.detail+”;“+response.moreinfo”);
}
});
我取回了一张卡片令牌:
f9e7a378-c3f2-4343-b0a8-ee376d4ed472
我将该令牌插入我的表单并将表单提交给我的服务器,然后服务器使用卡令牌通过CURL向支付API提交费用
我正在向端点提交:
https://sandbox.api.intuit.com/quickbooks/v4/payments/charges
数组
(
[金额]=>6992.83
[货币]=>美元
[捕获]=>真
[令牌]=>f9e7a378-c3f2-4343-b0a8-ee376d4ed472
[上下文]=>数组
(
[手机]=>错误
[isEcommerce]=>正确
)
)
然而,我从Payments API得到的回复是“令牌无效”:
{
“错误”:[{
“代码”:“PMT-4000”,
“类型”:“无效的请求”,
“消息”:“令牌无效。”,
“详细信息”:“令牌”,
“信息链接”:https://developer.intuit.com/v2/docs?redirectID=PayErrors"
}]
}
以下是完整的回答:
HTTP/1.1400错误请求
服务器:nginx
日期:2019年6月5日星期三18:13:20 GMT
内容类型:application/json;字符集=utf-8
内容长度:175
连接:保持活力
保持活动状态:超时=5
严格的运输安全:最大年龄=15552000
intuit_tid:[修订]
设置Cookie:ADRUM_BT=R:0 |客户端GUID:9ae895d4-44ee-4175-bb47-4e37e95162a819 | btId:755 |后端快照类型:f;Expires=2019年6月5日星期三18:13:49 GMT;路径=/
{“errors”:[{“code”:“PMT-4000”,“type”:“invalid_request”,“message”:“token is invalid.”,“detail”:“token”,“infoLink”:https://developer.intuit.com/v2/docs?redirectID=PayErrors"}]}
我注意到,对于JavaScript卡标记化来说,“本节仅适用于OAuth 1.0应用程序。”这可能是一个问题。但我看不到有人提到如何为OAuth 2.0应用程序标记卡数据
解读错误
我假设“令牌无效”错误指的是我的卡令牌,而不是我的应用程序身份验证令牌。我的假设基于两件事:
{
"code": "AuthenticationFailed",
"type": "INPUT",
"message": null,
"detail": null,
"moreInfo": null
}
对于IE8/IE9-POST/quickbooks/v4/payments/tokens/ie
内容类型:application/json
生产基地URL:https://api.intuit.com
沙盒基本URL:https://sandbox.api.intuit.com
jQuery.ajax({
url:“https://sandbox.api.intuit.com/quickbooks/v4/payments/tokens",
类型:“POST”,
contentType:'应用程序/json',
数据类型:“json”,
数据:JSON.stringify(cardData)
}).done(函数(msg){
...
});
结果是一样的。我得到的似乎是卡令牌,但当我通过CURL提交费用时,我仍然得到:
{
“错误”:[{
“代码”:“PMT-4000”,
“类型”:“无效的请求”,
“消息”:“令牌无效。”,
“详细信息”:“令牌”,
“信息链接”:https://developer.intuit.com/v2/docs?redirectID=PayErrors"
}]
}
怎么了
我有一张Intuit的公开票,还有一张。如果我从他们那里收到任何进一步的信息,我会更新这篇文章。如果你在下面使用javascript文件标记信用卡信息,https://js.appcenter.intuit.com/Content/IA/intuit.ipp.payments-0.0.3.js
,请注意开发商关系部的回应:
…在该javascript中
{
"value": "7e92f015-820b-4e70-81b9-8ce840c76389"
}
{
"created": "2019-06-17T16:18:43Z",
"status": "CAPTURED",
"amount": "10.55",
"currency": "USD",
"token": "7e92f015-820b-4e70-81b9-8ce840c76389",
"card": {
"number": "xxxxxxxxxxxx1111",
"name": "emulate=0",
"address": {
"city": "Sunnyvale",
"region": "CA",
"country": "US",
"streetAddress": "Road Street",
"postalCode": "94086"
},
"cardType": "Visa",
"expMonth": "02",
"expYear": "2020",
"cvc": "xxx"
},
"avsStreet": "Pass",
"avsZip": "Pass",
"cardSecurityCodeMatch": "NotAvailable",
"id": "E4JTLAV2QAFF",
"context": {
"mobile": false,
"deviceInfo": {},
"recurring": false,
"isEcommerce": true
},
"authCode": "546816"
}