我正在访问 salesforce,它给了我 application/x-www-form-urlencodedJSON,看起来像这样
{"access_token":"00D5j0008yLhA!ARwAQBufl2Y6S1Tu3AU5zUWBCb442Nj2JqwWFOkm3AFL16CQZleLO.mnZwlDFttOMEnldbt_WqJBzhLrh1mgI1XEIvAN8sAM","instance_url":"https://cloudceitude-13a-dev-ed.my.salesforce.com","id":"https://login.salesforce.com/id/00D5j00000LhAEAU/0055j000004TZbAAAW","token_type":"Bearer","issued_at":"1668188564383","signature":"LQbWIODP8pqE+wD1yjgbVUBxMDI6YV1HjENZUeK/eoY="}
但是当我尝试使用payload.access_token访问access_token的值时,它给了我错误
我尝试使用 Transform 连接器转换为 JSON
%dw 2.0
output application/json
---
payload
在我尝试访问我的令牌后,它仍然显示相同的错误
并且在调试时 map 函数在 DataWeave 中的 Payload 上工作时不起作用,但当我使用 MapObject 时它反映了这一点:
key=%7B%22access_token%22%3A%2200D5j000008yLhA%21ARwAQIN5UGZWtk8Ucu8MUNgbnHAKleeqAk2M73Afy9iRKNEKRppu4C7Drfi0hg8q5t8C.PYX7RsMMXQPsjxmpVB1Ev_pU.2p%22%2C%22instance_url%22%3A%22https%3A%2F%2Fcloudcertitude-13a-dev-ed.my.salesforce.com%22%2C%22id%22%3A%22https%3A%2F%2Flogin.salesforce.com%2Fid%2F00D5j000008yLhAEAU%2F0055j000004TZbAAAW%22%2C%22token_type%22%3A%22Bearer%22%2C%22issued_at%22%3A%221668330168420%22%2C%22signature%22%3A%22kkDnnUe9pZfiqiuEjRi02az0lwpAlmwmv3cMRmF9nRU
我将做出一个有根据的猜测,即应用程序或服务器以某种方式强制响应的媒体类型为 application/x-www-form-urlencoded(当它确实是 JSON 时)。令牌请求应为 application/x-www-form-urlencoded,响应应为 JSON (application/json)。如果服务器返回它,您应该与该服务器的管理员联系。但是,如果应用程序覆盖了响应的内容类型,您应该修复它。
我在使用 keycloak 授权时遇到了同样的错误。
问题在于响应,即
object with application/x-www-form-urlencoded type
,因此你无法获取任何有效负载属性。这也会导致转换问题,因此可能所有 dw:Core 函数和 datavawe 的转换都无法正常工作。
例如
write(payload,"application/json")
返回带有一个属性的 json,其中 key 是整个 reposne,value 为 null。
"{\n \"{\\\"access_token\\\":\\\"eyJhbGciOiJS... \\\"scope\\\":\\\"email profile\\\"}\": null\n}"
对我有用的解决方法只是使用 JSON MIME 类型设置有效负载。