当前位置: 首页 > news >正文

基于微信小程序的数码商城程序设计与实现(后台PHP+Mysql)

目 录
摘 要 I
ABSTRACT II
一、前言 1
1.1 研究的背景、目的和意义 1
1.2 国内外文献综述 2
1.3 研究的主要内容 3
二、系统相关技术研究 5
2.1 微信小程序 5
2.2 ThinkPHP 5 框架 7
2.3 RESTFul API 8
2.4 微信支付技术 10
2.5 MySQL数据库 12
三、需求分析与可行性研究 14
3.1 市场定位分析 14
3.2 可行性分析 14
3.3 需求目标 15
3.3.1 概述 15
3.3.2 商城整体说明 15
四、系统解决方案 17
4.1 设计方案的论证 17
4.1.1 设计方案的选择 17
4.1.2 工具的选择 17
4.2 设计方案的说明 18
4.2.1 系统总体描述 18
4.2.2 系统角色类型 18
4.2.3 系统规划 20
4.2.4 预期目的 20
4.2.5 技术要求 21
五、系统详细设计 22
5.1 系统模块架构 22
5.2 系统功能说明 22
5.2.1 系统登录模块 22
5.2.2 数码商城设置模块 23
5.2.3 数码商城内容更改模块 25
5.2.4 数码商城管理员模块 26
5.2.5 基本商城功能模块 27
5.3 数据字典 28
六、系统实现 31
6.1 模块实现的理论基础 31
6.2 系统登录模块的实现 31
6.3 设置数码商城信息模块的实现 31
6.4 数码商城选货模块的实现 39
6.4.1 选货模块 39
6.4.2 选货后编辑及提交模块 40
6.5 管理员审核模块 43
七、系统测试 45
7.1 概述 45
7.2 系统测试用例 45
7.3 测试总结 47
总 结 48
致 谢 49
参考文献 50
数码商城是一种新的消费模式,采用线上线下结合的消费模式,线下消费,线上付款。对于线下,其形式是:放一个数码商城到学生,这个数码商城归的人所共享,数码商城运营商放固定数量的商品进数码商城,用户消费的时候,直接拿数码商城里的东西,然后往数码商城里丢钱,自己找零,数码商城运营商定期去维护数码商城里的商品,是一种只适用于大数码商城园的高自觉、高素质人群的消费模式。
而这次我的开发任务是,将这个模式转移到线上,对用户而言,在用户端数码商城模块就相当于自己的一个“收藏夹”,用户可以定义这个“收藏夹”里放什么东西,后台商家收到用户的自定义信息之后,将会上门把客户选择的商品放进数码商城里,这个过程是免费的,因为用户还没有产生真正的消费。在线下,实体纸箱数码商城就是用户可以随时消费的“寝室超市”,其消费流程很简单,从数码商城里拿东西,在“收藏夹”(线上数码商城模块)快速找到商品进行线上付款,一切基于诚信。
微信已经通过它的大数据改变了当下的广告营销市场[7],而且因为它的轻量化和跨平台化,所以没有选择APP开发,避开了开发攻坚,安卓IOS双平台同步,软件推广三大难题,在电子商务发展的过程中,微信是一个很好的营销平台[8]。
整个商城是基于微擎版人人商城的二次开发,我的开发任务就是对人人商城进行数据库和代码逻辑分析,然后完成数码商城的功能开发以及数码商城数据库和人人商城数据库的融合,相当于在一块打了地基的土地上盖房子,本文转载自http://www.biyezuopin.vip/onews.asp?id=11098用成熟的底层写自己的逻辑模块。
这次选用的数据库是Mysql,利用HTML+JS+CSS技术完成前端页面的设计开发,用PHP+AJAX技术完成后台逻辑功能的实现[13]。系统一共有五大模块,其详细实现方法见以下各小节。

// app.js
App({
  d: {
    hostUrl: 'https://tao.leiang-ele.com/index.php',
    hostImg: 'http://img.ynjmzb.net',
    hostVideo: 'http://zhubaotong-file.oss-cn-beijing.aliyuncs.com',
    userId: 1,
    appId:"",
    appKey:"",
    ceshiUrl:'https://tao.leiang-ele.com/index.php',
  },
  onLaunch: function () {
    //调用API从本地缓存中获取数据
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs);

    //login
    this.getUserInfo();
  },
  getUserInfo:function(cb){
    var that = this
    if(this.globalData.userInfo){
      typeof cb == "function" && cb(this.globalData.userInfo)
    }else{
      //调用登录接口
      wx.login({
        success: function (res) {
      
          var code = res.code;
        
          //get wx user simple info
          wx.getUserInfo({
            success: function (res) {
              that.globalData.userInfo = res.userInfo
              typeof cb == "function" && cb(that.globalData.userInfo);
              //get user sessionKey
              //get sessionKey
              that.getUserSessionKey(code);
            }
          });
        }
      });
    }
  },

  getUserSessionKey:function(code){
    //用户的订单状态
    var that = this;
    wx.request({
      url: that.d.ceshiUrl + '/Api/Login/getsessionkey',
      method:'post',
      data: {
        code: code
      },
      header: {
        'Content-Type':  'application/x-www-form-urlencoded'
      },
      success: function (res) {
        //--init data        
        var data = res.data;
        if(data.status==0){
          wx.showToast({
            title: data.err,
            duration: 2000
          });
          return false;
        }

        that.globalData.userInfo['sessionId'] = data.session_key;
        that.globalData.userInfo['openid'] = data.openid;
        that.onLoginUser();
      },
      fail:function(e){
        wx.showToast({
          title: '网络异常!err:getsessionkeys',
          duration: 2000
        });
      },
    });
  },
  onLoginUser:function(){
    var that = this;
    var user = that.globalData.userInfo;
    wx.request({
      url: that.d.ceshiUrl + '/Api/Login/authlogin',
      method:'post',
      data: {
        SessionId: user.sessionId,
        gender:user.gender,
        NickName: user.nickName,
        HeadUrl: user.avatarUrl,
        openid:user.openid
      },
      header: {
        'Content-Type':  'application/x-www-form-urlencoded'
      },
      success: function (res) {
        //--init data        
        var data = res.data.arr;
        var status = res.data.status;
        if(status!=1){
          wx.showToast({
            title: res.data.err,
            duration: 3000
          });
          return false;
        }
        that.globalData.userInfo['id'] = data.ID;
        that.globalData.userInfo['NickName'] = data.NickName;
        that.globalData.userInfo['HeadUrl'] = data.HeadUrl;
        var userId = data.ID;
        if (!userId){
          wx.showToast({
            title: '登录失败!',
            duration: 3000
          });
          return false;
        }
        that.d.userId = userId;
      },
      fail:function(e){
        wx.showToast({
          title: '网络异常!err:authlogin',
          duration: 2000
        });
      },
    });
  },
  getOrBindTelPhone:function(returnUrl){
    var user = this.globalData.userInfo;
    if(!user.tel){
      wx.navigateTo({
        url: 'pages/binding/binding'
      });
    }
  },

 globalData:{
    userInfo:null
  },

  onPullDownRefresh: function (){
    wx.stopPullDownRefresh();
  }

});






在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章:

  • FA_06.不用刷机情况下升级或者降级系统中的fridaserver
  • 【笔试题】【day3】
  • 微信小程序|基于小程序实现人脸识别对比
  • [附源码]Java计算机毕业设计SSMJava商场会员管系统
  • 多模态学习、迁移学习、元学习、联邦学习、表示学习、知识图谱、无监督学习、半监督学习、弱监督学习、自监督学习简介
  • 剑指offer 63. 和为S的两个数字
  • 【VUE基础】webpack
  • 机器人轨迹规划中经常用到的曲线特性小结:Cn连续与Gn连续、Frenet标架、曲率和挠率
  • 【深度学习】卷积神经网络CNN入门介绍
  • Android Studio 提示:更新 TKK 失败,请检查网络连接
  • 枚举类型详解
  • 机器学习笔记 - 在Vehicles数据集上训练 YOLOv5 目标检测器
  • win10系统安装虚拟机centos
  • 从零备战蓝桥杯——二叉树及相关题目(基础篇)
  • 软件企业和双软企业的区别
  • 2017前端实习生面试总结
  • 77. Combinations
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • centos安装java运行环境jdk+tomcat
  • jquery cookie
  • Laravel Mix运行时关于es2015报错解决方案
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • October CMS - 快速入门 9 Images And Galleries
  • php ci框架整合银盛支付
  • Python打包系统简单入门
  • SAP云平台里Global Account和Sub Account的关系
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 浮动相关
  • 搞机器学习要哪些技能
  • 浅谈Golang中select的用法
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • # Apache SeaTunnel 究竟是什么?
  • #stm32驱动外设模块总结w5500模块
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (二十四)Flask之flask-session组件
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (十六)Flask之蓝图
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .NET 4.0中的泛型协变和反变
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NetCore部署微服务(二)
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [ajaxupload] - 上传文件同时附件参数值
  • [bzoj 3534][Sdoi2014] 重建
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [Django开源学习 1]django-vue-admin
  • [HEOI2013]ALO