下单页面功能设计思路
- 获取用户联系方式及收货地址;
- 获取订单商品的详细信息;
- 点击去付款,跳转至微信支付页面;
- 支付成功后,删除购物车商品信息,跳转至全部订单界面。
新建订单表
CREATE TABLE `shancloudy`.`ims_shangcheng_xk_order` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`out_trade_no` VARCHAR(18) NOT NULL COMMENT '交易订单号' ,
`total_price` DECIMAL(10,2) NOT NULL DEFAULT '0' COMMENT '总价格' ,
`member_id` MEDIUMINT NOT NULL COMMENT '会员id' ,
`member_name` VARCHAR(60) NOT NULL COMMENT '会员姓名' ,
`member_tel` VARCHAR(11) NOT NULL COMMENT '会员手机号' ,
`member_address` VARCHAR(255) NOT NULL COMMENT '详细收货地址' ,
`create_time` VARCHAR(10) NOT NULL COMMENT '生成订单时间' ,
`order_status` TINYINT(1) NOT NULL DEFAULT '0' COMMENT '0:未支付,1:代发货,2待收货,3待评价,4待退款' ,
PRIMARY KEY (`id`)) ENGINE = InnoDB;
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020072918212039.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RndGdpaHR5eXZpaQ==,size_16,color_FFFFFF,t_70)
新建订单商品表
CREATE TABLE `shancloudy`.`ims_shangcheng_xk_order_goods` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`order_id` MEDIUMINT NOT NULL COMMENT '订单id' ,
`goods_id` MEDIUMINT NOT NULL COMMENT '商品id' ,
PRIMARY KEY (`id`)) ENGINE = InnoDB;
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200730085945641.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RndGdpaHR5eXZpaQ==,size_16,color_FFFFFF,t_70)
生成订单ordering.wxml
<!--shangcheng_xk/pages/order/ordering/ordering.wxml-->
<view class="container">
<scroll-view scroll-y="true" style="height: {{screenHeight}}px;" >
<view class="address">
<image src="http://www.shancloudy.com/attachment/images/2/2020/07/a1ADVtSUTDKsSq0N4T1aaDuX44QQ4F.png" mode="widthFix"></image>
<view class="address-info" wx:if="{{ username || telnumber || address}}">
<text>{{ username }}-{{ telnumber }}</text>
<text>{{address}}</text>
</view>
<view class="address-info" wx:else>
<text>请选择收货地址...</text>
</view>
</view>
<view class="goods-list">
<view class="goods-item" wx:if="{{ orderGoods }}" wx:for="{{ orderGoods }}" wx:key="id">
<view class="goods-thumb">
<image src="{{ item.image }}" mode="widthFix"></image>
</view>
<view class="goods-info">
<view class="goods-title">
<text>{{ item.goods_name }}</text>
<text>{{ item.goods_desc}}</text>
</view>
<view class="g-p-info">
<view class="goods-price">
<text>¥{{ item.now_price }}</text>
<text>{{ item.original_price }}</text>
</view>
<view class="goods-num">
<!-- <text>x1</text> -->
</view>
</view>
</view>
</view>
<view class="goods-item" wx:if="{{ nowBuyGoods }}">
<view class="goods-thumb">
<image src="{{nowBuyGoods.image[0] }}" mode="widthFix"></image>
</view>
<view class="goods-info">
<view class="goods-title">
<text>{{ nowBuyGoods.goods_name }}</text>
<text>{{ nowBuyGoods.goods_desc}}</text>
</view>
<view class="g-p-info">
<view class="goods-price">
<text>¥{{ nowBuyGoods.now_price }}</text>
<text>{{ nowBuyGoods.original_price }}</text>
</view>
<view class="goods-num">
<!-- <text>x1</text> -->
</view>
</view>
</view>
</view>
</view>
<view class="other">
<view class="other-menu">
<image class="other-thumb" src="http://www.shancloudy.com/attachment/images/2/2020/07/Pg59rV5Sksb79rox77v56Kb3okv7b5.png" mode="widthFix"></image>
<view class="other-name">
<text>配送费</text>
<text>></text>
</view>
</view>
<view class="other-menu">
<image class="other-thumb" src="http://www.shancloudy.com/attachment/images/2/2020/07/RwJ888q8JpxhH8Q0p8xt8jPRZq8Nx8.png" mode="widthFix"></image>
<view class="other-name">
<text>留言</text>
<text>></text>
</view>
</view>
<view class="other-menu">
<image class="other-thumb" src="http://www.shancloudy.com/attachment/images/2/2020/07/HY5APtjfnyJwOf1VtVTKk1ipn177Kb.png" mode="widthFix"></image>
<view class="other-name">
<text>优惠券</text>
<text>></text>
</view>
</view>
</view>
<view class="pay-type">
<view class="pay-title">支付方式</view>
<view class="wxpay">
<icon type="success" size="16"></icon>
<text>微信支付</text>
</view>
</view>
</scroll-view>
<view class="pay">
<view class="total">
<text>合计:</text>
<text>¥{{ orderPrice }}元</text>
</view>
<view class="payment" bindtap="goPay">
<text>去付款</text>
</view>
</view>
</view>
生成订单ordering.js
var app = getApp()
Page({
data: {
screenHeight: '',
username: '',
telnumber: '',
address: '',
orderPrice: '',
orderGoods: '',
nowBuyGoods: ''
},
onLoad: function (options) {
var that = this
wx.getSystemInfo({
success: function (res) {
var screenHeight = res.windowHeight - 50
that.setData({
screenHeight: screenHeight
})
},
})
this.getOrderInfo()
this.getMemberAddress()
},
getMemberAddress: function () {
var that = this
var member = wx.getStorageSync('member')
var memberId = member.id
app.util.request({
url: 'entry/wxapp/getMemberAddress',
data: {
m: 'shangcheng_xk',
member_id: memberId
},
success(res) {
that.setData({
username: res.data.data.username,
telnumber: res.data.data.telnumber,
address: res.data.data.address
})
}
});
},
getOrderInfo: function (orderPrice, goodsId) {
var that = this
var orderPrice = wx.getStorageSync('orderPrice')
var orderGoods = wx.getStorageSync('orderGoods')
var goodsInfo = wx.getStorageSync('goodsInfo')
if (orderPrice && orderGoods) {
that.setData({
orderPrice: orderPrice,
orderGoods: orderGoods
})
} else {
that.setData({
orderPrice: goodsInfo.now_price,
nowBuyGoods: goodsInfo
})
}
},
goPay: function () {
var that = this
var member = wx.getStorageSync('member')
var memberId = member.id
var goodsInfo = wx.getStorageSync('goodsInfo')
var orderGoods = wx.getStorageSync('orderGoods')
var orderPrice = wx.getStorageSync('orderPrice')
if (goodsInfo) {
app.util.request({
url: 'entry/wxapp/getGoodsOrder',
data: {
m: 'shangcheng_xk',
member_id: memberId,
goods_id: goodsInfo.id,
goods_price: goodsInfo.now_price
},
success(res) {
if (res.data.data.status == 200) {
wx.removeStorageSync('goodsInfo')
var outTradeNo = res.data.data.out_trade_no
var orderPrice = res.data.data.order_price
var orderId = res.data.data.order_id
var orderType = 'goodsType'
that.weixinpay(outTradeNo, orderPrice, orderId, orderType)
}
}
})
} else if (orderPrice && orderGoods) {
var orderGoodsId = []
for (var i = 0; i < orderGoods.length; i++) {
orderGoodsId[i] = orderGoods[i]['id']
}
var goodsIds = orderGoodsId.join('-')
app.util.request({
url: 'entry/wxapp/getCartOrder',
data: {
m: 'shangcheng_xk',
member_id: memberId,
goods_ids: goodsIds,
order_price: orderPrice
},
success(res) {
if (res.data.data.status == 200) {
wx.removeStorageSync('orderPrice')
wx.removeStorageSync('orderGoods')
var outTradeNo = res.data.data.out_trade_no
var orderPrice = res.data.data.order_price
var orderId = res.data.data.order_id
var orderType = 'cartType'
that.weixinpay(outTradeNo, orderPrice, orderId, orderType)
}
}
})
}
},
weixinpay: function (outTradeNo, orderPrice, orderId, orderType) {
var that = this
app.util.request({
'url': 'entry/wxapp/pay',
data: {
outTradeNo: outTradeNo,
orderPrice: orderPrice
},
'cachetime': '0',
success(res) {
if (res.data && res.data.data && !res.data.errno) {
wx.requestPayment({
'timeStamp': res.data.data.timeStamp,
'nonceStr': res.data.data.nonceStr,
'package': res.data.data.package,
'signType': 'MD5',
'paySign': res.data.data.paySign,
'success': function (res) {
if (orderType == 'cartType') {
var member = wx.getStorageSync('member')
var memberId = member.id
app.util.request({
url: 'entry/wxapp/delCartGoods',
data: {
m: 'shangcheng_xk',
memberId:memberId
},
success(res) {
that.setData({
})
}
})
}
app.util.request({
url: 'entry/wxapp/modifyOrderStatus',
data: {
m: 'shangcheng_xk',
orderId: orderId
},
success(res) {
that.setData({
})
}
})
wx.showToast({
title: '支付成功',
icon: 'success',
duration: 2000
})
setTimeout(function () {
wx.navigateTo({
url: '/shangcheng_xk/pages/order/myorder/myorder',
})
}, 2000)
},
'fail': function (res) {
console.log('支付失败')
}
})
}
},
fail(res) {
wx.showModal({
title: '系统提示',
content: res.data.message ? res.data.message : '错误',
showCancel: false,
success: function (res) {
if (res.confirm) {
backApp()
}
}
})
}
})
},
onReady: function () {
},
onShow: function () {
},
onHide: function () {
},
onUnload: function () {
},
onPullDownRefresh: function () {
},
onReachBottom: function () {
},
onShareAppMessage: function () {
}
})
生成订单wxapp.php
public function doPageGetMemberAddress(){
global $_W,$_GPC;
$errno = 0;
$message = '返回消息';
$data = array();
$addressRes = pdo_get('shangcheng_xk_address',['member_id'=>$_GPC['member_id'],'default_address'=>1]);
if($addressRes){
return $this->result($errno, '获取用户收货地址成功', $addressRes);
}else{
return $this->result($errno, '获取用户收货地址失败', ['status'=>400]);
}
}
public function doPageGetGoodsOrder(){
global $_W,$_GPC;
$errno = 0;
$message = '返回消息';
$data = array();
$addressInfo = pdo_get('shangcheng_xk_address',['member_id'=>$_GPC['member_id'],'default_address'=>1]);
$goodsInfo = pdo_get('shangcheng_xk_goods',['id'=>$_GPC['goods_id']]);
$orderNo = $this->OutTradeNo();
$orderData = [
'out_trade_no' =>$orderNo,
'total_price' =>$goodsInfo['now_price'],
'member_id' =>$_GPC['member_id'],
'member_name' =>$addressInfo['username'],
'member_tel' =>$addressInfo['telnumber'],
'member_address'=>$addressInfo['address'],
'create_time' =>time(),
'order_status' =>0
];
$orderRes = pdo_insert('shangcheng_xk_order',$orderData);
if($orderRes){
$orderId = pdo_insertid();
$orderGoodsData = [
'order_id' =>$orderId,
'goods_id' =>$_GPC['goods_id']
];
$orderGoodsRes = pdo_insert('shangcheng_xk_order_goods',$orderGoodsData);
if($orderGoodsRes){
return $this->result($errno, '插入订单商品表成功', ['status'=>200,'out_trade_no'=>$orderNo,'order_price'=>$goodsInfo['now_price'],'order_id'=>$orderId]);
}else{
return $this->result($errno, '插入订单商品表失败', ['status'=>400]);
}
return $this->result($errno, '生成订单数据成功', $orderId);
}else{
return $this->result($errno, '生成订单数据失败', ['status'=>400]);
}
}
public function doPageGetCartOrder(){
global $_W,$_GPC;
$errno = 0;
$message = '返回消息';
$data = array();
$orderPrice = $_GPC['order_price'];
$addressInfo = pdo_get('shangcheng_xk_address',['member_id'=>$_GPC['member_id'],'default_address'=>1]);
$orderNo = $this->OutTradeNo();
$orderData = [
'out_trade_no' =>$orderNo,
'total_price' =>$orderPrice,
'member_id' =>$_GPC['member_id'],
'member_name' =>$addressInfo['username'],
'member_tel' =>$addressInfo['telnumber'],
'member_address'=>$addressInfo['address'],
'create_time' =>time(),
'order_status' =>0
];
$orderRes = pdo_insert('shangcheng_xk_order',$orderData);
if($orderRes){
$orderId = pdo_insertid();
$goodsIds = $_GPC['goods_ids'];
$goodsIdsRes = explode('-', $goodsIds);
foreach ($goodsIdsRes as $k => $v) {
$goodsData = [
'order_id' =>$orderId,
'goods_id' =>$v
];
$orderGoodsRes = pdo_insert('shangcheng_xk_order_goods',$goodsData);
}
if($orderGoodsRes){
return $this->result($errno, '插入订单商品表成功', ['status'=>200,'out_trade_no'=>$orderNo,'order_price'=>$orderPrice,'order_id'=>$orderId]);
}else{
return $this->result($errno, '插入订单商品表失败', ['status'=>400]);
}
return $this->result($errno, '生成订单数据成功', $orderId);
}else{
return $this->result($errno, '生成订单数据失败', ['status'=>400]);
}
}
public function OutTradeNo(){
$yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J');
$orderNo = $yCode[intval(date('Y')) - 2013] . strtoupper(dechex(date('m'))) . date('d') . time() . substr(microtime(), 2, 5) . sprintf('%02d', rand(0, 99999));
return $orderNo;
}
public function doPagePay() {
global $_GPC, $_W;
$orderid = $_GPC['outTradeNo'];
$fee = $_GPC['orderPrice'];
$order = array(
'tid' => $orderid,
'user' => $_W['openid'],
'fee' => floatval($fee),
'title' => '小康课堂',
);
$pay_params = $this->pay($order);
if (is_error($pay_params)) {
return $this->result(1, '支付失败,请重试');
}
return $this->result(0, '', $pay_params);
}
public function doPageDelCartGoods(){
global $_W,$_GPC;
$errno = 0;
$message = '返回消息';
$memberId = $_GPC['memberId'];
$cartRes = pdo_delete('shangcheng_xk_cart',['member_id'=>$memberId,'selected'=>1]);
if($cartRes){
return $this->result($errno, '删除购物车选中产品成功', ['status'=>200]);
}else{
return $this->result($errno, '删除购物车选中产品失败', ['status'=>400]);
}
}