ciuji/ciuji.github.io

alipay-sdk探究

Opened this issue · 0 comments

ciuji commented

研究了node和java的两个sdk的集成,目的是通过调用支付宝接口进行用户验证。

node.js

alipay-sdk支付宝服务端的node sdk还处于公测阶段,用的人也很少,所以也没看到什么文档。毕竟企业级的后端应该都还是用的java之类的吧。但是可能因为我对javascript更熟悉吧,感觉node的环境配置真的是十分容易,而且也可以直接改动sdk中的源码实现自己想要的东西,十分方便调试,对我这种菜鸟级的服务器端开发者真的是福音。

主要记录下几个坑点的地方吧,支付宝的文档虽然全,可是真的写的十分不明确,很容易让人混淆。

auth_token和app_auth_token

这个地方是一个大坑,一个原因就是我自身对于支付宝的业务不了解。没有理解支付宝第三方应用授权用户信息授权的区别。

而这两个不同的授权有不同的auth_code,分别用于换取不同的token,来进行后面的访问。

我本次业务需要的是访问用户信息,所以应该申请的是后一个code,然后换取授权访问令牌,但是还有一个换取应用授权令牌,用的就是前一个code。但是,这两个东西写在同一个小节下面。。真的巨坑

就是因为这个问题,我遇到了code无效的报错,也一直解决不了,最后还是支付宝的客服给了我提醒。

bizContent和biz_content

调用支付宝的接口时有两种需要传过去的的请求参数,一种是公共请求参数,一种是请求参数biz_content。

问题就出现在这个biz_content的参数名称上。在npm的文档中,范例写的是bizContent,但在接口文档中,写的是biz_content,我一开始就搞混了,然后用biz_content可以成功的获取授权访问令牌,但是没办法换取应用授权令牌,会一直出现验签失败的问题。我检查了很多次支付宝公钥和用户密钥,都没有发现问题,直到最后灵机一动改了参数名称为bizContent,突然就成功了。

后来我去看了alipay-sdk的源码,发现里面有一个函数是转驼峰为下划线。。。也就是它自己把bizContent改成了biz_content这种符合接口的形式。当然,我还是没搞懂为什么直接写biz_content就不行了。但也没有追究下去。

java

开发环境配置

eclipse,tomcat 的配置网上都有许多现成的教程,还是比较容易和友好的。

值得提一句的就是还是遇到了不少问题,有遇到404报错,有遇到找不到文件路径。

tomcat 404排查

Eclipse 项目发布到Tomcat报系统找不到路径的问题解决方案

其实根本原因是我的jsp文件位置放错了,放到了WEB-INF目录下,这个目录是不可被访问的,但很迷的是,我按照tomcat找不到指定路径中最后一条评论的方法,修改了权限后,就可以访问localhost:8080了,虽然访问jsp文件还是404,但这说明修改权限的确可以对WEB-INF进行访问,歪打正着。

当然,最后还是通过改文件目录实现了访问,然后导入了jar文件,也算顺利搭好环境了。

总结

支付宝的这张图片其实就足够清晰的体现出整个流程了。(对比一下自己软件体系架构画的图,真是不忍直视。)
image