利用腾讯微博开放api开发塞班symbian应用的一些心得,关键字:HMAC-SHA1签名算法,check sign error,发送中文问题。add_pic接

wxq888 2011-12-09 10:29:59
利用腾讯微博开放api开发塞班symbian应用的一些心得,关键字:HMAC-SHA1签名算法,check sign error,发送中文问题。add_pic接口。
最近在搞一个塞班的应用,想接入腾讯微博或者sina微博,找遍了api文档,php,java,ios,android……大多数都有sdk,都木有找到塞班的sdk,估计塞班的程序员太好欺负了,所以没有。虽然说塞班是基于c++的,但是如果你把c++ sdk搬到塞班上的话,估计有十万个以上的问题~等着你来搞定~~蛋痛的塞班,木有办法,只有自己实现了~
首先的问题是Oauth鉴权,Oauth鉴权最关键的就是HMAC-SHA1签名算法,搜索了无数网站,终于在nokia论坛找到一个文章,有现成的代码。非常高兴。居然短短不到100行代码就解决了~赶紧拿来试试,但是就是不对劲~~,最后苦苦寻思,调试,就是因为一个&符号的问题。腾讯微博的api文档说请求request token的HMAC-SHA1签名算法中的key是由App Secret和Token Secret组成,因为请求request token时还木有Token Secret,顾我的key就只有App Secret。忽略了一个问题,那就是不能少&这个符号。虽然木有Token Secret,但是&不能少~
另一点要注意的是:不要请求https,直接请求http就好~
鉴权搞定了,我以为后面发图片就轻而易举了,其实不然,后面还有很多岔道,走错就死翘翘~看腾讯api文档,看起来很容易,其实里面水很深~~第一个问题,根据api文档,把啥都弄好了,调用add_pic发送一个图片,返回{"data":null,"errcode":1,"msg":"error content param","ret":1}什么问题呢?原来是木有把conten放在表单数据中。日,api文档上说,只需要把图片放到表单数据,其实,所有的参数都要放到表单数据中。同时也要放在url参数中~~
好吧content放到表单数据后,木有"error content param"这个错误了,接着返回了这个错误<root><data/><errcode>1</errcode><msg>check sign error</msg><ret>3</ret></root>。这个问题,搞了好久,是啥原因呢,
原来在前面的baseString中,要把oauth_version参数带上,api文档里说可以木有,实际上必须要有~
好,到此,可以正常发图片了,接下来又有问题了,是啥呢?如果内容中有空格,或者中文,又出来check sign error了~这个咋解决呢?转utf-8,url编码,都加上了,还是不行。最后通过腾讯的同事解析c#的sdk,最后总结出事需要这样子做才行:
签名的base String中不需要转utf8,进行urlencode就好,在填到表单数据的conten则只需要转utf8,不需要url encode。如果已经url encode了,需要url Decode,再转utf8.
好,到此我的项目基本完成了~把这些写出来,希望对利用腾讯微博开放api在塞班上开发的朋友有所帮助,毕竟还是有很多塞班用户的~~
附录:1:塞班HMAC-SHA1签名算法链接:http://www.developer.nokia.com/Community/Wiki/How_to_generate_oauth_signature_using_HMAC-SHA1_in_Symbian_C%2B%2B
2:贴一个add_pic接口的url和表单数据示例。
url:http://open.t.qq.com/api/t/add_pic?clientip=127.0.0.1&content=%23Gif%E5%A1%9E%E7%8F%AD%23%20%23Gif%E5%BE%AE%E7%94%B5%E5%BD%B1%23%20&format=xml&jing=23&oauth_consumer_key=801060504&oauth_nonce=132334672042EEDD8114DF1SS2EAC112&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1323346720&oauth_token=27a987ee2a10423da656b0ef5f2007e5&oauth_version=1.0&wei=123&oauth_signature=4Osbpiefdf8%2Bm2p2pl1fYoq1FoI%3D
表单数据:
------------YrVCInGlLK6trntXaL9C58
Content-Disposition: form-data; name="clientip";

127.0.0.1
------------YrVCInGlLK6trntXaL9C58
Content-Disposition: form-data; name="content";
Content-Type: text/plain; charset=utf-8

#Gif塞班# #Gif微电影#
------------YrVCInGlLK6trntXaL9C58
Content-Disposition: form-data; name="format";

xml
------------YrVCInGlLK6trntXaL9C58
Content-Disposition: form-data; name="jing";

23
------------YrVCInGlLK6trntXaL9C58
Content-Disposition: form-data; name="oauth_consumer_key";

801060504
------------YrVCInGlLK6trntXaL9C58
Content-Disposition: form-data; name="oauth_nonce";

132334672042EEDD8114DF1SS2EAC112
------------YrVCInGlLK6trntXaL9C58
Content-Disposition: form-data; name="oauth_signature_method";

HMAC-SHA1
------------YrVCInGlLK6trntXaL9C58
Content-Disposition: form-data; name="oauth_timestamp";

1323346720
------------YrVCInGlLK6trntXaL9C58
Content-Disposition: form-data; name="oauth_token";

27a987ee2a10423da656b0ef5f2007e5
------------YrVCInGlLK6trntXaL9C58
Content-Disposition: form-data; name="oauth_version";

1.0
------------YrVCInGlLK6trntXaL9C58
Content-Disposition: form-data; name="wei";

123
------------YrVCInGlLK6trntXaL9C58
Content-Disposition: form-data; name="oauth_signature";

4Osbpiefdf8+m2p2pl1fYoq1FoI=
------------YrVCInGlLK6trntXaL9C58
Content-Disposition: form-data; name="pic"; filename="Photo~20111208214028.gif"
Content-Type: application/octet-stream

图片二进制数据
------------YrVCInGlLK6trntXaL9C58--
...全文
3229 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yufeng0528 2012-12-05
  • 打赏
  • 举报
回复
强大的楼主 真是好东西啊
photoimageking 2011-12-30
  • 打赏
  • 举报
回复
QQ S60v3版
photoimageking 2011-12-30
  • 打赏
  • 举报
回复
求教楼主:能替换S60v3版的内置字体么? 蛋痛的v3版在^3下显示一堆空格~
wwwgoooglecom 2011-12-12
  • 打赏
  • 举报
回复
楼主厉害啊!!!
wxq888 2011-12-09
  • 打赏
  • 举报
回复
有这方面开发问题的可以加我qq(42552284)
课程亮点: 从无到有、手把手教你编写CA/TA,快速上手,快速部署项目标准的开发开发一套CA/TA,可部署到不同的TEE OS上。受益人群: 汽车行业主机厂、tier1、SOC芯片公司的安全部门同事手机行业,ODM/OEM、SOC芯片公司的安全部门同事学生课程收益: 熟悉CA/TA开发的步骤和流程。快速上手,快速搭建自己开发环境。熟悉各类TEE、基于各类TEE的CA/TA开发步骤。搭建自己的安全平台熟悉各类常规安全应用熟悉tee密码学算法、tee存储  课程大纲  Hello大家好,上架一门新的视频课程,课程主要包含两大部分,第一部分搭建环境,第二部分从无到有的编写代码。带领大家手把手编写。 具体大纲如下:(1)qemu v8环境搭建- 搭建一个qemu_v8的环境,用于跑BL1-->BL2-->BL31-->BL32-->BL33-->Linux kernel;- 直使用已搭建好的镜像- 工程使用以及说明(2)CA/TA开发编程实践从无到有编写代码,已完成的大纲如下:- 2秒钟快速编写(clone)一组CA/TA程序- 安全存储详解以及代码示例- CA到TA双向传参数的四种方式(value、temref、memref),区别?优缺点?- 对称密码学算法aes的使用,CBC/ECB/CTR/XTS分组密码的使用,加密解密,pending等- aeskey的操作,如何随机生成aeskey(TEE_GenerateKey),objectHandle和aesbuf有什么区别? 如何将handle- 认证加密算法,如aes-GCM的使用- 非对称密码学算法RSA的使用,包括加密、解密、签名、验签- RSA key的处理,包含如何生成RSA KEY,rsakey object如何转换成可见的数组,如何转换der,如何转换pem,反向又如何转换- ECC/ECDSA的使用- 国密sm2 sm3 sm4的使用.  其中sm4包含加密、解密、签名、验签等- encode和decode的实现- TA属性的定制以及API的使用- 数字摘要  SHA1 sha224 sha256 sha384 sha512等- 消息认证码 HMAC- TEE侧获取时间的函数有哪些(TEE_GetSystemTime、TEE_GetREETime),有什么区别?分别是怎样使用的? - 如何获取随机数(TEE_GenerateRandom)?- TA调用TA的示例和演示后续可能继续补充的如下(也欢迎大家提需求):- multi-session和multi-instance的使用- CA LOGIN flag的使用 

3,120

社区成员

发帖
与我相关
我的任务
社区描述
塞班系统(Symbian系统)是塞班公司为手机而设计的操作系统,它的前身是英国宝意昂公司的 EP ( Electronic Piece of cheese)操作系统。
社区管理员
  • Symbian社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧