【问题标题】:Quickbook No apptoken detected; (PHP)errorCode=003102; statusCode=401Quickbook 未检测到 apptoken; (PHP)错误代码=003102;状态码=401
【发布时间】:2015-12-10 07:14:58
【问题描述】:

我是 quickbooks API 实现的新手,当我为客户添加等进行 API 调用时,我总是收到一个错误No apptoken detected; errorCode=003102; statusCode=401。 我正在给出我的步骤,请看一下。

我的沙盒信息是这样的

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

    我正在使用 PHP。 首先我生成了 oauth_signature。

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

$ukey = rawurlencode('IgpJzJrYvb9FmmdB7A0ECDGHG62Cp7dqVWjfMTvU').'&'.rawurlencode('TdPGpcUI8AiAdWFiCyb8jAAygH16bzU7VRGaspx4'); $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 '内容类型:应用程序/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 '{"data": [{"BillAddr":{"Line1":"86 A Topsia","City":"Kolkata","Country":"India","CountrySubDivisionCode":"WB"," PostalCode":"700102"},"Title":"Mr.","GivenName":"ApurbaK","MiddleName":"Kumar","FamilyName":"ApurbaK","PrimaryPhone":{"FreeFormNumber": "564545465"},"PrimaryEmailAddr":{"地址":"apurbahazra12@navsoft.in"}}]}' 'https://sandbox-quickbooks.api.intuit.com/v3/company/408554291/customer'

请看一下。

谢谢, 阿普尔巴

【问题讨论】:

    标签: quickbooks-online


    【解决方案1】:

    首先,您不想自己做这件事——使用库。 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 设置为什么?它似乎没有在您的代码中任何地方定义(您是否忘记粘贴一些代码?)

    【讨论】:

    • @Kaith: 谢谢你的回答我已经把我的代码上传到服务器了,请你看一眼sample.navigatorssoftware.com/authcode.txt
    • 这不正确:curl_setopt($ch, CURLOPT_HEADER, array('Content-Type: application/json, Authorization: OAuth oauth_token=SYxCE24I/EZcbu3v4J5qGiAvTkg=,oauth_consumer_key=qyprdXOAnzvHkKVQGXiZEKgznFvmethodhXE,oauth_MACsignature ,oauth_timestamp='.$timestamp.',oauth_version=1.0,oauth_nonce='.$auth_nonce.',oauth_signature='.$auth_sig.''));您不能用逗号分隔标题。文档:php.net/curl_setopt HTTP 标头由换行符分隔,而不是逗号。
    • @kaith:我已经尝试使用 consolibyte 库,它正在工作身份验证和添加客户,但我需要从我的应用程序中将啤酒订单添加到快速手册中,但没有这样的例子,请告诉我,我怎样才能做额外的课程,比如添加客户。
    猜你喜欢
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 2021-03-04
    • 2018-10-02
    相关资源
    最近更新 更多