现在的APP一般都会提供第三方登录的功能,一般都会集成微信、sina微博之类的登录方式;说到底就是调用一些rest api请求去完成认证,我目前是用clojure来作为主要开发语言的,对于微信开发clojure目前基本没什么可用的库,不过现在社区已经有比较完善的java SDK了,因此我也没必要自己去凑一些http请求,拼凑一些字段了,最简单的方法就是直接调用java sdk里面的接口。因此,我尝试在clojure里面来调用wx-java-SDK

clojure天生就可以跟java无缝对接,这让我们信心大增。不过wxjava官网目前我主要是想集成是微信服务号的开发,所以我们需要先引入weixin-java-mp这个库,在clojure里面先要引入一下这个库,很简单,在project.clj里面的依赖关系里面增加一下就可以了:

1
[com.github.binarywang/weixin-java-mp "3.4.0"]

目前的稳定版本是3.4.0,因此我就选用这个版本了。

接下来,我们要在需要用到这个库的地方引入一下对应的类,由于网页上的提供的示例比较简单,让人感觉无从下手,也不知道到底该怎么调用。还好他有对应的demo库,于是乎我就去demo库里面大概搜索了一下代码,找到了对应的地方: 在weixin-java-demo-springmvc这个仓库里面的src/main/java/com/github/weixin/demo/config/MenuConfig.java文件里面有类似的调用,大概翻了一下代码以后,剥离出相关的几行代码,然后测试了一下是可行的,最后的代码整理如下。

在clojure里面需要引入java对应的类

1
2
3
(:import (me.chanjar.weixin.mp.api WxMpService)
	 (me.chanjar.weixin.mp.api.impl WxMpServiceImpl)
	 (me.chanjar.weixin.mp.api WxMpInMemoryConfigStorage))

最后总结下来的调用方式如下:

1
2
3
4
5
6
7
(let [configStorage (doto (WxMpInMemoryConfigStorage.)
		      (.setAppId "这里填写APPID")
		      (.setSecret "这里填写appsecret"))
      wxMpService (doto (WxMpServiceImpl.)
		    (.setWxMpConfigStorage configStorage))]
  (.oauth2getAccessToken wxMpService
			 "这是腾讯认证code"))

如果code有误的话会抛出异常,这个在clojure里面自行解决就好。

更新历史

  • 2019-06-24

    • 初稿