2015-12-10 20 views
0

我是quickbooks API实现中的新手,当我为客户添加API API调用时,我总是收到一个错误No apptoken detected; errorCode=003102; statusCode=401。 我正在给我的步骤,请仔细阅读。Quickbook没有检测到任何apptoken; (PHP)的errorCode = 003102; statusCode = 401

我的沙箱的信息一样,

  • 消费重点:qyprdffbBBInX4a82jG73Mreyy96tC
  • 消费者揭秘:IgpJzJrYvb9FmmdB7A0ECDGHG62Cp7dqVWjfMTvU
  • 访问令牌:qyprdlo3WrK0KhGZMTeA857AuKiVy2eaAmpXsRvG3jycYaMQ
  • 访问令牌密钥:TdPGpcUI8AiAdWFiCyb8jAAygH16bzU7VRGaspx4

    我使用PHP 。 首先我已经生成了oauth_signature。

$ URL = rawurlencode( 'https://sandbox-quickbooks.api.intuit.com/v3/company/408554291/customer'); $ method ='POST'; $参数= rawurlencode( 'oauth_consumer_key = qyprdffbBBInX4a82jG73Mreyy96tC & oauth_nonce = BlyqIBbv3R4T0P4qglAv1RjoYisMZk1449659733 & oauth_signature_method = HMAC-SHA1 & oauth_timestamp = 1449659733 &组oauth_token = qyprdlo3WrK0KhGZMTeA857AuKiVy2eaAmpXsRvG3jycYaMQ & oauth_version = 1.0');

$ ukey = rawurlencode('IgpJzJrYvb9FmmdB7A0ECDGHG62Cp7dqVWjfMTvU')'。' &'.rawurlencode('TdPGpcUI8AiAdWFiCyb8jAAygH16bzU7VRGaspx4'); $ hasmac = hash_hmac(“sha1”,$ BaseURL,$ ukey,1);

和我oauth_signature是jZ8JhECy/e0kpPbUdZp/o/EUC7U=

当我打电话API与此oauth_signature,我得到错误“不APPTOKEN检测;错误码= 003102;的StatusCode = 401'

我CURL呼叫这样

卷曲-X POST -H“内容 - 类型:应用/ 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”:{ “线路1”: “86甲Topsia” , “城市”: “加尔各答”, “国家”: “印度”, “CountrySubDivisionCode”: “WB”, “邮编”: “700102”}, “标题”: “先生”, “给定名称”: “ApurbaK” , “中间名”: “库玛”, “FamilyName”: “ApurbaK”, “PrimaryPhone”:{“免费FormNumber “:” 564545465 “},” PrimaryEmailAddr “:{” 地址 “:” [email protected]“}}]}” 'https://sandbox-quickbooks.api.intuit.com/v3/company/408554291/customer'

请过目这一点。

感谢, Apurba

回答

0

首先,你不想做这个自己 - 使用库。 OAuth是复杂的,并且自己实施它将是一个多毛的过程,充满了错误。

转到抢库:

按照快速入门指南链接那里,并从中受益的例子:

随着t帽子说,如果你决定自己动手写,一定要按照OAuth规范:

到目前为止,我立即与您的实现见的问题包括:

  • 您不能像这样对时间戳进行硬编码:&oauth_timestamp=1449659733时间戳应该不断变化,并设置为当前时间戳。

  • 你不能硬编码这样的随机数:&oauth_nonce=BlyqIBbv3R4T0P4qglAv1RjoYisMZk1449659733乱数与改变每一个请求所以这是怎么回事你的第一个请求后失败。

  • 根据规范,您尚未规范化您的请求参数/对它们进行了排序。

  • 这是使用cURL指定多个标头的错误方法:-H 'Content-Type: application/json, Authorization: OAuth ...。请参阅卷曲文档:http://curl.haxx.se/docs/manpage.html#-H

  • 在您发布的代码,你有没有实际设置$BaseURL任何地方,所以现在你签署一个空字符串

  • (除非你忘了什么地方粘贴一些代码吗?)
  • 什么是$ukey设置为?它似乎没有在你的代码中定义任何地方(你忘了粘贴一些代码?)

+0

@Kaith:感谢您的回答我已经上传我的代码到服务器,请你看看一目了然http://sample.navigatorssoftware.com/authcode.txt –

+0

这是不正确的:curl_setopt($ ch,CURLOPT_HEADER,array('Content-Type:application/json,Authorization:OAuth oauth_token = SYxCE24I/EZcbu3v4J5qGiAvTkg =,oauth_consumer_key = qyprdXOAnzvHkKVQGXiZEKgznFvhXE,oauth_signature_method = HMAC-SHA1,oauth_timestamp =” $时间戳。 'oauth_version = 1.0,oauth_nonce =,oauth_signature = '$ auth_sig。 ''))' $ auth_nonce。';你不能用逗号分隔标题。文档:http://php.net/curl_setopt HTTP头以换行符分隔,而不是逗号分隔。 –

+0

@kaith:我已经尝试过使用consolibyte库,它正在使用身份验证并添加客户,但我需要从我的应用程序添加快速书籍的啤酒订单,但是没有这样的例子,请您告诉我,我该如何制作额外的像增加客户一样。 –