下篇: php 微商城 基于Thinkphp3.2框架开发

(12)微信商城

① 前台模板引入

a.引入微信商城模板的css+js+Images+img+bootstrap

b.引入微商城的首页index.html及详情页detail.html页面模板

注意:修改js/css/image等的引入路径

c.控制器添加显示页面的方法

D:\phpStudy\WWW\wechat\tp3\Application\Shop\Controller\IndexController.class.php

d.访问控制器中的方法查看显示效果

http://zouke1220.oicp.net/wechat/tp3/index.php/Shop/Index/index

http://zouke1220.oicp.net/wechat/tp3/index.php/Shop/Index/detail

② 后台模板引入(注意修改bootstrap的引入路径)

a.添加

引入产品添加页面

后台控制器添加方法

    //显示添加商品页面
    public function add(){
          $this->display();
    }

访问控制器中的方法,查看显示效果

http://zouke1220.oicp.net/wechat/tp3/index.php/Shop/Admin/add

添加商品+图片上传

注意:配置好数据库连接D:\phpStudy\WWW\wechat\tp3\Application\Shop\Conf\config.php

    //添加商品+图片上传
    public function addgoods(){
        //var_dump($_POST);exit;
        header("Content-type:text/html;charset=utf-8");
        $m=M(‘goods‘);
        $upload = new \Think\Upload();// 实例化上传类
        $upload->maxSize   =3145728 ; // 设置附件上传大小
        $upload->exts      =array(‘jpg‘, ‘gif‘, ‘png‘, ‘jpeg‘); // 设置附件上传类型
        $upload->rootPath  =‘./Public/Uploads/‘; // 设置附件上传目录
        $info   =   $upload->upload();           // 上传文件
        if(!$info) {// 上传错误提示错误信息
            echo ‘<script type="text/javascript">alert("上传图片失败");</script>‘;
            exit;
        }else{      // 上传成功
            $_POST[‘img‘]=$info[‘img‘][‘savepath‘].$info[‘img‘][‘savename‘];
            //var_dump($_POST);
            /*
            array(4) {
                ["name"]=> string(3) "222"
                ["price"]=> string(3) "222"
                ["pex"]=> string(4) "A类"
                ["img"]=> string(28) "2017-08-17/59952ffbea896.png"
            }
            */
            $arr=$m->add($_POST);
            if($arr){
                echo ‘<script type="text/javascript">alert("添加成功");</script>‘;
        }else{
            echo ‘<script type="text/javascript">alert("添加失败");</script>‘;
        }
    }


b.列表

引入展品列表显示页面

后台控制器列表方法

    //商品列表页
    public function lists(){
            $m=M(‘goods‘);
            $data=$m->select();
            $this->assign("data",$data);
            $this->display();
    }

访问控制器中的方法,查看显示效果

http://zouke1220.oicp.net/wechat/tp3/index.php/Shop/Admin/lists

c.删除

后台控制器列表方法

    //删除商品
    public function del(){
        header("Content-type:text/html;charset=utf-8");
        $id=$_GET[‘id‘];
        $m=M(‘goods‘);
        $res=$m->delete($id);
        if($res){
            echo ‘<script>alert("删除成功");history.go(-1);</script>‘;
        }else{
            echo ‘<script>alert("删除失败");history.go(-1);</script>‘;
        }
    }    

点击删除按钮

③ 前台数据展示

a.控制器取数据

    //首页
    public function index(){
    $m=M(‘goods‘);
    $data=$m->select();
    $this->assign(‘data‘,$data);
       $this->display();
    }

    //详情页
    public function detail(){
     $m=M(‘goods‘);
        $data=$m->find($_GET[‘id‘]);
        $this->assign(‘data‘,$data);
        $this->display();
  }
  //订单页
  public function order(){
      $this->assign(‘data‘,$_POST);
      $this->display();
  }

b.页面展示

D:\phpStudy\WWW\wechat\tp3\Application\Shop\View\Index\index.html

http://zouke1220.oicp.net/wechat/tp3/index.php/Shop/Index/index

D:\phpStudy\WWW\wechat\tp3\Application\Shop\View\Index\detail.html

http://zouke1220.oicp.net/wechat/tp3/Shop/Index/detail/id/2.html

D:\phpStudy\WWW\wechat\tp3\Application\Shop\View\Index\order.html

http://zouke1220.oicp.net/wechat/tp3/Shop/Index/order.html

将wechat\选择城市插件文件下的js文件拷贝到D:\phpStudy\WWW\wechat\tp3\Public\js下

将wechat\选择城市插件文件下的css文件拷贝到D:\phpStudy\WWW\wechat\tp3\Public\css下

订单页面order.html引入刚才的css文件:area.css和js文件:area.js、jquery-3.2.1.js

访问查看效果

c.写入订单到数据库

    //写入订单到数据库
    public function addOrder(){
        header(‘Content-type:text/html;charset=utf-8‘);

        $data[‘gid‘]=$_POST[‘id‘];
        $data[‘name‘]=$_POST[‘name‘];
        $data[‘price‘]=$_POST[‘price‘]*$_POST[‘num‘];
        $data[‘num‘]=$_POST[‘num‘];
        $data[‘email‘]=$_POST[‘email‘];
        $data[‘mobile‘]=$_POST[‘mobile‘];
        $data[‘city‘]=$_POST[‘city‘];
        $data[‘detail‘]=$_POST[‘detail‘];

        $m=M(‘orders‘);
        $res=$m->add($data);
        if($res){
            echo ‘<script>alert("生成订单成功");history.go(-2)</script>‘;
        }else{
            echo ‘<script>alert("生成订单失败");history.go(-1)</script>‘;
        }
    } 

④ 微信支付

同步:同步执行或跳转

异步:不管用户是否点击完成或跳转,微信服务器都会向我们的服务器推送数据

如果指定推送数据的地址:如果微信服务器没有收到返回参数,会一直向你的服务器推送数据,8次。

a.修改写订单方法

    //写入订单到数据库
    public function addOrder(){
        header(‘Content-type:text/html;charset=utf-8‘);
        //未支付成功 缓存订单数据
        if(empty($_GET[‘isnull‘])){
            //去支付
            header(‘Location:http://zouke1220.oicp.net/wechat/tp3/WxPay/example/jsapi.php‘);
            //缓存订单数据
            $data[‘gid‘]=$_POST[‘id‘];
            $data[‘name‘]=$_POST[‘name‘];
            $data[‘username‘]=$_POST[‘username‘];
            $data[‘pirce‘]=$_POST[‘pirce‘]*$_POST[‘num‘];
            $data[‘num‘]=$_POST[‘num‘];
            $data[‘email‘]=$_POST[‘email‘];
            $data[‘mobile‘]=$_POST[‘mobile‘];
            $data[‘city‘]=$_POST[‘city‘];
            $data[‘detail‘]=$_POST[‘detail‘];

            session(‘data‘,$data);
        }else{  //支付成功 插入订单数据
            $m=M(‘order‘);
            $res=$m->add(session(‘data‘));
            if($res){
                echo ‘<script>alert("生成订单成功");
                location.href="http://zouke1220.oicp.net/wechat/tp3/Shop/Index";</script>‘;
            }else{
                echo ‘<script>alert("生成订单失败");history.go(-2)</script>‘;
            }
        }
    }    

b.修改jsapi.php

D:\phpStudy\WWW\wechat\tp3\WxPay\example\jsapi.php

<?php
/******************新增开始**********************/
session_start();
header(‘Content-type:text/html;charset=utf-8‘);
/******************新增结束**********************/ 

ini_set(‘date.timezone‘,‘Asia/Shanghai‘);
//error_reporting(E_ERROR);
require_once "../lib/WxPay.Api.php";
require_once "WxPay.JsApiPay.php";
require_once ‘log.php‘;
//初始化日志
$logHandler= new CLogFileHandler("../logs/".date(‘Y-m-d‘).‘.log‘);
$log = Log::Init($logHandler, 15); 

//打印输出数组信息
/***********注释开始********************
function printf_info($data)
{
    foreach($data as $key=>$value){
        echo "<font color=‘#00ff55;‘>$key</font> : $value <br/>";
    }
}
************注释结束*******************/ 

//①、获取用户openid
$tools = new JsApiPay();
$openId = $tools->GetOpenid();
//②、统一下单
$input = new WxPayUnifiedOrder();
$input->SetBody($_SESSION[‘data‘][‘name‘]);              //动态获取
$input->SetAttach($_SESSION[‘data‘][‘name‘]);            //动态获取
$input->SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));
$input->SetTotal_fee($_SESSION[‘data‘][‘price‘]);        //动态获取
$input->SetTime_start(date("YmdHis"));
$input->SetTime_expire(date("YmdHis", time() + 600));
$input->SetGoods_tag("test");
$input->SetNotify_url("http://zouke1220.oicp.net/wechat/tp3/WxPay/example/notify.php");   //异步回调
$input->SetTrade_type("JSAPI");
$input->SetOpenid($openId);
$order = WxPayApi::unifiedOrder($input);

/**************注释开始*********************
echo ‘<font color="#f00"><b>统一下单支付单信息</b></font><br/>‘;
printf_info($order);
***************注释结束********************/

$jsApiParameters = $tools->GetJsApiParameters($order);
//获取共享收货地址js函数参数
$editAddress = $tools->GetEditAddressParameters();

//③、在支持成功回调通知中处理成功之后的事宜,见 notify.php
/**
 * 注意:
 * 1、当你的回调地址不可访问的时候,回调通知会失败,可以通过查询订单来确认支付是否成功
 * 2、jsapi支付时需要填入用户openid,WxPay.JsApiPay.php中有获取openid流程 (文档可以参考微信公众平台“网页授权接口”,
 * 参考http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html)
 */
?> 

<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1"/>
    <title>微信支付样例-支付</title>
    <script type="text/javascript">
        //调用微信JS api 支付
        function jsApiCall(){
            WeixinJSBridge.invoke(
                ‘getBrandWCPayRequest‘,
                <?php echo $jsApiParameters; ?>,
                function(res){
                    /**************注释开始****************
                    WeixinJSBridge.log(res.err_msg);
                    alert(res.err_code+res.err_desc+res.err_msg);
                    ***************注释结束***************/ 

                    /**************新增开始***********************/
                    if(res.err.msg == "get_brand_wcpay_request:ok"){
                        alert(‘支付成功‘);
                        location.href="http://zouke1220.oicp.net/wechat/tp3/Shop/Index/addOrder/isnull/1";
                    }else{
                        alert(‘支付失败‘);
                        location.href="http://zouke1220.oicp.net/wechat/tp3/Shop/Index/detail/id/<?php echo $_SESSION[‘data‘][‘gid‘];?>";
                    }
                    /***************新增结束***********************/
                }
            );
        }

        function callpay(){
            if (typeof WeixinJSBridge == "undefined"){
                if( document.addEventListener ){
                    document.addEventListener(‘WeixinJSBridgeReady‘, jsApiCall, false);
                }else if (document.attachEvent){
                    document.attachEvent(‘WeixinJSBridgeReady‘, jsApiCall);
                    document.attachEvent(‘onWeixinJSBridgeReady‘, jsApiCall);
                }
            }else{
                jsApiCall();
            }
        }
    </script>
    <script type="text/javascript">
    //获取共享地址
    /**************注释开始*************************
    function editAddress()
    {
        WeixinJSBridge.invoke(
        ‘editAddress‘,
        <?php echo $editAddress; ?>,
        function(res){
            var value1 = res.proviceFirstStageName;
            var value2 = res.addressCitySecondStageName;
            var value3 = res.addressCountiesThirdStageName;
            var value4 = res.addressDetailInfo;
            var tel = res.telNumber;
            alert(value1 + value2 + value3 + value4 + ":" + tel);
            }
            );
        }
        window.onload = function(){
        if (typeof WeixinJSBridge == "undefined"){
            if( document.addEventListener ){
                document.addEventListener(‘WeixinJSBridgeReady‘, editAddress, false);
            }else if (document.attachEvent){
                document.attachEvent(‘WeixinJSBridgeReady‘, editAddress);
                document.attachEvent(‘onWeixinJSBridgeReady‘, editAddress);
            }
        }else{
        editAddress();
        }
    };
    *****************注释结束************************/
    </script>
</head>
<body>
    <!----------------------------注释开始----------------------------------------
    <br/>
    <font color="#9ACD32"><b>该笔订单支付金额为<span style="color:#f00;font-size:50px">1分</span>钱</b></font><br/><br/>
<div align="center">
<button style="width:210px; height:50px; border-radius: 15px; border:0px #FE6714 solid; cursor: pointer;  color:white;  font-size:16px;" type="button" onclick="callpay()" >立即支付</button>
</div>
------------------------------注释结束--------------------------------------->
</body>
</html>

说明:

微信支付测试号暂时还测试不了,有兴趣可以参考

http://download.csdn.net/download/gcfranklin/8362257

http://www.cnblogs.com/txw1958/p/wxpayv3-jsapi.html

http://blog.csdn.net/u014033756/article/details/52038114

http://www.cnblogs.com/txw1958/p/wxpayv3-signkey.html

另外:选择order.html表单中的收获地址城市插件调用不了,有时间可以再调

时间: 2024-10-25 13:09:46

下篇: php 微商城 基于Thinkphp3.2框架开发的相关文章

基于java spring框架开发部标1078视频监控平台精华文章索引

部标1078视频监控平台,是一个庞杂的工程,涵盖了多层协议,部标jt808,jt809,jt1078,苏标Adas协议等,多个平台功能标准,部标796标准,部标1077标准和苏标主动安全标准,视频方面的协议有RTSP, RTMP, RTP, 音视频编码有H.264, AAC,  726,711等,消化这些协议和功能标准就已经是需要一个较长的周期了,而构建一个视频平台的架构,也是比较复杂的,后端不仅有网关,还要有流媒体服务器,转发服务器,播放器,RTSP或RTMP服务器等多个服务器模块,需要的技术

基于AngularJS/Ionic框架开发的性能优化

AngularJS作为强大的前端MVVM框架,虽然已经做了很多的性能优化,但是我们开发过程中的不当使用还是会对性能产生巨大影响. 下面提出几点优化的方法: 1. 使用单次绑定符号{{::value}} AngularJS的性能优化方法之一是减少双向绑定.我们知道AngularJS的双向绑定是通过为每个需要双向绑定的数据对象添加$$watchers,一旦某个scope的数据发生了更新,就触发脏检测($digest),深度优先遍历所有scope对象的$$watchers值的old/new value

weex,bui-weex基于vue前端框架开发移动应用

weex 官方文档 bui-weex 官网地址 Weex 是使用流行的 Web 开发体验来开发高性能原生应用的框架. 在集成了 WeexSDK 之后,你可以使用 JavaScript 语言和前端开发经验来开发移动应用. BUI-Weex 是一套专门为Weex前端开发者打造的一套高质量UI框架.帮助开发者快速构建移动应用 原文地址:https://www.cnblogs.com/lk4525/p/11322975.html

微商城建设需要多少费用?

微商城建设必须了解什么是微商城微商城是基于当前很受欢迎的微信的一种传媒方式中的一种商业运用,微信的当前的 火热是一个商机,基于微信的传播速度,及其简便等优点,为商家提供一个平台,在 这个更简便的.方便的平台里进行更为现代的电子商务.同时在利用微信的这个平台 也可以为商家提供更有效的宣传方式,更有利于商品的推广.小六网络公司微商城后台管理系统 微商城建设多少钱微商城因为是基于微信的一种传媒方式中的一种商业运用,那么微商城建设就是相对 比较容易的.企业建设微商城不需要自己独立开发app和建设商城网站

在ThinkPHP3.x框架中实现将原创文章第一时间推送到百度收录

前两天自己写的一篇文章“针对BootStrap中tabs控件的美化和完善”被别的网站给转载了,这也许是值得高兴的一件事情,但是有些网站并没有注明来源和作者.而去百度搜索这篇文章,排名第一的居然是那些转载的网站,哎,怪自己没本事,网站权重低,所以,我想了一个办法,能第一时间将我的文章提交给百度收录,以期望能够保护我的原创.我在自己的网站中添加了一个功能——在发文章的同时就将该文章推送给百度.下面来说说实现过程. 我的网站是基于ThinkPHP3.x框架的,所以要遵循ThinkPHP的框架标准,在用

Jdon框架开发指南

Jdon框架快速开发指南 开发主要步骤如下: JdonFramework6.0以上两步开发见这里. 快速配置指南 新增/查询/修改/删除(CRUD); 批量查询和分页显示 本文Step By Step详细讲解如何使用Jdon框架基于领域模型快速开发这两个功能,通过Jdon框架的可以快速完成系统原型(ArcheType),使得开发者将真正精力集中在每个项目系统的特殊业务处理. 本案例源码下载 按这里查看更详细全面文档 快速配置指南 Jdon框架有一个配置文件叫jdonframework.xml,其

直播|python大咖实力领跑,分分钟扫盲电商网站自动化测试框架开发

作为大数据时代的软件测试工程师--你应该会的更多,还在单纯的只会点页 面测试BUG?又或者只懂功能测试技能.接口功能测试技能.自动化测试.性 能测试.敏捷测试.大数据其中某一个?是时候掌握新技能了,康忙北鼻! [前言] Selenium一直以来都被视作测试人员成功向自动化脚本开发转型的首选入门, 随着python语言的火热程度的持续攀升,基于python+Selenium实现自动化脚本 的开发也备受业内测试人员的追捧. 本课程基于Selenium3,python及BDD框架,结合大型电商京东实战

基于ASP.NET 4.0开发的微商城系统OdnShop,开源发布

基于ASP.NET 4.0开发的开源微商城系统,我们的目标是构建一个核心完善而又轻量级的微商城平台,目前基本的核心功能,包括微信登陆/支付,产品管理,购物车与订单管理等,轻量级是为了更加便于理解源码和二次开发. 使用技术 ASP.NET 4.0 MySql Server 环境要求 支持ASP.NET 4.0的虚拟主机或服务器均可,数据库为开源的MySql数据库系统: 安装流程 1,把安装包上传到主机空间: 2,在MYSQL里新建一个数据库odnshop(也可以是其他数据库名),执行安装包sql目

(一)熟悉执行流程——基于ThinkPHP3.2的内容管理框架OneThink学习

ThinkPHP作为国内具有代表性的PHP框架,经过多年的发展,受到越来越多公司与开发者的青睐.我也在忙里偷闲中抽出部分时间,来学习这个优秀的框架.在开始学习这个框架时,最好通过实例来学习,更容易结合实际的生产情况,促进学习的效果:这里我就选择由ThinkPHP团队开发的基于ThinkPHP3.2的内容管理框架OneThink来学习,从了解它的执行流程→熟悉流程中各个细节→了解模版标签→自己实际去使用标签→再了解它的实际执行过程……通过这样一个流程来熟悉如何基于ThinkPHP开发出一套CMS系