記一次外包項目微信接口開發流程-spring-boot

近期幫朋友作了幾個用到微信公衆號接口的活,因此總結下。javascript

1、微信公衆號後臺配置

公衆號分訂閱號,服務號,企業號,能夠調用的接口權限各不相同,這裏就不贅述,參考官方說明html

  1. 登錄公衆號後臺,有接口權限,作爲開發人員在開發前必定要先確認是否有接口權限。
  2. 白名單配置:調用接口的服務器必需要在公衆號後臺把服務器ip配置進去,不然調用接口失敗。 ->基本設置->白名單配置
  3. 獲取開發者id和密碼,也就是appid,AppSecret,這2個調用接口必須的參數。
  4. 若是用當網頁相關的接口,須要配置域名,在 設置->公衆號設置->功能設置 裏有域名相關的配置,若是不配置相關域名,會提示簽名錯誤,而且使用未綁定微信公衆號的域名,在微信打開會有微信給的不安全提示,很噁心。
  5. 若是須要對接微信自動回覆,按鈕事件,就須要在 基本設置 ->服務器配置裏配置接收微信請求的地址。

實際上開發時生產用的公衆號是不容許用來調試接口,因此微信公衆號提供了微信測試號公衆號後臺 -> 公衆平臺測試賬號 -> 按照指示,就能夠擁有全部接口權限的測試號。前端

二. 開發

1. 選擇一個sdk或本身開發一個sdk

Software Development Kit 簡稱 SDK,這裏指的sdk就是封裝了微信公衆號api的代碼包。java

也許是由於網上太多的開源的微信sdk,因此至今沒有官方出的微信公衆號的sdk。so,爲了簡化開發,咱們能夠直接網上找個開源的sdk,例如 fastweixin,jfinal-weixin,基本上均可以說開箱機用。mysql

在咱們公司是使用本身開發的一套sdk,由於是幫朋友,因此就用了網上的一套fastweixin。選用這個sdk,緣由有:git

  1. 用的人多,表明好用,穩定
  2. 開源,研究過源碼,能夠根據需求二次開發

2. 引入sdk

引入fastweixin,能夠經過連接直接到首頁進去查看。不過那個引入方式只是講了如何去自動回覆微信公衆號消息。github

先說個人需求(使用的接口) 其實用到就是微信分享接口(微信js),獲取微信用戶頭像(受權接口)。spring

1> 新建項目

小項目小需求的快速開發,那就用spring boot嘍。我用的IDE是IDEA,新建項目直接選 spring initializer,其實是經過https://start.spring.io/動態的生成了基礎的代碼,而後下載到你本地解壓。很方便的功能sql

2> 項目依賴

經過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>

3> 調用sdk,提供前端調用接口

微信接口裏有個概念叫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;
	}
}

4> 前端使用。。

前端使用---木有。。。。 應該再把前端用的代碼貼出來的,不過這個項目是幫忙的,前端代碼沒在我這。 不過我這有個傳統的項目暫且看下

<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>

總結

微信開發真的很簡單,但有幾點須要注意:

  1. 開發測試時直接用微信測試號,那個能夠免去不少配置,例以下面的配置在開發期間就不用配置了
  2. 後臺ip白名單的配置,能夠多配置幾個,開發的,生產的,測試的服務器都配置上
  3. 域名要用備案的,域名要配置到js接口,業務,受權,最多3個地方用於配置,根據業務的需求來,配置的時候須要在域名下部署一個txt文件,若是都是一個域名,部署一次就能夠了。
  4. 微信開發者工具是個不錯的微信開發測試工具,能夠直接看到js接口哪一個錯了。

fastweixin這個sdk,經常使用基本夠用了,集羣的話還須要再在一些開發。

相關文章
相關標籤/搜索