最近做的小程序項(xiàng)目需要打通微信會(huì)員卡模塊,就仔細(xì)研究了卡券這一塊,踩了很多的坑胧后,網(wǎng)上能查到的東西也是比較少,因此在這里寫(xiě)點(diǎn)東西希望能幫到需要的猿們抱环,我后臺(tái)用的是php壳快。
先貼上微信的文檔
第一步就是申請(qǐng)開(kāi)放平臺(tái),并綁定創(chuàng)建卡券的公眾號(hào)和你的小程序镇草,當(dāng)然公眾號(hào)和小程序都需要認(rèn)證通過(guò)
這里就有點(diǎn)坑了眶痰,2.1綁定開(kāi)放平臺(tái)按照官方步驟一點(diǎn)點(diǎn)來(lái)唄,基本就是掃碼確認(rèn)就可以了梯啤。
2.2中使用的卡券(cardId)必須是綁定開(kāi)放平臺(tái)之后竖伯,再行創(chuàng)建的卡券,如果先創(chuàng)建卡券在綁定開(kāi)放平臺(tái),這個(gè)卡券在小程序中是不可以調(diào)用的七婴,2.3說(shuō)到的“以小程序AppId調(diào)用添加/查看卡券JS-API祟偷,簽名參數(shù)與公眾號(hào)Addcard/Opencard JS-SDK一致;”這個(gè)小程序調(diào)用只是在.js文件中調(diào)用打厘,不用管APPId的事修肠,只是后臺(tái)處理的還是需要用公眾號(hào)的AppID;
第三步是設(shè)置卡券跳轉(zhuǎn)小程序的相關(guān)設(shè)置
這兩個(gè)參數(shù)是設(shè)置領(lǐng)取后激活會(huì)員卡跳轉(zhuǎn)的參數(shù)
這兩個(gè)參數(shù)是設(shè)置會(huì)員卡詳情那個(gè)位置的跳轉(zhuǎn)參數(shù)
設(shè)置這兩個(gè)參數(shù)就可以了? 再多的也沒(méi)用
這里是小程序.js中調(diào)用wx.addCard, wx.openCard婚惫,api接口了
下面先說(shuō)wx.addCard,接口吧
這里是cardExt的主要參數(shù)氛赐,這些參數(shù)需要請(qǐng)求后臺(tái)處理
參數(shù)signature是卡券的簽名,獲取卡券簽名當(dāng)然也有官方文檔的如下
這里的openid是對(duì)應(yīng)小程序的openid先舷,這里有個(gè)參數(shù)是api_ticket,卡券 api_ticket 是用于調(diào)用卡券相關(guān)接口的臨時(shí)票據(jù)艰管,有效期為 7200 秒,通過(guò) access_token 來(lái)獲取蒋川。這里要注意與 jsapi_ticket 區(qū)分開(kāi)來(lái)牲芋。由于獲取卡券 api_ticket 的 api 調(diào)用次數(shù)非常有限,頻繁刷新卡券 api_ticket 會(huì)導(dǎo)致 api 調(diào)用受限捺球,影響自身業(yè)務(wù)缸浦,開(kāi)發(fā)者必須在自己的服務(wù)全局緩存卡券 api_ticket 。
貼上一段獲取?jsapi_ticket的代碼
//獲取公眾號(hào)access_token
function wx_get_token() {
? ? $token = cache('access_token');
? ? if(empty($token)){
? ? ? ? $appid="**";//公眾號(hào)appid
? ? ? ? $AppSecret="***";//公眾號(hào)秘鑰
? ? ? ? $res = https_request('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$AppSecret);
? ? ? ? $res = json_decode($res, true);
? ? ? ? $token = $res['access_token'];
? ? ? ? cache('access_token',$token,7200);
? ? }
? ? ? ? return $token;
? ? }
//獲取api_ticket
function get_api_ticket(){
? ? $api_ticket = cache('api_ticket');
? ? if(empty($api_ticket)){
? ? ? ? $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=". wx_get_token()."&type=wx_card";
? ? ? ? $res = json_decode(https_request($url),TRUE);
? ? ? ? $api_ticket = $res['ticket'];
? ? ? ? cache('api_ticket',$api_ticket,7200);
? ? }
? ? return $api_ticket;
}
獲取這些參數(shù)后氮兵,其中nonce_str這個(gè) 參數(shù)不是必要的參數(shù)裂逐,如果獲取signature沒(méi)用到nonce_str,就不用返回這個(gè)參數(shù)
//獲取加密數(shù)據(jù)
? ? function get_signature($data){
????????sort($data,SORT_STRING );
????????return sha1(implode($data));
}
附上一段獲取signature的函數(shù)代碼泣栈,$data是參數(shù)組成的數(shù)組卜高。
在小程序JS中調(diào)用wx.addCard成功后返回參數(shù)
主要這里的接口是個(gè)數(shù)組,處理的時(shí)候注意一下南片。返回的code是加密的需要調(diào)用官方文檔的接口解密掺涛,之后就得到你的會(huì)員卡號(hào)了。
下面就是會(huì)員卡激活的問(wèn)題了疼进,這里涉及到小程序開(kāi)卡的接口薪缆;
重要的坑說(shuō)一下,如果你是自定義的code(也就是"use_custom_code"為true的時(shí)候)伞广,不能調(diào)起小程序的開(kāi)卡組件(也就是你看不到下面頁(yè)面的)拣帽。也就是只有使用系統(tǒng)的code才能調(diào)起開(kāi)卡組件
想調(diào)起開(kāi)卡組件的朋友往下看吧,沒(méi)興趣的可以結(jié)束了
開(kāi)卡組件官方給了四個(gè)接口嚼锄,
接口1:獲取開(kāi)卡插件參數(shù)
這個(gè)接口只有不是自定義code是才能調(diào)用成功
注意事項(xiàng) 1.本接口返回的參數(shù)須原封不動(dòng)地填入開(kāi)卡插件接口诞外,須做urldecode操作;
這個(gè)注意事項(xiàng)不是我說(shuō)的是官方給的灾票,剛開(kāi)始看也是一臉懵逼,聲明一下 官方給的返回url參數(shù)是不對(duì)的茫虽,正確的參考上圖刊苍;返回的url參數(shù)需要先進(jìn)行urldecode操作既们,在進(jìn)行下一步處理
接口2:小程序內(nèi)打開(kāi)開(kāi)卡插件的接口
這個(gè)接口其實(shí)就是小程序的 跳轉(zhuǎn)小程序的API,看看需要的參數(shù)
這個(gè)APPid是官方固定的的不要改就行正什,至于extraData這個(gè)參數(shù)看下圖
這是官方的文檔啥纸,問(wèn)題的難點(diǎn)就是encrypt_card_id outer_str biz這幾個(gè)參數(shù)在哪獲取 記得上一步的 接口1中的返回參數(shù)URl嗎?那個(gè)參數(shù)urldecode操作后是這樣的
看到你想要的的參數(shù)了吧? 直接獲取就行了婴氮,傳到小程序.js中是這樣的
這樣操作就會(huì)出現(xiàn)圖10的頁(yè)面了
基本就到這里了斯棒,由于我做的是自定義code的,關(guān)于獲取用戶字段接口都沒(méi)用到主经,順便提醒需要用開(kāi)卡組件的荣暮,記得設(shè)置用戶開(kāi)卡時(shí)填寫(xiě)的開(kāi)卡字段。
第一次寫(xiě)文章有點(diǎn)亂罩驻,希望可以幫到你啊 有什么問(wèn)題可以留言交流