微信小程序從注冊(cè)賬號(hào)到上架(圖文詳解)
前言
自從微信小程序功能發(fā)布后,我就一直關(guān)注著小程序的動(dòng)向,然而限于學(xué)業(yè)繁忙,總是沒(méi)有太多的時(shí)間去學(xué)習(xí)。大二逐漸學(xué)習(xí)了Vuejs,被其簡(jiǎn)潔的設(shè)計(jì)所吸引,后來(lái)看了看小程序的開(kāi)發(fā)文檔,發(fā)現(xiàn)這么的相似?可能前端的發(fā)展趨勢(shì)就是這樣的吧,各個(gè)框架都趨向于相似的優(yōu)秀的設(shè)計(jì)。
大三逐漸學(xué)習(xí)了Go語(yǔ)言,為了練習(xí)Go語(yǔ)言,同時(shí)也將自己幾年來(lái)積累的東西聚合在一起,于是開(kāi)發(fā)了微信小程序:We中南(可以去微信搜索,雖然現(xiàn)在畢業(yè)已經(jīng)不打算維護(hù)了),其聚合了中南大學(xué)校內(nèi)常見(jiàn)的信息查詢(xún)功能,如:成績(jī)課表查詢(xún)、校車(chē)校歷查詢(xún)等項(xiàng)目已經(jīng)在我的Github開(kāi)源:前端、后端。
We中南、SCI期刊IF查詢(xún)

今年暑假的某天突然心血來(lái)潮,看了下We中南的數(shù)據(jù)統(tǒng)計(jì),發(fā)現(xiàn)還是有人用的,在沒(méi)有推廣的情況下居然增加了好幾百的訪問(wèn)量(突然的感動(dòng)),同時(shí)發(fā)現(xiàn)小程序支持云函數(shù)開(kāi)發(fā)了,也就是說(shuō)對(duì)于小型的小程序不必使用后端服務(wù)器,直接使用其提供的nodejs環(huán)境進(jìn)行開(kāi)發(fā)。
經(jīng)過(guò)這些天的摸索,我想把自己從小程序注冊(cè)到上架的全過(guò)程分享出來(lái),供準(zhǔn)備學(xué)習(xí)小程序的同學(xué)參考。
準(zhǔn)備工作
1. 注冊(cè)微信小程序賬號(hào)
點(diǎn)擊傳送門(mén)立馬注冊(cè)微信小程序賬號(hào)。點(diǎn)進(jìn)去后會(huì)看到如下界面,選擇注冊(cè)類(lèi)型時(shí)要選擇微信小程序。
注冊(cè)界面

接著填寫(xiě)相關(guān)的信息即可完成注冊(cè)。
注冊(cè)界面-填寫(xiě)信息

在完成注冊(cè)后,切換到開(kāi)發(fā)->開(kāi)發(fā)設(shè)置,可以查看開(kāi)發(fā)者ID。
AppID

2. 下載開(kāi)發(fā)者工具,新建項(xiàng)目
進(jìn)入傳送門(mén),下載安裝最新版的開(kāi)發(fā)者工具。使用開(kāi)發(fā)者工具,開(kāi)發(fā)者可以完成小程序的 API 和頁(yè)面的開(kāi)發(fā)調(diào)試、代碼查看和編輯、小程序預(yù)覽和發(fā)布等功能。
關(guān)于IDE使用方法的界面,可以詳細(xì)參考官方文檔
接著打開(kāi)開(kāi)發(fā)者工具,修改項(xiàng)目名稱(chēng),填入上面說(shuō)的AppID,后端服務(wù)選擇小程序云開(kāi)發(fā)。
新建小程序項(xiàng)目

新建項(xiàng)目后我們可以看到,IDE已經(jīng)幫我們新建了一個(gè)包含云函數(shù)開(kāi)發(fā)的小程序模板,還提供了一些功能測(cè)試界面。
此時(shí)我們并沒(méi)有開(kāi)通云開(kāi)發(fā),需要點(diǎn)擊IDE左上角的“云開(kāi)發(fā)”,然后選擇開(kāi)通云服務(wù)。
IDE主界面

開(kāi)發(fā)小程序
1. 關(guān)于項(xiàng)目文件結(jié)構(gòu)的介紹
項(xiàng)目結(jié)構(gòu)

項(xiàng)目分為兩個(gè)子文件夾,一個(gè)為cloudfunctions,里面包含小程序的云函數(shù),一個(gè)子文件夾包含一個(gè)云函數(shù);另一個(gè)為miniprogram,是小程序的前端文件夾,沒(méi)有固定的文件夾格式,完全可以通過(guò)對(duì)app.json進(jìn)行修改定制自己的文件夾。具體文件的介紹可以參考官方文檔
2. 修改小程序信息
打開(kāi)miniprogram文件夾下的app.json,其定義了小程序的基本信息。
下面是我的小程序的app.json,我將示例里無(wú)關(guān)的頁(yè)面都刪除了,添加了index主界面和detail詳情頁(yè)。
關(guān)于示例項(xiàng)目的修改:可以直接將pages目錄下除index外的頁(yè)面都刪除,將style、images文件夾下的文件都刪除。
{
"pages": [
"pages/index/index",
"pages/detail/index"
],
"window": {
"backgroundColor": "#F6F6F6",
"backgroundTextStyle": "light",
"navigationBarBackgroundColor": "#F6F6F6",
"navigationBarTitleText": "SCI IF期刊影響因子查詢(xún)2019",
"navigationBarTextStyle": "black"
},
"sitemapLocation": "sitemap.json"
}
3. 新建云函數(shù)!
云函數(shù)最大的優(yōu)勢(shì)便是無(wú)需購(gòu)買(mǎi)服務(wù)器,無(wú)需注冊(cè)域名,并無(wú)需配置SSL證書(shū),真正達(dá)到了開(kāi)箱即用。
在cloudfunctions目錄上又見(jiàn)新建nodejs云函數(shù),即可創(chuàng)建一個(gè)新的云函數(shù),其包含了兩個(gè)文件:package.json、index.js
package.json為一個(gè)標(biāo)準(zhǔn)的npm包,index.js為云函數(shù)的主文件。下面是新建云函數(shù)的初始內(nèi)容,可以看到其首先引入了wx-server-sdk,它為小程序提供了操作云數(shù)據(jù)庫(kù)的能力,接著初始化云函數(shù),export云函數(shù)內(nèi)容。
// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
需要說(shuō)明的是:云函數(shù)包含幾乎完整的nodejs環(huán)境,因此一些常見(jiàn)的nodejs庫(kù)如:requests、chreeio等都可以通過(guò)package.json添加,使用。
4. 為云函數(shù)添加功能
本文的小程序?yàn)镾CI期刊影響因子查詢(xún)的小程序,邏輯較為簡(jiǎn)單,后端僅需要提供一個(gè)期刊查詢(xún)接口,為前端提供相應(yīng)期刊的影響因子即可。
1.新建云函數(shù)http_get
2.引入相關(guān)類(lèi)庫(kù)。在終端中打開(kāi)云函數(shù)http_get的目錄,接著安裝依賴(lài)庫(kù)。由于此函數(shù)利用了第三方的查詢(xún)接口,因此需要使用http請(qǐng)求庫(kù)got和http解析庫(kù)cheerio。具體操作如下
cd /path/to/your/cloudfunctions npm install //安裝wx-cloud-server npm install got --save npm install cheerio --save
3.為函數(shù)添加功能。此處主要是加載相關(guān)類(lèi)庫(kù),解析html,然后將結(jié)果編碼為json返回客戶(hù)端。
// 加載相關(guān)類(lèi)庫(kù)
const cloud = require('wx-server-sdk')
const got = require('got')
const querystring = require('querystring')
const cheerio = require('cheerio')
cloud.init()
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
//sci影響因子查詢(xún)接口
const sci_url = 'some url'
//獲取期刊名稱(chēng)
let sciname = event.sciname
let querys = querystring.stringify({ q: sciname, sci: 1 });
//請(qǐng)求數(shù)據(jù)
let resp = await got(sci_url + String(querys))
//解析html
const $ = cheerio.load(resp.body)
const lists = $(".tb1 tr")
//判斷是否存在查詢(xún)期刊
if (lists.children().length == 0) {
return -1
}else{
let jounalLists = lists.map((i, item) => {
return {
//期刊編號(hào)
no: $(item).children().eq(0).text(),
//省略部分內(nèi)容,解析html參數(shù)
//影響因子解析
if: $(item).children().eq(7).text(),
}
}).get()
return jounalLists //返回解析結(jié)果
}
}
4.調(diào)試云函數(shù)。云函數(shù)的調(diào)試可以通過(guò)云端調(diào)試:IDE界面->云開(kāi)發(fā)->云函數(shù),選擇相應(yīng)的云函數(shù)即可進(jìn)行調(diào)試。點(diǎn)擊調(diào)試后即可返回調(diào)試結(jié)果,可以根據(jù)結(jié)果對(duì)函數(shù)進(jìn)行修改。
云函數(shù)調(diào)試

云函數(shù)調(diào)試

同時(shí)也可以通過(guò)本地環(huán)境調(diào)試云函數(shù):在cloudfunctions下相應(yīng)函數(shù)文件夾點(diǎn)擊“本地調(diào)試”即可進(jìn)行調(diào)試,相比于云端調(diào)試,本地調(diào)試更加便捷,也無(wú)需每次調(diào)試前上傳云函數(shù)到服務(wù)器。但需要注意的是:請(qǐng)?jiān)谠坪瘮?shù)目錄下執(zhí)行npm install完成相關(guān)類(lèi)庫(kù)安裝,然后才能進(jìn)行調(diào)試。
云函數(shù)調(diào)試
5. 添加小程序頁(yè)面
小程序的每個(gè)頁(yè)面都包含四個(gè)文件:.js、.json、.wxml、wxss。js負(fù)責(zé)程序邏輯、json配置頁(yè)面參數(shù)、wxml定義頁(yè)面結(jié)構(gòu)、wxss定義頁(yè)面樣式。這就相當(dāng)于將HTML頁(yè)面拆分為.html、.css、.js。
由于小程序是運(yùn)行在微信內(nèi)的webview環(huán)境,因此其語(yǔ)法與html有所不同,可以參考官方文檔:傳送門(mén)
為了方便頁(yè)面構(gòu)建,本文引入了一個(gè)第三方類(lèi)庫(kù):Vant,其提供了精美的界面元素,開(kāi)箱即用,詳細(xì)使用方法可以參見(jiàn)vant官方文檔。
最終小程序主界面如下所示:
小程序界面

其對(duì)應(yīng)的代碼如下:
頁(yè)面結(jié)構(gòu)
<!--index.wxml-->
<view class='head_img'>
<van-cell-group custom-class="cell_group">
<van-field
custom-class="cell_filed"
value="{{ sciname }}"
placeholder="期刊名稱(chēng)/首字母/縮寫(xiě)/ISSN"
border="{{ false }}"
focus="true"
bind:change="onValueChange"
/>
</van-cell-group>
</view>
<view class="container">
<view class="btn-area">
<van-button type="info" size="large" round="true" bind:click="onClickQuery" loading="{{isQuery}}">查詢(xún)</van-button>
</view>
<view wx:if="{{sci.length>0}}">
<van-cell-group title="共找到{{sci.length}}本期刊">
<view wx:for="{{sci}}"wx:for-index="idx" wx:for-item="item" wx:key="idx">
<van-cell title="{{item.sciname}}"
value="{{item.if}}" border="false"
title-width="80%"
is-link link-type="navigateTo"
url="/pages/detail/index?id={{idx}}"/>
</view>
</van-cell-group>
</view>
</view>
頁(yè)面邏輯:
//index.js
const app = getApp()
Page({
data: {
isQuery:false,
sciname:'',
sci:[],
},
onValueChange:function(value){
this.setData({
sciname:value.detail
})
},
onClickQuery:function(){
var _this = this
this.setData({
isQuery:true
})
console.log('begin'+_this.data.sciname)
wx.cloud.callFunction({
name: 'http_get',
data: {
sciname:_this.data.sciname
},
success:res=>{
//未查到
if(res.result==-1){
wx.showModal({
title: '提示',
content: '未查詢(xún)到相關(guān)信息,換個(gè)關(guān)鍵詞試試?',
})
}else{
wx.setStorageSync('scis', res.result)
_this.setData({
sci:res.result
})
}
_this.setData({
isQuery: false
})
},
fail:err=>{
_this.setData({
isQuery: false
})
console.log(err)
},
})
},
onLoad: function() {
},
//省略部分代碼
})
按照同樣的方式,我又添加了詳情頁(yè),對(duì)于每一本期刊的詳細(xì)信息進(jìn)行展示。
部署
1. 上傳項(xiàng)目文件
首先對(duì)于每個(gè)云函數(shù),都要右鍵,點(diǎn)擊“上傳并部署:云端安裝依賴(lài)”(當(dāng)然上傳并部署所有文件也可以)。接著點(diǎn)擊IDE右上角的上傳,填寫(xiě)版本信息,即可完成上傳。
登錄到微信公眾平臺(tái)的管理界面,切換到版本管理,我們便可以看到已經(jīng)提交的版本。
小程序?qū)徍?/p>
2. 填寫(xiě)小程序信息
在管理界面首頁(yè)寫(xiě)著小程序發(fā)布流程,我們需要先補(bǔ)充小程序的基本信息,如名稱(chēng)、圖標(biāo)、描述等,當(dāng)小程序信息。微信官方一般會(huì)在7日之內(nèi)完成審核,我新注冊(cè)的小程序?qū)徍擞昧藘商鞎r(shí)間。
3. 提交審核
審核完成之后,即可提交審核。切換到版本管理界面,對(duì)剛剛上傳的版本提交審核,注明版本信息即可。審核也需要幾天的時(shí)間。
結(jié)語(yǔ)
由于已經(jīng)有過(guò)一次開(kāi)發(fā)經(jīng)驗(yàn),本次的注冊(cè)和編碼工作只用了一個(gè)下午,但程序?qū)徍舜_實(shí)十分的耗時(shí),需要耐心的等待。
本程序也發(fā)布在github上了:傳送門(mén)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JS前端接口防止重復(fù)請(qǐng)求的三種實(shí)現(xiàn)方案
前段時(shí)間心血來(lái)潮,想把項(xiàng)目的前端都做一下接口防止重復(fù)請(qǐng)求的處理,雖然大部分的接口處理我們都是加了loading的,但又不能確保真的是每個(gè)接口都加了的,下面就來(lái)總結(jié)一下這次的防重復(fù)請(qǐng)求的實(shí)現(xiàn)方案,需要的朋友可以參考下2024-03-03
Bootstrap菜單按鈕及導(dǎo)航實(shí)例解析
這篇文章主要介紹了Bootstrap菜單按鈕及導(dǎo)航的相關(guān)資料,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-09-09
JavaScript實(shí)現(xiàn)函數(shù)返回多個(gè)值的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)函數(shù)返回多個(gè)值的方法,涉及javascript字典類(lèi)型的使用技巧,需要的朋友可以參考下2015-06-06
微信小程序使用GoEasy實(shí)現(xiàn)websocket實(shí)時(shí)通訊
這篇文章主要介紹了微信小程序使用GoEasy實(shí)現(xiàn)websocket實(shí)時(shí)通訊的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05

