近期幫朋友作了幾個用到微信公衆號接口的活,因此總結下。javascript
公衆號分訂閱號,服務號,企業號,能夠調用的接口權限各不相同,這裏就不贅述,參考官方說明。html
基本設置
->白名單配置
appid
,AppSecret
,這2個調用接口必須的參數。設置
->公衆號設置
->功能設置
裏有域名相關的配置,若是不配置相關域名,會提示簽名錯誤,而且使用未綁定微信公衆號的域名,在微信打開會有微信給的不安全提示,很噁心。基本設置
->服務器配置
裏配置接收微信請求的地址。實際上開發時生產用的公衆號是不容許用來調試接口,因此微信公衆號提供了
微信測試號
。公衆號後臺
->公衆平臺測試賬號
-> 按照指示,就能夠擁有全部接口權限的測試號。前端
Software Development Kit 簡稱 SDK,這裏指的sdk就是封裝了微信公衆號api的代碼包。java
也許是由於網上太多的開源的微信sdk,因此至今沒有官方出的微信公衆號的sdk。so,爲了簡化開發,咱們能夠直接網上找個開源的sdk,例如 fastweixin,jfinal-weixin,基本上均可以說開箱機用。mysql
在咱們公司是使用本身開發的一套sdk,由於是幫朋友,因此就用了網上的一套fastweixin。選用這個sdk,緣由有:git
引入fastweixin,能夠經過連接直接到首頁進去查看。不過那個引入方式只是講了如何去自動回覆微信公衆號消息。github
先說個人需求(使用的接口) 其實用到就是微信分享接口(微信js),獲取微信用戶頭像(受權接口)。spring
小項目小需求的快速開發,那就用spring boot嘍。我用的IDE是IDEA
,新建項目直接選 spring initializer,其實是經過https://start.spring.io/動態的生成了基礎的代碼,而後下載到你本地解壓。很方便的功能sql
經過spring initializer
生成的項目能夠直接在生成時選擇一些基礎依賴,例如mybatis-spring-boot-starter
,mysql-connector-java
等等,能夠說開箱即用。不過sdk的依賴仍是須要咱們複製進去的,maven引入數據庫
<dependency> <groupId>com.github.sd4324530</groupId> <artifactId>fastweixin</artifactId> <version>1.3.15</version> </dependency>
微信接口裏有個概念叫token,經過開發者id和密碼調用微信接口生成,2小時內有效。 因此sdk裏有個ApiConfig
類使用單例模式做爲獲取token的工具類。其實現就很少說,看使用的代碼
用於獲取token的代碼
@Service @Slf4j public class WeChatAppid { //把開發者id和密碼寫在配置文件,固然也有寫在數據庫裏的。具體看需求 @Value("${appid}") private String appid; @Value("${appSecret}") private String appSecret; private ApiConfig config; /** * 這樣是爲了讓spring先給appid,appSecret賦值。 */ @PostConstruct private void init(){ log.debug("appid : {} ,appSecret : {}" , appid,appSecret); config = new ApiConfig(appid,appSecret,true); } public ApiConfig getApiConf(){ return config; } }
供前端使用分享的接口 先後分離的項目,因此是這樣的,對於未分離的
@ApiOperation("微信js相關")//swagger接口文檔生成的註解 @GetMapping("wx/conf") public WxConf jsApi(HttpServletRequest request){ String url = request.getHeader("Referer"); if (StringUtils.isBlank(url)){ url = request.getRequestURL().toString(); } JsAPI jsAPI = new JsAPI(weChatAppid.getApiConf()); return new WxConf(weChatAppid.getApiConf().getAppid(),jsAPI.getSignature(url)); }
// 用於和前端對接的實體類 public class WxConf extends Resp implements Serializable,Response { private String appid; private GetSignatureResponse jsApi; public WxConf(String appid, GetSignatureResponse jsApi) { this.appid = appid; this.jsApi = jsApi; } }
前端使用---木有。。。。 應該再把前端用的代碼貼出來的,不過這個項目是幫忙
的,前端代碼沒在我這。 不過我這有個傳統的項目暫且看下
<script th:inline="javascript"> /*<![CDATA[*/ var appid = /*[[${appid}]]*/ ""; var openid = /*[[${openid}]]*/ ""; var api = /*[[${api}]]*/ {}; var phone = /*[[${phone}]]*/ ""; var shareUrl = /*[[${shareUrl}]]*/""; /*]]>*/ function share_data() { return { title: 'BMW歸國留學(進修)人員專屬禮遇', desc: '留學生免稅購車方案', link: shareUrl, imgUrl: "http://" + window.location.host + "/share.jpeg", success: function () { $.get("/share/" + openid + "/" + phone); }, cancel: function () {} } }; wx.config({ appId: appid, timestamp: api.timestamp, nonceStr: api.noncestr, signature: api.signature, jsApiList: [ 'showOptionMenu', 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'previewImage', 'getLocation' ] }); wx.ready(function () { wx.showOptionMenu(); wx.onMenuShareTimeline(share_data()); wx.onMenuShareAppMessage(share_data()); wx.onMenuShareQQ(share_data()); wx.onMenuShareWeibo(share_data()); }); </script>
微信開發真的很簡單,但有幾點須要注意:
fastweixin這個sdk,經常使用基本夠用了,集羣的話還須要再在一些開發。