<h5 id="1">小程序注冊<h5>
注冊地址:https://mp.weixin.qq.com/
一般小程序的注冊主體是企業(yè),政府,媒體,其他,但是不包含個人
.所以如果想要個人開發(fā)的話, 找個分享群, 說不定別人給你一個測試的名額
<h5 id="2">小程序API</h5>
最重要的其實就是完整的看一遍
小程序的開發(fā)規(guī)范和api, 很多問題其實都在文檔中有一些標(biāo)注和說明.
文檔地址:https://mp.weixin.qq.com/debug/wxadoc/dev/index.html
<h5 id="3">下載開發(fā)工具</h5>
地址:https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html?t=201715
此頁面同時也是更新日志的發(fā)布點.
<h5 id="4">未注冊如何開發(fā)</h5>
微信開發(fā)工具的說明是:
開發(fā)者需要使用已在后臺綁定成功的微信號掃描二維碼登錄
但是如果沒有注冊過的,可能就真的不能使用微信的工具了. 但是可以回歸原始的變成方式, 直接使用txt..或者可以加一些小程序開發(fā)的群,有些會有共享的.
<h5 id="5">域名/證書問題</h5>
一般遇到的情景是開發(fā)工具和ios中能夠獲取到數(shù)據(jù),但是android不行, 大部分的原因就是網(wǎng)站證書設(shè)置的問題. 不論是ssl還是tsl, 小白搞不明白, 可以簡單的幾個步驟檢查.
- chrome打開網(wǎng)址[沒有chrome的自己下載].
- 點擊網(wǎng)址左側(cè)的
綠色
鎖, 彈出窗口, 點擊 詳細(xì)信息.
-
底部彈出窗口. 找到類似ssl,tsl字樣.
- 說明是支持到1.2的. 微信api中有說明, 最好是1.2版本,并且支持1.0,1.1舊版本.
- 如果網(wǎng)址上查看是1.2 ,問題沒有解決, 只能查看網(wǎng)絡(luò)服務(wù)器的配置了.找網(wǎng)絡(luò)
<h5 id="6">小程序如何獲取用戶信息,openid,unionid</h5>
一般獲取用戶信息,就是頭像之類的, 如果要做自己的用戶系統(tǒng)那么就需要用戶的openid.
//app.js
App({
onLaunch: function() {
wx.login({
success: function(res) {
if (res.code) {
//發(fā)起網(wǎng)絡(luò)請求
wx.request({
url: '你的域名api',
data: {
code: res.code/* code用來交換得到用戶openid的 */
}
})
} else {
console.log('獲取用戶登錄態(tài)失斈幼丁!' + res.errMsg)
}
}
});
}
})
后臺部分偽代碼
// 1. 得到前臺傳遞的code
String code = getParam("code");
// 2. 調(diào)用微信接口(WX_LOGIN_URL=https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code), 需要替換一下appid等, JSCODE就是獲取到的code
String url = WX_LOGIN_URL.replace("APPID", '小程序的appid').replace("SECRET", '小程序的AppSecret,注意保管,微信是不會保存的').replace("JSCODE", code);
// 3. 調(diào)用接口
JSONObject json = HttpPostUtils.sendForm(url);
// 4. 得到返回值
String session_key = json.getString("session_key");
String openid = json.getString("openid");
如果要校驗用戶是否正確啊之類的還需要校驗簽名, signature;
- 校驗簽名
- 獲取用戶unionid, 要獲取unionid,必須在開發(fā)者平臺綁定小程序, 如果綁定了其他公眾號, 可以共用用戶信息.
wx.getUserInfo({
success: function (userData) {
wx.request({
url: '你的api',
data: {
code:loginData.code,/** code */
rawData: encodeURI(userData.rawData),/** 未加密用戶數(shù)據(jù) */
signature: userData.signature,/**簽名 */
encryptedData:userData.encryptedData,/**加密之后的用戶數(shù)據(jù) */
iv:userData.iv /** 加密算法向量 */
},
method: 'POST',
success: function(res){
/* 服務(wù)器返回 */
}
})
}
})
所需要的openid和unionid其實就藏在encryptedData中.
如何解密
? 網(wǎng)上一大堆.
<h5 id="7">開發(fā)遇到的問題</h5>
- 小程序的布局
推薦使用flex. 網(wǎng)上百度一下, 很多flex教程, 也有一些插件. 這里我偷懶貼一個:
http://coffcer.github.io/flex-layout/# - 數(shù)據(jù)傳遞
小程序分為顯示層wxml,數(shù)據(jù)層js, 數(shù)據(jù)要在xml中展示, 必須使用this.setData({}),其他的都是偽科學(xué). - 小程序不支持刪除布局, 也就是說只能增加結(jié)構(gòu),最多是隱藏, 不會刪除.
- 證書沒毛病,工具和ios都可以解析返回的數(shù)據(jù), 但是android不行.
解析返回值, 轉(zhuǎn)化為json結(jié)構(gòu),
if(typeof (data) == 'string'){
data = JSON.parse(xx)
};
- 小程序支持animate.
- 目前2017.01.10為止,android中的textarea還是有問題.多行輸入的時候使用form提交, 由于textarea的層級比button的高所以不能點中button,雖然微信開放了鍵盤的完成按鈕, 點擊完成后,會提交數(shù)據(jù).
變通方法, 是bindinput方法監(jiān)控輸入, 但是這樣一來就不能獲取formId, 也就不能發(fā)送外部消息了.不過一般場景可能也用不到這個.. - 重復(fù)的結(jié)構(gòu),最好提取為單獨的wxml,然后引用.
- formId只有真機下才有.
- 不能動態(tài)變更樣式, 所以設(shè)置css, 只能將style當(dāng)成參數(shù)傳遞.
- scroll-view中滾動, 不會觸發(fā)onPullDownRefresh
- 跳轉(zhuǎn)的頁面是tabbar時,一定要用wx.switchTab, wx.navigateTo不能跳轉(zhuǎn)到被設(shè)置為tabbar的頁面
- json是否包含某字段:data.hasOwnProperty('id')
- 數(shù)組添加數(shù)據(jù)list.push(xxx), 刪除可以用Array.splice()
- wx.request全部都是異步調(diào)用, 沒有阻塞方法,不過可以使用一個超長的toast.
wx.showToast({
title: '成功',
icon: 'success',
duration: 20000000000/*??*/
})
// 取到值了.
setTimeout(function(){
wx.hideToast()
},300)
- wx.request,調(diào)用接口, 后臺收不到數(shù)據(jù).仔細(xì)閱讀接口說明..
<h5 id="8">其他</h5>
一些小插件:
小程序內(nèi)部通知插件,https://weappdev.com/t/wxnotificationcenter/233/4
更多資料訪問:https://weappdev.com/
這個真心是免費幫別人推廣了.\(o)/~