我是quickbooks API实现的新手,当我为客户添加API执行API调用时,我总是收到一个错误No apptoken detected; errorCode=003102; statusCode=401
。
我正在给我的步骤,请仔细看看。
我的沙盒信息
访问令牌秘密:TdPGpcc8-8AiAdWFiCyb8jAAygH16bzU7VRGaspx4
我正在使用PHP。 首先,我已经生成了oauth_signature。
$ URL = rawurlencode(' https://sandbox-quickbooks.api.intuit.com/v3/company/408554291/customer&#39); $ method =' POST&#39 ;; $ parameter = rawurlencode(' oauth_consumer_key = qyprdffbBBInX4a82jG73Mreyy96tC&安培; oauth_nonce = BlyqIBbv3R4T0P4qglAv1RjoYisMZk1449659733&安培; oauth_signature_method = HMAC-SHA1&安培; oauth_timestamp = 1449659733&安培;组oauth_token = qyprdlo3WrK0KhGZMTeA857AuKiVy2eaAmpXsRvG3jycYaMQ&安培; oauth_version = 1.0&#39);
$ ukey = rawurlencode(' IgpJzJrYvb9FmmdB7A0ECDGHG62Cp7dqVWjfMTvU')'&安培;' .rawurlencode(' TdPGpcUI8AiAdWFiCyb8jAAygH16bzU7VRGaspx4&#39); $ hasmac = hash_hmac(" sha1",$ BaseURL,$ ukey,1);
和我的oauth_signature是jZ8JhECy/e0kpPbUdZp/o/EUC7U=
当我用这个oauth_signature调用API时,我收到错误'没有检测到apptoken;错误码= 003102;的StatusCode = 401'
我的CURL调用就像这样
curl -X POST -H'内容类型:application / json,授权:OAuth 组oauth_token = qyprdlo3WrK0KhGZMTeA857AuKiVy2eaAmpXsRvG3jycYaMQ,oauth_consumer_key = qyprdffbBBInX4a82jG73Mreyy96tC,oauth_signature_method = HMAC-SHA1,oauth_timestamp = 1449659733,oauth_version = 1.0,oauth_nonce = BlyqIBbv3R4T0P4qglAv1RjoYisMZk1449659733,oauth_signature = jZ8JhECy / e0kpPbUdZp / O / EUC7U =' -d' {"数据":[{" BillAddr":{" Line1":" 86 Topsia",&# 34;市":"加尔各答""国家":"印度"" CountrySubDivisionCode":" WB&#34 ;,"邮编":" 700102"}"名称":"先生""给定名称&#34 ;:。 " ApurbaK""中间名":"库马尔"" FamilyName":" ApurbaK"" PrimaryPhone& #34; {" FreeFormNumber":" 564545465"}" PrimaryEmailAddr" {"地址":" apurbahazra12 @ navsoft 。在"}}]}' ' https://sandbox-quickbooks.api.intuit.com/v3/company/408554291/customer'
请仔细看看。
谢谢, Apurba
答案 0 :(得分:0)
首先,您不希望自己这样做 - 使用库。 OAuth很复杂,自己实施它将是一个毛茸茸的过程,充满了错误。
去抓图书馆:
按照那里链接的快速入门指南,并从示例中受益:
话虽如此,如果您决定自己编写,请确保遵循OAuth规范:
到目前为止,我立即看到您执行的问题是:
您无法像这样对时间戳进行硬编码:&oauth_timestamp=1449659733
时间戳应该不断变化,并设置为当前时间戳。
您不能对这样的随机数进行硬编码:&oauth_nonce=BlyqIBbv3R4T0P4qglAv1RjoYisMZk1449659733
随机数必须随每个请求更改,因此在您第一次请求后这将失败。
根据规范,您尚未规范化请求参数/对其进行排序。
这是使用cURL指定多个标头的错误方法:-H 'Content-Type: application/json, Authorization: OAuth ...
。请参阅cURL文档:http://curl.haxx.se/docs/manpage.html#-H
在您发布的代码中,您实际上并未在任何地方设置$BaseURL
,所以现在您要签署一个空字符串(除非您忘记在某处粘贴某些代码?)
$ukey
设置为什么?它似乎没有在您的代码中定义(您是否忘记粘贴一些代码?)