响应式网页设计、开放源代码、永久使用、不限域名、不限使用次数

微信小程序精品源码(合集)2篇

2024年微信小程序精品源码 篇1

序:北漂做了几年的程序猿,英语水平极差,所以在程序上没有太高的造诣,但是还是想把自己所能做的的记录下来。

下边来完成一个微信小程序的车辆违章查询,在最后我会放上源码链接,所以内容上就不对代码做太多解释,只说下思想。

1:数据来源,车辆违章查询的数据来源想到的就是三方接口,那么我选择的是以前做公众号开发时候时候的聚合数据(API数据接口_开发者数据定制),注册申请。

进入全国车辆违章查询可以看到三个接口:1:获取支持城市参数接口 2:请求违章查询接口3:接口剩余次数请求。有了这三个接口就可以实现一个简单的车辆违章查询了。

2:微信小程序,有了数据的来源就等于有了灵魂,之后就是怎样利用数据源来实现了,首先就是小程序的学习。安装以及创建项目。查看文档(https://mp.weixin.qq.com/debug/wxadoc/dev/?t=1476197488080)

个人建议先把文档看一遍,这一遍并不是要记住文档,而是要在脑子里对小程序有一个初步的印象,更重要的是建立一个索引目录,之后开发的时候能够根据目录索引到具体位置。

一遍文档看下来,首先想到的是需要哪些知识才能开发

懂一点html,css,js,每个页面包括一个js,ixml,wuss

之前有对react native (react native)了解点,发现在页面与数据交互上有很多的相似,建议有兴趣的可以看了解一下,有助于理解。

API方面因为之前做过公众号开发,所以看了一下应该是wxjs的接口开放。

安装创建工程根据文档来就好了,因为没有内测号就只能创建一个无appid的项目

下载IDE创建项目:MyCar

ui方面需要三个:主页,添加查询车辆信息页,查询页

在app.json中加入三个页面

"pages": [

"pages/home/home",

"pages/addcar/addcar",

"pages/query/query"

]

主页需要展示添加查询车辆列表以及添加车辆

点击添加车辆需转到添加页面

在wxml中添加按钮的组建对应的js中实现对页面的跳转

home.wxml:

<view wx:if="{{surplus >= 0}}">

<button type="default" bindtap="bindtapAdd" hover-class="other-button-hover"> 添加车辆 </button>

</view>

home.js:

bindtapAdd:function(){

wx.navigateTo({

url: '../addcar/addcar'

})

},

在添加页面要做的是将车辆信息缓存的微信的本地,那么就需要使用聚合的接口来获取支持的城市供用户选择,获取聚合的数据后需要做一个二级联动,由于还没有太多时间来研究wxcss所以页面做的比较粗糙。

当用户填好数据后存储到数据缓存,这里涉及到两个知识点一个是请求url一个是数据缓存

请求可查询城市数据

requestCitys:function(){

var page = this;

wx.request({

url: 'http://localhost:3000/wz/citys',

header: {

'Content-Type': 'application/json'

},

success:function(res){

var res = res.data;

page.analysisRes(res);

},

fail:function(res){

page.setData({

toastInfo:util.toErrMsg(0),

toastHidden:false

})

console.log(res);

}

})

}

保存用户数据并且退回到主界面

wx.setStorageSync('cars',cars);

wx.navigateBack();

用户在主界面需要将缓存的数据用列表形式展示并且点击列表后需要使用查询车辆违章接口进行查询

home.js

//加载列表数据

reloadData:function(){

var value = wx.getStorageSync('cars')

if (value) {

var cars = [];

var i = 0;

for(var key in value) {

cars[i]= value[key];

i++;

}

this.setData({

cars:cars

})

}

},

//跳转到查询页面

onclikItem:function(e){

var id = e.target.id;

var carname = this.data.cars[id].name

wx.navigateTo({

url: '../query/query?carname='+carname

})

},

home.wxml:

<scroll-view scroll-x="true">

<viewwx:for="{{cars}}" wx:for-index="idx" wx:for-item="car">

<view id="{{idx}}" bindtap="onclikItem">

<text id="{{idx}}">

{{car.name}}

</text>

<text id="{{idx}}">

{{car.showhphm}}

</text>

</view>

</view>

在查询页面需要调用查询接口

requestQuery:function(car){

var hphm = encodeURI(car.city.abbr+car.hphm)

var page = this;

wx.request({

url: 'http://localhost:3000/wz/query',

method:'POST',

data:{

key:page.data.AppKey,

city:car.city_code,

hphm:hphm,

hpzl:car.hpzl,

engineno:car.engineno,

classno:car.classno

},

header: {

// 'Content-Type': 'application/json'

},

success: function(res) {

var res = res.data;

if(res.resultcode == 200){

console.log(res.result.lists);

page.setData({

lists:res.result.lists

})

}else{

page.setData({

toastInfo:res.reason,

toastHidden:false

})

console.log(res);

}

},

fail:function(res){

page.setData({

toastInfo:util.toErrMsg(0),

toastHidden:false

})

console.log(res);

}

})

}

这样小程序的基本功能就算完成了,这里要说下的是小程序测数据与页面刷新很类似react native ,Page中的data数据改变,wxml中使用数据的的组件就会自动刷新,这个跟以往我做android ios 的略有区别,适应下就好了。

下面说下中转路由,这次选用的是node的express作为web服务器 数据库用嘛mongodb,这个是才接触的所以使用的也比较初级。

Node.js

Express - 基于 Node.js 平台的 web 应用开发框架

建议安装Homebrew这样会比较方便

Homebrew

Homebrew, Mac系统的包管理器,用于安装NodeJS和一些其他必需的工具软件。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

译注:在Max OS X 10.11(El Capitan)版本中,homebrew在安装软件时可能会碰到/usr/local目录不可写的权限问题。可以使用下面的命令修复:

sudo chown -R `whoami` /usr/localbrew install node

$ npm install express --save

创建web服务器MyCarServer,编辑器个人习惯用Sublime Text: The text editor you'll fall in love with

这里需要再下载两个扩展包用来实现post以及mongodb的连接

GitHub - expressjs/body-parser: Node.js body parsing middleware

$ npm install body-parser

GitHub - Automattic/mongoose: MongoDB object modeling designed to work in an asynchronous environment.

$ npm install mongoose

安装mongoldb这个我是看的视频,大家页可以自行百度

http://www.jikexueyuan.com/course/1976_1.html?ss=1

项目中创建models.js来驱动数据库

var config = require('./config.json');

// var uri = 'mongodb://username:password@hostname:post/databasename';

var host = config.host;

var port = config.port;

var dbName = config.dbname;

var uri = 'mongodb://' + host + ':' + port + '/' + dbName

var mongoose = require('mongoose')

console.log('uri:', uri)

mongoose.connect(uri);

var CarStatusScheme = new mongoose.Schema({

cachetime: Number,

resdata: String

})

var CarCitysScheme = new mongoose.Schema({

cachetime: Number,

resdata: String

})

var CarQueryScheme = new mongoose.Schema({

cachetime: Number,

resdata: String,

hphm: String

})

mongoose.model('CarStatus', CarStatusScheme);

mongoose.model('CarCitys', CarCitysScheme);

mongoose.model('CarQuery', CarQueryScheme);

在app.js中

var mongoose = require('mongoose');

require('./models.js');

在创建config.json用来做一些常规配置

{

"dbname": "mycar",

"port": "27017",

"host": "localhost",

"statuscache": 1000,

"cityscache": 1000,

"querycache": 1000,

"debug": true

}

在app.js中使用配置

var config = require('./config.json')

var debug = config.debug

get请求

//接口剩余请求次数查询

// 请求示例:http://v.juhe.cn/wz/status?key=xxxxxxx

// 请求参数说明:

// 名称 类型 必填 说明

// key string 是 应用APPKEY(应用详细页查询)

// dtype string 否 返回数据的格式,xml或json,默认json

// 返回参数说明:

// 名称 类型 说明

// error_code int 返回码

// reason string 返回说明

// data - 返回结果集

//   surplus string 剩余次数

app.get('/wz/status', function(req, res) {

if (debug) {

http://console.info('http get /wz/status')

}

CarStatus.find({}, function(err, docs) {

if (err) {

console.error("CarStatus.find err:", err)

} else {

if (docs.length > 0) {

var carStatus = docs[0];

var curtime = Date.now();

var cachetime = carStatus.cachetime;

if (curtime - cachetime < statuscachetime * 1000) {

var resData = carStatus.resdata;

res.json(JSON.parse(resData))

} else {

requestJHStatus(res);

}

} else {

requestJHStatus(res);

}

}

});

});

post 请求

// 接口地址:http://v.juhe.cn/wz/query

// 支持格式:json/xml/jsonp

// 请求方式:post get

// 请求示例:http://v.juhe.cn/wz/query?city=SH&hphm=苏L50A11&engineno=123456&key=key

// 接口备注:因交管局线路迁移,即日起至四月底安徽,山东,杭州等省市偶尔出现临时维护,请关注

// 调用样例及调试工具:API测试工具

// 请求参数说明:

// 名称 类型 必填 说明

// dtype string 是 返回数据格式:json或xml或jsonp,默认json

// callback String 否 返回格式选择jsonp时,必须传递

// key string 是 你申请的key

// city String 是 城市代码 *

// hphm String 是 号牌号码 完整7位 ,需要utf8 urlencode*

// hpzl String 是 号牌类型,默认02,暂只支持小型车

// engineno String 否 发动机号 (根据城市接口中的参数填写)

// classno String 否 车架号 (根据城市接口中的参数填写)

// 返回参数说明:

// 名称 类型 说明

// province String 查询省份代码

// city String 查询城市代码

// hphm String 查询的号牌号码

// lists Array 违章列表

// date String 违章时间

// area String 违章地点

// act String 违章行为

// code String 违章代码(仅供参考,不一定有值)

// fen String 违章扣分(仅供参考,不一定有值)

// money String 违章罚款(仅供参考,不一定有值)

// handled String 是否处理,1处理 0未处理 空未知

app.post('/wz/query', function(req, res) {

if (debug) {

http://console.info('http post /wz/query')

}

console.log(req.headers['content-type'])

http://console.info('/wz/query req.body:', req.body)

// http://console.info('/wz/query req.data:', req)

var carquery = new CarQuery({

hphm: req.body.hphm,

cachetime: Date.now()

})

http://console.info('/wz/query hphm:', carquery.hphm)

CarQuery.find({

'hphm': carquery.hphm

}, function(err, docs) {

if (err) {

console.error("CarQuery.find err:", err)

} else {

if (docs.length > 0) {

var carQuery = docs[0];

var curtime = Date.now();

var cachetime = carQuery.cachetime;

if (curtime - cachetime < querycache * 1000) {

var resData = carQuery.resdata;

res.json(JSON.parse(resData))

} else {

requestJHQuery(req.body, res);

}

} else {

requestJHQuery(req.body, res);

}

}

});

});

post请求需要引入body-parse

var bodyParser = require('body-parser');

// parse application/x-www-form-urlencoded

app.use(bodyParser.urlencoded({

extended: false

}))

// parse application/json

app.use(bodyParser.json())

这里还有一个未解决的就是小程序中请求中如果设置

header: {

// 'Content-Type': 'application/json'

},

在web服务器中是接收不到body数据的,所以暂时的解决方式是注释 // 'Content-Type': 'application/json'

这样就算完成了基础功能

哎!不会文章表达还是微信(xiongandaqu)沟通吧

2024年微信小程序精品源码 篇2

什么是微信小程序,在今年1月9号,微信上线了期待已久的小程序,小程序是不需要安装不需要卸载,打开即可使用的一种小程序,是基于微信生态的一种轻应用,功能使用上类似APP的感觉,目前微信小程序已经开放给所有企业申请开放和使用,微信统一审核上线,微信小程序在未来和公众号一样,每个企业或者个体工商户都必须标配的小应用程序,或许在不久的将来,在街头小巷都可以看到小程序的海报二维码,小程序让所有的街头店面都有实现O2O的可能,小程序从某种意义上来讲要比公众号还方便一些。订阅号侧重于内容发布,服务号侧重于粉丝商品变现,那么小程序呢,不能关注,不聚合粉丝,不强化营销,用完就走,好下次再用,不好删除,真正的不骚扰用户,靠质量和功能来赢取用户的二次使用。小程序的入门非常封闭,只有两种,一种是通过搜索小程序名称来获得,并且是精准搜索,不支持模糊搜索,差一个字都搜不出来,也许以后会调整,但看出来这是微信故意这样安排的。另外一种是只能扫二维码进入,这个二维码不支持微信长按扫码,只能是对着电脑或者海报或者另外一部终端上的二维码扫码,彻底切断了微信内部传播和营销的途径,在分享方面,目前只支持分享到好友和微信群,不支持分享到朋友,因此在推广运营上受到了一定限制。下面我们具体来说几种未来可能小程序的运营推广途径:第一:微信群分享小程序一出生就注定只能在微信群里传播,因此微信群的价值又一次来了,如果你有一款小程序,赶紧加上上千个微信群吧,把小程序分享到上千个,上万个微信群,应该是一次很好的传播。不知道微信官方是怎么想的,是不是微信群发的链接多了也会封号呢,会不会成为恶意营销呢,以前有人在微信群里推广公众号二维码被封号了不少,反正微信的政策总是马后炮,不从技术上限制,等你做了再来收拾你,以前公众号刚出来的时候也是这样的,全民申请,全民创业开发,两年后有的人做的很大了,然后出一些奇葩政策统统封杀,可以一眼望去,在微信生态里面有哪个服务号做的很出名的,基本没有,有的基本被封杀了,从服务号上可以看的出来,微信生态是不可信任的,也是不可倚靠的,小程序谁能把它做大?花了几百万去推广起来,一个公告将你死不瞑目。当然除非遵守小程序各种规范,也许是可以生存的,但是作为一种商业工具是离不开推广宣传的,不断的做商业活动也许才能够推广起来,反正大家在推广小程序的时候,特别是在微信群里推广的时候,千万要小心,被扣上恶意营销的帽子,成为首批烈士。第二,结合新媒体,内容运营小程序注定是一个工具,工具本身并没有传播的属性,只能够让更多人使用这个工具,就要做品牌营销,那么目前火爆的各大新媒体平台是推广小程序最好的利器,通过各大新媒体平台的内容输出,不断的强化内容,在内容中可以穿插品牌,穿插小程序名称,当用户对你的内容感兴趣的时候顺便寻找你的小程序来使用,很多内容大咖,早都在自己的内容中介绍了小程序的名称,比如十点读书,我已经在很多文章和他的音频节目中听到多次介绍小程序的环节,新媒体永远是吸引粉丝和宣传品牌的最好渠道,如果一个企业用好新媒体,将为企业大大节省广告费用。第三,各大小程序市场小程序出生之后,就没有集中的市场或者商店,而且张小龙已经明确强调,小程序是不做集中流量商店,永远是去中心化的思维模式,这就给很多创业者提供了创业机会,相信很多互联网公司都会做小程序的商店或者发布平台,比如 豆芽导航,在第一时间就上线了小程序自助发布接口,有小程序的人就随意上去发布自己小程序,让更多的人知道,当然类似豆芽导航的小程序发布平台有很多,都可以入驻上去发布,总的来说会得到相应多的曝光机会,有的小程序应用市场有很高的流量,将会带来不错的效果。第四,线下推广小程序是有二维码的,这个二维码可以张贴到自己门店,或者比较醒目的地方,记得以前经常有人拿着公众号二维码做线下推广,扫一扫送豆芽菜,扫一扫送小礼品等这样的活动,那么小程序出来之后会不会也有这样的情节再次出现呢,毕竟很多商家都像抢占先机,让自己的小程序早点让人知道和使用。关于小程序的推广相信有很多人会想出更好的办法做运营,大家的聪明才智一定是非常强大的,目前我也就是介绍几种常见的,希望对大家有所帮助,对微信小程序有个全面的认识,不但知道了小程序能够做什么,还知道了小程序的入口有哪些,更是知道了小程序如何推广运营方法。希望能够帮助大家,今天就分享这里,谢谢大家

猜你喜欢