Awesome Open Source
Awesome Open Source

Milk Delivery Admin & Mobile Web App

Milk delivery admin web application, made using Laravel PHP framework.

Overview

PC端后台为主,客户端为微信端Web App,通过公众号进入

主要功能

1. 后台

  • 奶厂端
    用户管理、奶站管理、基础信息管理、订单管理、财务管理、生产管理、奶卡管理、瓶框管理、客户管理、评价管理、统计分析
  • 奶站端
    用户管理、订单管理、基础信息管理、生产配送管理、客户管理、瓶框管理、财务管理、统计分析
  • 总平台端
    系统日志、用户管理、财务管理、客户管理、统计分析

2. 微信端

  • 订单管理
    下单、订单查看、订单修改、评价

Techniques

Laravel框架 v5.2.45

1. UI开发

2. 功能开发

数据库为MySQL, 数据表结构参考database目录

2.1 后台网站

用户登录

通过Middleware与Auth实现过滤

  • RedirectIfNotGongchang
  • RedirectIfNotNaizhan
  • RedirectIfNotZongpingtai

2.2 REST Api

网站内通过Ajax调用实现功能

  • /api/* 开头路径

2.3 微信支付

支付下单流程
  • 统一下单
    生成商户订单号,获取prepay_id
  • JSAPI支付
  • 生成订单
JSAPI支付

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7&index=6

  • 确认订单时开启支付
// 调用微信JS api 支付
function jsApiCall(param) {
    var objParam = JSON.parse(param);

    WeixinJSBridge.invoke(
        'getBrandWCPayRequest',
        objParam,
        function (res) {
            WeixinJSBridge.log(res.err_msg);
            // 支付成功
            if (res.err_msg == 'get_brand_wcpay_request:ok') {
                // 跳转到成功页面
                window.location = SITE_URL + "weixin/zhifuchenggong?tradeNo=" + gTradeNo;
            }
            // 用户取消
            else if (res.err_msg == 'get_brand_wcpay_request:cancel') {
            }
            // 支付失败
            else {
                window.location = SITE_URL + "weixin/zhifushibai";
            }
        }
    );
}
微信支付API
// 商户订单号
$strTradeNo = time() . uniqid();

// 预支付
$worder = new \WxPayUnifiedOrder();
$worder->SetBody($strBody);
$worder->SetOut_trade_no($strTradeNo);
$worder->SetTotal_fee(intval($dAmount * 100));
$worder->SetNotify_url('http://' . $request->server('HTTP_HOST') . '/' . env('SITE_PATH') . 'weixin/payresult');
$worder->SetTrade_type("JSAPI");
$worder->SetOpenid($user->openid);

$payOrder = \WxPayApi::unifiedOrder($worder);

3. 代码技巧

大规模数据的csv导入(订单列表)

select * from TABLE  
into outfile FILE
character set gbk 
fields terminated by ','
escaped by '\"'
enclosed by '\"'
lines terminated by '\n';

4. Third-Party Libraries

4.1 jQuery plugins

4.2 Laravel Excel插件

  • 数据导出为xls或csv文件

4.3 微信支付PHP SDK

app/Lib/Payweixin

4.3 亿美软通

借用亿美软通短信服务实现短信验证

require_once app_path() . "/Lib/ChuanglanSmsHelper/ChuanglanSmsApi.php";

class YimeiSmsCtrl extends Controller {
	public function sendSMS($phone, $msg) {
		// 发送短信验证码
	}
}

Updates

2019-04-01

  • BUG: 少数情况下,微信支付成功,但订单没生成

原因

把生成订单接入点设置为前端收到回复get_brand_wcpay_request:ok之后,并没处理支付回调接口

修复

收到支付回调,结果成功,直接生成订单
WeChatCtrl::paymentResult()

订单生成时,需要附加信息,如备注

微信订单参数里有attach,能保存附加信息,但长度有限制(127),所以不能使用。
因此,数据库里做个临时订单表,统一下单时保存相关数据,生成订单成功后删除。 数据表结构参考wxorders

Need to Improve

  • 调整vendors里面的hard code,保持vendors为初始状态
  • 提高加载地区列表速度
  • 微信公众号、支付采用Laravel插件
  • model里删除多余的appends属性, 换成get函数,提高性能
  • 屏幕小界面布局很难看
  • 微信端界面
  • 数据显示需要分页查询
  • 整理所有垃圾代码 ->get()->first(), ->get()->count()
    ... ...
Alternatives To Milkdeliverylaravel
Select To Compare


Alternative Project Comparisons
Related Awesome Lists
Top Programming Languages
Top Projects

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Javascript (1,058,025
Php (285,758
Plugin (113,905
Laravel (40,833
Bootstrap (27,676
Jquery (26,484
Admin (21,969
Wechat Official Account (22