2016-12-01 78 views
2

我想调用Pho.to API来编辑照片,并且每次尝试POST时都会得到相同的错误。我已经双倍和三倍检查了我的app_id和我的key,我无法弄清楚我做错了什么。我目前使用ARC Chrome扩展来调用这个api,所以我甚至还没有开始编写这个部分,我只是试图从api得到一个真正的回应,以确保它的工作。错误调用Pho.to API

我遵循他们的文档中的说明以及我可以。这里的链接以供参考:http://developers.pho.to/documentation/sending-requests

这里是我的API调用:

http://opeapi.ws.pho.to/addtask?APP_ID=<my-app-id>&KEY=<my-key>&SIGN_DATA=910ceb5bdb238b9248a34cce8b29ba64d5f239df 

,这里是响应我回去(不要被200所欺骗):

Status: 200 OK 

<?xml version="1.0" ?> 
<image_process_response> 
    <status>SecurityError</status> 
    <err_code>614</err_code> 
    <description>Error in POST parameters: one or more parameters (DATA , SIGN_DATA or APP_ID) are empty</description> 
</image_process_response> 

下面是我用来创建SHA1的PHP代码:SIGN_DATA

<?php 
    echo hash_hmac('SHA1', '<image_process_call><lang>en</lang><image_url order="1">http://www.w3schools.com/html/pic_mountain.jpg</image_url><methods_list><method order="1"><name>desaturation</name></method><method order="2"><name>cartoon</name><params>fill_solid_color=1;target_color=(255,255,255);border_strength=20;border_width=3</params></method></methods_list><result_format>png</result_format><result_size>600</result_size></image_process_call>','<my-key>'); 
?> 

这里是从上面的xml,格式化为可读性:

<image_process_call> 
    <lang>en</lang> 
    <image_url order="1">http://www.w3schools.com/html/pic_mountain.jpg</image_url> 
    <methods_list> 
     <method order="1"> 
      <name>desaturation</name> 
     </method> 
     <method order="2"> 
      <name>cartoon</name> 
      <params>fill_solid_color=1;target_color=(255,255,255);border_strength=20;border_width=3</params> 
     </method> 
    </methods_list> 
    <result_format>png</result_format> 
    <result_size>600</result_size> 
</image_process_call> 

任何帮助,将不胜感激。提前致谢!

+0

您不应该同时发送'DATA'和'SIGN_DATA'吗?由于'hmac'返回一个散列,从哪个API不能恢复你传递的原始xml内容。 –

+0

@u_mulder我试图与有效载荷的其余部分一起发送上行数据,现在我得到这个错误: '的SecurityError 无效SIGN_DATA参数' – youravgjoe

+0

@u_mulder那修复了部分问题。我还删除了' en',现在API已经过了。谢谢您的帮助! – youravgjoe

回答

3

所以我想通了什么是错的。这是我对任何人都可以与此API(平台如何)遇到类似问题的详细解决方案:

问题的

部分(如@u_mulder指出)是DATA需要与SIGNED_DATA这样一起发送了SHA1可以在另一端解码。

解决我的问题的另一部分是删除<lang>en</lang>。无论出于何种原因,这是返回Error 613: Invalid SIGN_DATA parameter.无论如何英语是默认语言,所以它是没有必要的。

所以解决了那些事以后,这是我的最终网址:

http://opeapi.ws.pho.to/addtask/?app_id=<my-app-id>&key=<my-key>9&sign_data=e456c393d11797c1a2945a85dd49ba2208cc66de&data=%3Cimage_process_call%3E%3Cimage_url+order%3D%221%22%3Ehttp%3A%2F%2Fwww.heroesandheartbreakers.com%2Fimages%2Fstories%2Fblogarticles%2F2016%2FJanuary2016%2FTV-Recap-Arrow-4x11-Olicity-is-home-470.jpg%3C%2Fimage_url%3E%3Cmethods_list%3E%3Cmethod+order%3D%221%22%3E%3Cname%3Ecartoon%3C%2Fname%3E%3Cparams%3Efill_solid_color%3D1%3Btarget_color%3D%28255%2C255%2C255%29%3Bborder_strength%3D20%3Bborder_width%3D1%3C%2Fparams%3E%3C%2Fmethod%3E%3C%2Fmethods_list%3E%3Cresult_format%3Epng%3C%2Fresult_format%3E%3Cresult_size%3E1500%3C%2Fresult_size%3E%3C%2Fimage_process_call%3E 

注意,URL编码。这可能或可能不必要,我只是编码它是安全的。

这将返回:

<?xml version="1.0" ?> 
<image_process_response> 
    <request_id>010afc13-6bba-44dd-b278-4f3bd1e41946</request_id> 
    <status>OK</status> 
    <description /> 
    <err_code>0</err_code> 
</image_process_response> 

而且我现在可以使用request_id来获取编辑图像的URL:

http://opeapi.ws.pho.to/getresult?request_id=010afc13-6bba-44dd-b278-4f3bd1e41946 

它返回下面的XML:

<image_process_response> 
    <request_id>010afc13-6bba-44dd-b278-4f3bd1e41946</request_id> 
    <status>OK</status> 
    <result_url>http://worker-images.ws.pho.to/i1/3BCB160A-691A-458B-9161-67AFA8A9EAA0.png</result_url> 
    <result_url_alt>http://worker-images.ws.pho.to.s3.amazonaws.com/i1/3BCB160A-691A-458B-9161-67AFA8A9EAA0.png</result_url_alt> 
    <nowm_image_url>http://worker-images.ws.pho.to/i1/3BCB160A-691A-458B-9161-67AFA8A9EAA0.png</nowm_image_url> 
</image_process_response> 

所以最终编辑图片的网址是http://worker-images.ws.pho.to/i1/3BCB160A-691A-458B-9161-67AFA8A9EAA0.png(我相信链接会在24小时后过期)

我们完成了!

如果你想看看我是如何在一个简单的Android应用程序来实现这个API,这里的GitHub的链接:https://github.com/youravgjoe/ColoringPageGenerator

前:

Before

后:

After

0

对我来说,错误是由(A)确定使用SHA1而不是SHA256(我自己的错误)和(B)出于某种原因,sign_data值必须是小写。