【干货】,分享自己做过的一个带二级分销、支付等功能的微信小程序(已上线)

先放几张效果图吧!
【干货】,分享自己做过的一个带二级分销、支付等功能的微信小程序(已上线)
【干货】,分享自己做过的一个带二级分销、支付等功能的微信小程序(已上线)
【干货】,分享自己做过的一个带二级分销、支付等功能的微信小程序(已上线)
【干货】,分享自己做过的一个带二级分销、支付等功能的微信小程序(已上线)
【干货】,分享自己做过的一个带二级分销、支付等功能的微信小程序(已上线)
我之前是做安卓开发的,前段时间帮朋友开发了一款小程序。
前端学过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></font><br/>';
//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;i<res.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; i<carts.length; i++) {         // 循环列表得到每个数据
      if(carts[i].selected) {                     // 判断选中才会计算价格
        total += carts[i].num * carts[i].price;   // 所有价格加起来
      }
    }
    this.setData({                                // 最后赋值到data中渲染到页面
      carts: carts,
      totalPrice: total.toFixed(2)
    });
  }

})

有兴趣的童鞋可以下载学习下,没有积分或者有什么技术上问题的小伙伴,都可以私聊我,我有空就会回复的,qq:2029578566;
源文件下载地址