码迷,mamicode.com
首页 > 其他好文 > 详细

项目总结-第一次外包项目1-项目新增功能与困难

时间:2017-09-04 13:14:31      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:开始   font   cti   文档   公众   项目   会员   star   获取   

项目新增功能与困难

概述:该项目已有PC端网站;项目需求:修改部分PC端网站功能;实现手机端网站(只为微信用户服务)

实现的新功能如下:

PC端

  1、管理:增加了添加客服二维码{当上传新的客服图片选择“是”显示在页面时,会将其他原“是”的数据设置为“否”}、手机轮播图、手机广告管理

  2、会员列表增加按vip日期排序

  3、增加会员发布作品,选择是否发布到款式库功能,后台增加此项管理

手机端 【主要】

  1、微信登录、绑定新旧用户{绑定原用户时,更新用户信息,会员期限信息,会员收藏信息,会员地址信息,会员订单信息}

  2、收藏功能:浏览显示已收藏信息与收藏量,已收藏显示"红心",取消收藏显示"白心"{smarty模版in_array}

  3、微信支付:从扫码支付改成公众号支付

 难点

1、微信登录curl{具体实现:微信开发文档(微信网页授权); 实例}

采集页面内容时,file_get_content函数总是不能生效,使用curl扩展来代替file_get_content,但是在访问https页面是仍可能无法访问,在设置选项时,需加上curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE)这句代码才能访问https页面,请参照如下代码封装curl:

  function get_url_contents($url)        //封装curl
    {
        // 1. 初始化
         $ch = curl_init();

         // 2. 设置选项,包括URL
         curl_setopt($ch, CURLOPT_URL, $url);
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
         curl_setopt($ch, CURLOPT_HEADER, 0);    //不返回response头部信息 
         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts
         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
         // 3. 执行并获取HTML文档内容
         $output = curl_exec($ch);

         // 4. 释放curl句柄
         curl_close($ch);
         return $output;
    }    

   推荐两篇文章:1、php中curl的详细解说  2、php读取网络文件 curl, fsockopen ,file_get_contents 几个方法的效率对比

 2、绑定原用户,更新微信账号与原账号数据

因为微信用户第一次登录时,相当于注册一个新用户,使用的是一个新的用户id。当微信用户要绑定电脑端已有的账号oldid时,需要将新用户id数据清除,并把新用户操作过的信息更新到oldid的信息当中,且将sessionx信息更新。一开始陷入思维误区,绑定原有账号,在users表中删除新用户数据信息时,微信用户的收藏、订单等信息无法更新。后来突然想到收藏表,订单表等关联的只是微信用户的id,只要将微信用户的id更新为原用户的id即可保持数据更新

elseif ($act == ‘oldbind‘) {        //绑定原账户
    $username = (isset($_POST[‘username‘]) ? trim($_POST[‘username‘]) : ‘‘);
    $password = (isset($_POST[‘password‘]) ? trim($_POST[‘password‘]) : ‘‘);

    $oldid = $_SESSION[‘user_id‘];    
    $wechat_id = $_SESSION[‘wid‘];        //wid在登录时设置
    //防止再次绑定,判断用户名是否为手机号
    $sql = ‘SELECT mobile_phone FROM ecs_users WHERE user_id = \‘‘ .$oldid. ‘\‘‘;
    $mobile_phone = $GLOBALS[‘db‘]->getOne($sql);
    
    if(strlen($mobile_phone) != 11){
        if ($user->login($username, $password, isset($_POST[‘remember‘]))) {
            //先将uesr表中id==ect_uid的删除  《=生成新的用户id
            $sql = ‘DELETE FROM ecs_users WHERE user_id = \‘‘ .$oldid. ‘\‘‘;
            $GLOBALS[‘db‘]->query($sql);
            
            update_user_info();
            
            //将用户id更新到wechat_user表中ect_uid字段
            $sql = ‘UPDATE ecs_wechat_user SET ect_uid = \‘‘ .$_SESSION[‘user_id‘]. ‘\‘ where uid = \‘‘ .$wechat_id. ‘\‘‘;
            $res = $GLOBALS[‘db‘]->query($sql);
            /* 更新订单表 */
            $sql = ‘UPDATE ecs_order_info SET user_id = \‘‘ .$_SESSION[‘user_id‘]. ‘\‘ WHERE user_id = \‘‘ .$oldid. ‘\‘‘;
            $res = $GLOBALS[‘db‘]->query($sql);
            /* 更新收藏表 */
            $sql = ‘UPDATE ecs_collect_goods SET user_id = \‘‘ .$_SESSION[‘user_id‘]. ‘\‘ WHERE user_id = \‘‘ .$oldid. ‘\‘‘;
            $res = $GLOBALS[‘db‘]->query($sql);
            
            /*会员期限*/
            $time = gmtime();
                //微信用户的vip期限
            $sql = ‘SELECT max(end_time) AS vip_time FROM ecs_vip_validity WHERE user_id="‘.$oldid.‘"‘;
            $end_time = $GLOBALS[‘db‘]->getOne($sql);
                //vip剩余期限
            $vip_time = $end_time - $time;
                //要绑定原用户的vip到期期限
            $sql = ‘SELECT max(end_time) AS vip_time FROM ecs_vip_validity WHERE user_id="‘.$_SESSION[‘user_id‘].‘"‘;
            $start_time = $GLOBALS[‘db‘]->getOne($sql);
                //检测vip_time与start_time是否为负数
            if($start_time <=0 || $vip_time <=0){
                $end_time = $start_time > $vip_time ? $start_time : $vip_time;
            }else{
                $end_time = $start_time + $vip_time;
            }
            
            $data[‘start_time‘] = $start_time;
            $data[‘end_time‘] = $end_time;
            $data[‘user_id‘] = $_SESSION[‘user_id‘];
            $data[‘create_time‘] = $time;
            $res = $db->autoExecute($ecs->table(‘vip_validity‘), $data, ‘INSERT‘);
                //删除原账号vip
            $sql = ‘DELETE FROM ecs_vip_validity WHERE user_id = \‘‘ .$oldid. ‘\‘‘;
            $GLOBALS[‘db‘]->query($sql);

            /* 更新收货地址 */
            $sql = ‘UPDATE ecs_user_address SET user_id = \‘‘ .$_SESSION[‘user_id‘]. ‘\‘ WHERE user_id = \‘‘ .$oldid. ‘\‘‘;
            $res = $GLOBALS[‘db‘]->query($sql);
            if($res){
                die(json_encode(array(‘code‘=>0, ‘msg‘=>‘绑定成功‘)));
            }else{
                die(json_encode(array(‘code‘=>0, ‘msg‘=>‘绑定失败‘)));
            }
            
        }
        else {
            $_SESSION[‘login_fail‘]++;
            die(json_encode(array(‘code‘=>1, ‘msg‘=>‘用户名或密码错误‘)));
        }
    }else{
        die(json_encode(array(‘code‘=>2, ‘msg‘=>‘账号已经绑定‘)));
    }   
}

3、微信支付时,js拉起支付失败,"调用支付jsapi缺少参数appid"

注:微信支付不能用测试号测试

 

  //调用微信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);
            }
        );
    }

 

  此时不能在invoke函数的第二个参数中直接传入json信息,需要将json信息用对象方式重新拼接

function pay(pay_code, url) {
        //微信支付
        if (pay_code == ‘wxpay‘) {
            $(‘.pay-btn‘).on(‘click‘, function(){                
                payJsonObj = JSON.parse(url); //转化成对象
                                
                jsApiCall();    
            });
        } //支付宝支付
        else if(pay_code == ‘alipay‘) {
            $(‘.pay-btn‘).on(‘click‘, function(){
                location.href = url;
            })
        }
    }
    function jsApiCall()
    {
        WeixinJSBridge.invoke(
            ‘getBrandWCPayRequest‘,
            {
                "appId": payJsonObj.appId,
                "nonceStr": payJsonObj.nonceStr,
                "package": payJsonObj.package,
                "paySign": payJsonObj.paySign,
                "signType": payJsonObj.signType,
                "timeStamp": payJsonObj.timeStamp
            },
            function(res){
                if(res.err_msg == "get_brand_wcpay_request:ok") {    
                    change_order();
                    window.location.replace("userIndex.html?action=order");
                }else{
                    alert(‘支付失败‘);
                    //WeixinJSBridge.log(res.err_msg);
                    //alert(res.err_code+res.err_desc+res.err_msg);
                }    
            }
        );
    }

推荐:微信公众号支付开发全过程 --JAVA

 

项目总结-第一次外包项目1-项目新增功能与困难

标签:开始   font   cti   文档   公众   项目   会员   star   获取   

原文地址:http://www.cnblogs.com/zixuanfy/p/7465045.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!