淺談微信卡券功能開發(1)


閑扯

    由於公司的業務,有幸接觸到了微信平台的開發,不得不感慨下,微信的業務規划實在是宏大的很呢。看來微信是想涉及生活的各個方面啊,再加上最近微信封殺各路豪傑(網易音樂、支付寶錢包)等,不難看出微信在產品規划上的野心。

    貌似閑話說的太多了,接下來我就我自己對於微信卡券功能的開發經驗進行簡單的介紹,在微信開發的交流群中也看到很多新手開發者遇到的問題,希望本文能夠幫助剛接觸微信卡券的同學盡快的入門卡券功能開發,由於鄙人是NODEJS碼農,所以本文主要以NODEJS為開發語言,其他語言的開發者可以飄過~或者借鑒~~

    又一段閑話...(年紀大了,話嘮了),先簡單的介紹下微信卡券功能,卡券,說白了就是各種各樣的優惠券,會員卡,以及各種票據等等等等,涉及的方面很廣,就目前接觸到的開發者來看,大多數都是對於各類優惠券的開發,其他的種類比較少了。

    首先使用卡券功能,需要現在微信公眾號平台中開啟卡券功能。具體的開啟步驟就不詳述了,文檔里面介紹的很詳細(對了,附下官方文檔下載地址),下面開始聊一聊開發步驟。

 

准備

    微信提供了對於卡券的操作和管理接口,實質上就是向各個接口發送請求,最簡單的,你都可以在html種建立個表單,然后填寫接口需要的數據,然后POST或者GET到微信的接口地址就可以了。但是,通常我們不會這樣做,因為我們的業務中可能有很多需求是微信接口無法滿足的,有些信息是需要我們自己管理的。

    在開發中,我們借助到了一個NodeJS的module,當然,大家也可以直接使用nodejs的request發送請求,但是畢竟有好多需要注意的東西,module會幫我們考慮到,我在下文也會將需要注意的地方進行說明,以便其他語言開發能夠注意到。

 

Access Token

    首先我們先通過npm安裝一個module。不想使用module的同學自行略過本步驟。

    Module為 wechat-card, 可以到github上查看其相關文檔,遺憾的是,這個module目前僅支持大多數的優惠券和紅包,對於會員卡還有其他的門票類卡券並不支持。相信之后的版本應該會完善的,好在這些類型已經可以滿足基本使用了。

    npm install wechat-card --save

    ok, 完整完成后要進行一個全局的設置。

    var wxCard = require("wechat-card");

    wxCard.setConfig({
        appId: "wxXXXXXXX",
        appSecret: "bulabulabulabula"
    });

    這里有東西要進行說明:首先這里有兩個量說明下,appId和appSecret,這兩個量可以在微信MP平台的開發者中心中得到,他們兩個雖然只是路人,但是,他們兩個會創造出一個結晶,叫做access_token,這個可是一個非常重要的而且脾氣古怪的小朋友了。說他重要,因為他貫穿整個接口,不僅僅是卡券會用到,所以微信平台的接口都可能會使用到他;說他脾氣古怪,是因為他有個特別的屬性,7200秒(2小時)會過期,而且每天只能請求2000次。那么,這就要求我們要去管理access_token的生成,定時去刷新他。如果使用上述的NODEJS MODULE的話,只需要在setConfig中配置appId和appSecret,Module就會自動為我們管理Token了。

    題外話,如果我們的產品中不僅僅用到了微信卡券功能,還使用到了其他的微信功能,而這些功能中也用到了access token,那么這時候就不可以將token交由某個功能區管理了,因為當一邊刷新access  token以后,另一邊的就會失效,針對這種情況,我們應該有一個服務來為各個功能提供access token,那么這里不可以配置appId和appSecret了,Module提供了另外一個配置:

    wxCard.setConfig({
        accessTokenService: "http://xxxx.xxxx.xxx/xxx"
    });

    這里通過配置一個公開的服務來獲取access token,需要注意的是,這里的2小時過期,以及請求次數都需要這個服務自行去管理了。

 

創建門店

    我們在創建卡券之前,需要先創建門店。這里我們先解釋下,門店,其實就是實際商戶下的店面,舉個栗子,肯德基就是一個商戶,那么肯德基北京西站店就是一個門店,我們的卡券會有一個”適用門店“的選項需要對應各個門店。所以我們需要先創建各個門店以備適用。

    查看官方文檔我們可以了解到一個創建門店的接口:

    https://api.weixin.qq.com/card/location/batchadd?access_token=TOKEN

    前面我們介紹了獲取access token的方法,這里我們可以看到token的用途,在請求每一個接口時都需要附帶token。我們可以直接向接口發送請求來完成操作。這里我們使用Module來進行創建門店:

    // Demo數據,具體的字段含義,可以參加Wechat-Card的GITHUB或者官方文檔
    var shops = [{
        "business_name":"麥當勞", 
        "branch_name":"赤崗店",
        "province":"廣東省",
        "city":"廣州市",
        "district":"海珠區", 
        "address":"中國廣東省廣州市海珠區藝苑路 11 號", 
        "telephone":"020-89772059", 
        "category":"房產小區",
        "longitude":"115.32375",
        "latitude":"25.097486" 
    }, {
        "business_name":"麥當勞", 
        "branch_name":"珠江店",
        "province":"廣東省",
        "city":"廣州市",
        "district":"海珠區", 
        "address":"中國廣東省廣州市海珠區藝苑路 12 號", 
        "telephone":"020-89772059", 
        "category":"房產小區",
        "longitude":"113.32375",
        "latitude":"23.097486"
    }];

    wxCard.shop.batchAddShops(shops, function(err, ids) {
        // 這里添加成功了,ids為添加的門店的ID
    });

    這里需要說明的是:添加成功后,回到函數返回值ids為之前添加數據對應的id,如果其中有數據添加失敗了,那么對應的ID為-1.

 

查詢門店列表

    和創建門店相同,我們可以獲取到已經添加的門店列表。接口為:

    https://api.weixin.qq.com/card/location/batchget?access_token=TOKEN

    Module中的查詢方法為:

    // 微信提供的查詢方法為一種分頁式的查詢方法
    // offset為起始記錄的位置,count為返回數據的數量
    var offset = 0, count = 10;
    wxCard.shop.batchGetShops(offset, count, function(err, shops) {
        // 查詢成功,shops為返回的信息
    });

    這里需要說明的是:微信限制了最大返回的數量為50,即count最大值為50,接口返回的字段可以參考Module文檔或者官方文檔。

 

小結

    時間不早了,明天還得上班~~這一篇先寫到這,其他的接口大家可以參照本文中介紹的方法進行嘗試,方法都是大同小異的,也可以參考Module文檔,作為一個入門的經驗,希望可以幫助到大家。如果其中有什么錯誤或者不好的地方, 希望大家能夠指明,萬分感謝,明晚咱們繼續~~

 

轉載請注明出處,原網頁http://www.cnblogs.com/kenticny/p/4285190.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM