HTTP 422 Error with JSON & jQuery + Human API


HTTP 422 Error with JSON & jQuery + Human API

我使用的是这里的Human API:https://docs.humanapi.co/docs/connect-backend

在连接到API的某一点上,我需要将数据作为JSON发送回它们。我得到一个名为sessionTokenObject的JSON对象,其中包含以下内容:

{
  humanId: "1234567890",
  clientId: "abcdefg",
  sessionToken: "9876zyx",
}

我应该添加一个clientSecret。从本质上讲,我接受JSON对象中的内容,将其转换为单个变量,通过URL参数将它们传递到另一个页面,然后重建所有内容,以便添加clientSecret,如下所示:

$pop_clientid = $_GET['clientid'];
$pop_humanid = $_GET['humanid'];
$pop_userid = $_GET['userid'];
$pop_sessiontoken = $_GET['clientid'];
$my_sessiontokenobject = '{
    humanId: "'.$pop_humanid.'",
    clientId: "'.$pop_clientid.'",
    sessionToken: "'.$pop_sessiontoken.'",
    clientSecret: "thesecretgoeshere"
}'; ?>
<script type="text/javascript">
    jQuery(document).ready(function($) {
        $.ajax({
          type: "POST",
          url: 'https://user.humanapi.co/v1/connect/tokens',
          data: '<?php echo $my_sessiontokenobject; ?>',
          success: null,
          dataType: 'application/json'
        });
    });
</script>   

如果我没有用撇号包装.ajax()调用中的data值,我会从https://user.humanapi.com/v1/connect/tokens

如果我这样做,我会得到一个"未捕获的语法错误:意外的令牌非法"错误。

有人能看到我的代码出了什么问题吗?或者甚至可以告诉我,试图重新创建一个JSON对象,然后以我现在的方式通过.ajax()将其传递回来,这是否完全不正确?

尝试这样做:(返回一个404未找到的错误,但它似乎在他们这边)

connectBtn.addEventListener('click', function(e) {
  var opts = {
    // grab this from the app settings page
    clientId: clientId,
    // can be email or any other internal id of the user in your system
    clientUserId: clientUserId,
    clientSecret: clientSecret,
    finish: function(err, sessionTokenObject) {
        console.log(sessionTokenObject);
      // When user finishes health data connection to your app
      // `finish` function will be called.
      // `sessionTokenObject` object will have several fields in it.
      // You need to pass this `sessionTokenObject` object to your server
      // add `CLIENT_SECRET` to it and send `POST` request to the `https://user.humanapi.co/v1/connect/tokens` endpoint.
      // In return you will get `accessToken` for that user that can be used to query Human API.
      sessionTokenObject.clientSecret = clientSecret;
      jQuery(document).ready(function($) {
        $.ajax({
          type: "GET",
          url: url,
          dataType: 'jsonp',
          contentType: "application/json",
          data: sessionTokenObject,
        });
      });

      // clientId=ceb8b5d029de3977e85faf264156a4e1aacb5377&humanId=f54fa4c56ca2538b480f90ed7b2c6d22

     //    $.post(url, sessionTokenObject, function(res){
     //     console.log(res);
        // });

    },
    close: function() {
      // do something here when user just closed popup
      // `close` callback function is optional
    }
  }
  HumanConnect.open(opts);
});

人类API测试代码,此代码从人类API开发人员端生成accessToken,但在我执行此代码时,它不是响应

<script src='https://connect.humanapi.co/connect.js'></script>
<script>
var options = {
    clientUserId: encodeURIComponent('email'), //Unique ID of user on your system (we send this back at the end)
    clientId: '',
    publicToken: '',
    finish: function (err, sessionTokenObject) {
        /* Called after user finishes connecting their health data */
        //POST sessionTokenObject as-is to your server for step 2.
        console.log(sessionTokenObject);
        sessionTokenObject.clientSecret  = 'Client Secret Key';
        $.ajax({
            type: 'POST',
            url: 'https://user.humanapi.co/v1/connect/tokens',
            method: 'POST',
            data: sessionTokenObject
        })
                .done(function (data) {
                    console.log(data);
                    // show the response
                    if (data.success) {
                        alert(data.success);
                    } else {
                        alert(data.error);
                    }
                })
                .fail(function (data) {
                    console.log(data);
                    // just in case posting your form failed
                    alert("Posting failed.");
                });
        // Include code here to refresh the page.
    },
    close: function () {
        /* (optional) Called when a user closes the popup 
         without connecting any data sources */
        alert('user clicked on close Button');
    },
    error: function (err) {
        /* (optional) Called if an error occurs when loading
         the popup. */
    }
}
function openHumanApiModel() {
    HumanConnect.open(options);
}
</script>