先放几张效果图吧!




我之前是做安卓开发的,前段时间帮朋友开发了一款小程序。
前端学过html+css+js的童鞋应该对里面的一些语法都都很熟悉了,这里主要说下商品加入购物车的一些逻辑,我这里用的是将商品信息的数组缓存到storage的方法,购物车直接get到内存中那个数组名。还有弹出选择框这里也遇到了一些坑。我这里后端用的是php,对于一个做安卓的java?来说,php里面的一些东西还是花了一些时间去了解。下面是微信支付wxpayapi的jsapi代码,具体的这个文件可以去微信开发者文档里下载。
?php 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("test");$input-SetAttach("test");$input-SetOut_trade_no(WxPayConfig::MCHID.date("YmdHis"));$input-SetTotal_fee("1");$input-SetTime_start(date("YmdHis"));$input-SetTime_expire(date("YmdHis", time() + 10));$input-SetGoods_tag("test");$input-SetNotify_url("http://paysdk.weixin.qq.com/example/notify.php");$input-SetTrade_type("JSAPI");$input-SetOpenid($openId);$order = WxPayApi::unifiedOrder($input);//echo 'font color="#f00"b统一下单支付单信息/b/fontbr/';//printf_info($order);$jsApiParameters = $tools-GetJsApiParameters($order);echo $jsApiParameters;//获取共享收货地址js函数参数$editAddress = $tools-GetEditAddressParameters();//③、在支持成功回调通知中处理成功之后的事宜,见 notify.php/** * 注意: * 1、当你的回调地址不可访问的时候,回调通知会失败,可以通过查询订单来确认支付是否成功 * 2、jsapi支付时需要填入用户openid,WxPay.JsApiPay.php中有获取openid流程 (文档可以参考微信公众平台“网页授权接口”, * 参考http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html) */ ?下面是部分前端代码:
view class="main" view wx:if="{{hasList}}" view class="cart-box" view class="cart-list" wx:for="{{carts}}" wx:key="{{index}}" icon wx:if="{{item.selected}}" type="success" color="red" data-index="{{index}}" class="cart-pro-select" bindtap="selectList"/ icon wx:else type="circle" class="cart-pro-select" data-index="{{index}}" bindtap="selectList"/ navigator url="../details/details?id={{item.id}}"image class="cart-thumb" src="{{item.image}}"/image/navigator text class="cart-pro-name"{{item.title}}/text text class="cart-pro-price"¥{{item.price}}/text view class="textview" text style=" font-size: 30rpx; color:#C0C0C0;"{{item.sub}}/text /view view class="cart-count-box" text class="cart-count-down" bindtap="minusCount" data-obj="{{obj}}" data-index="{{index}}"-/text text class="cart-count-num"{{item.num}}/text text class="cart-count-add" bindtap="addCount" data-index="{{index}}"+/text /view text class="cart-del" bindtap="deleteList" data-index="{{index}}"×/text /view /view view class="cart-footer" icon wx:if="{{selectAllStatus}}" type="success_circle" color="#fff" class="total-select" bindtap="selectAll"/ icon wx:else type="circle" color="#fff" class="total-select" bindtap="selectAll"/ view class="order-icon" image bindtap="submitOrder" src="/images/icon1.png"/image /view text全选/text text class="cart-toatl-price"¥{{totalPrice}}/text /view /view view wx:else view class="cart-no-data"购物车是空的哦~/view /view/view// page/component/new-pages/cart/cart.js//var cars=new Cars(); //实例化 购物车Page({ data: { carts:[], // 购物车列表 hasList:false, // 列表是否有数据 totalPrice:0, // 总价,初始为0 selectAllStatus:true, // 全选状态,默认全选 obj:{ name:"hello" } }, onShareAppMessage: function (res) { var a = wx.getStorageSync("id") var b = wx.getStorageSync("name") if (res.from === 'button') { // 来自页面内转发按钮 console.log(res.target) } return { title: '名片500张仅19元 全国包邮 货到付款,转发可享受更多优惠价', path: '/pages/mine/mine?id=' + a + '&sub=' + b, success: function (res) { // 转发成功 wx.showModal({ title: '提示', content: '转发成功', }) }, fail: function (res) { // 转发失败 } } }, // 分割线 onShow() { var that = this; var id1 = wx.getStorageSync('cart1') || []; var id2 = wx.getStorageSync('cart2') || []; var id3 = wx.getStorageSync('cart3') || []; var id4 = wx.getStorageSync('cart4') || []; var id5 = wx.getStorageSync('cart5') || [];//名片类,安格纸 var id6 = wx.getStorageSync('cart6') || []; var id7 = wx.getStorageSync('cart7') || []; var id8 = wx.getStorageSync('cart8') || []; var id9 = wx.getStorageSync('cart9') || []; var id10 = wx.getStorageSync('cart10') || []; var id11 = wx.getStorageSync('cart11') || []; var id12 = wx.getStorageSync('cart12') || []; var id13 = wx.getStorageSync('cart13') || []; var id14 = wx.getStorageSync('cart14') || [];//哑面 var id15 = wx.getStorageSync('cart15') || []; var id16 = wx.getStorageSync('cart16') || []; var id17 = wx.getStorageSync('cart17') || []; var id18 = wx.getStorageSync('cart18') || []; console.log(id1); console.log(id2); var sub1 = id1.concat(id2).concat(id3).concat(id4).concat(id5).concat(id6).concat(id7).concat(id8).concat(id9).concat(id10).concat(id11).concat(id12).concat(id13).concat(id14).concat(id15).concat(id16).concat(id17).concat(id18); that.setData({ hasList: true, carts: sub1, });this.getTotalPrice(); }, /*提交订单*/ submitOrder:function(flag){ var res = this.data.carts; if(!res){ res=[]; } //在下单的时候过滤不下单的商品, if(flag){ var newRes=[]; for(let i=0;ires.length;i++){ if(res[i].selected){ newRes.push(res[i]); } } res=newRes; console.log(res); wx.setStorageSync('res', res); } wx.navigateTo({ url:'../orders/orders?account='+this.data.account+'&from=cars' }); }, /** * 当前商品选中事件 */ selectList(e) { console.log(e); const index = e.currentTarget.dataset.index; let carts = this.data.carts; const selected = carts[index].selected; console.log(selected); var id=carts[index].id; console.log(id); carts[index].selected = !selected; this.setData({ carts: carts }); this.getTotalPrice(); }, /** * 删除购物车当前商品 */ deleteList(e) { const index = e.currentTarget.dataset.index; let carts = this.data.carts; console.log(e); console.log(carts); var id=carts[index].id; console.log(id); carts.splice(index,1); if(id==1){ wx.removeStorageSync('cart1'); } // 分割线 if (id == 2) { wx.removeStorageSync('cart2'); } // 分割线 if (id == 3) { wx.removeStorageSync('cart3'); } // 分割线 if (id == 4) { wx.removeStorageSync('cart4'); } // 分割线 if (id == 5) { wx.removeStorageSync('cart5'); } // 分割线 if (id == 6) { wx.removeStorageSync('cart6'); } // 分割线 if (id == 7) { wx.removeStorageSync('cart7'); } // 分割线 if (id == 8) { wx.removeStorageSync('cart8'); } // 分割线 if (id == 9) { wx.removeStorageSync('cart9'); } // 分割线 if (id == 10) { wx.removeStorageSync('cart10'); } // 分割线 if (id == 11) { wx.removeStorageSync('cart11'); } // 分割线 if (id == 12) { wx.removeStorageSync('cart12'); } // 分割线 if (id == 13) { wx.removeStorageSync('cart13'); } // 分割线 if (id == 14) { wx.removeStorageSync('cart14'); } // 分割线 if (id == 15) { wx.removeStorageSync('cart15'); } // 分割线 if (id == 16) { wx.removeStorageSync('cart16'); } // 分割线 if (id == 17) { wx.removeStorageSync('cart17'); } // 分割线 if (id == 18) { wx.removeStorageSync('cart18'); } // 分割线 this.setData({ carts: carts }); if(!carts.length){ this.setData({ hasList: false }); }else{ this.getTotalPrice(); } }, /** * 购物车全选事件 */ selectAll(e) { //console.log(e) let selectAllStatus = this.data.selectAllStatus; selectAllStatus = !selectAllStatus; let carts = this.data.carts; for (let i = 0; i carts.length; i++) { carts[i].selected = selectAllStatus; } this.setData({ selectAllStatus: selectAllStatus, carts: carts }); this.getTotalPrice(); }, /** * 绑定加数量事件 */ addCount(e) { const index = e.currentTarget.dataset.index; let carts = this.data.carts; let num = carts[index].num; num = num + 1; carts[index].num = num; this.setData({ carts: carts }); this.getTotalPrice(); }, /** * 绑定减数量事件 */ minusCount(e) { const index = e.currentTarget.dataset.index; const obj = e.currentTarget.dataset.obj; let carts = this.data.carts; let num = carts[index].num; if(num = 1){ return false; } num = num - 1; carts[index].num = num; this.setData({ carts: carts }); this.getTotalPrice(); }, /** * 计算总价 */ getTotalPrice() { let carts = this.data.carts; // 获取购物车列表 let total = 0; for(let i = 0; icarts.length; i++) { // 循环列表得到每个数据 if(carts[i].selected) { // 判断选中才会计算价格 total += carts[i].num * carts[i].price; // 所有价格加起来 } } this.setData({ // 最后赋值到data中渲染到页面 carts: carts, totalPrice: total.toFixed(2) }); }})有兴趣的童鞋可以下载学习下,没有积分或者有什么技术上问题的小伙伴,都可以私聊我,我有空就会回复的,qq:2029578566;
源文件下载地址













