先对照要求建立数据表
模型关联查询订单表的id(kong)
class order extends Model
{
protected $pk='id';
public function Oshop(){
return $this->hasOne(shopitem::class,'order_id','id')->bind(['good_name','good_price']);
}
}
生成订单信息
public function buy($id)
{
//从session中查找登录信息
$user = session('user');
//判断是否登录
if (!$user){
session('back_url','buy');
return redirect('reginter');
}
//查找登录用户的id
$userdata = (new LoginModel())->where('usernum',$user['usernum'])->find()->toArray();
$uid = $userdata['id'];
//生成订单
$ordernumber = time().rand(1000,99999);
//拼接订单信息
$order = [
'user_id' => $uid,
'order_number' => $ordernumber
];
//启动事物
Db::startTrans();
try {
//添加订单表
(new order())->insert($order);
//根据订单号查询订单信息
$order_data = (new order())->where('order_number',$ordernumber)->find()->toArray();
//订单id
$oid = $order_data['id'];
//根据订单id查询信息
$shop_data = (new shop())->find($id);
//拼接订单商品表的信息
$order_shop = [
'order_id' => $oid,
'good_name' => $shop_data['good_name'],
'good_price' => $shop_data['good_price']
];
//添加订单商品
(new shopitem())->insert($order_shop);
//将订单号存到缓存
cache('order_number',$ordernumber);
//提交事务
Db::commit();
} catch (\Exception $e) {
// 回滚事务
Db::rollback();
}
$data = (new order())->with('Oshop')->where('order_number',$ordernumber)->find()->toArray();
return view('home\orderlist',['data'=>$data]);
}
订单信息完成后进行第三方支付
tp6第三方引入 支付宝沙箱支付_code_nutter的博客-CSDN博客
/**
* 第三方支付
* @return \think\Response
*/
public function pay()
{
try {
//查询订单号
$ordernumber = cache('order_number');
//查询订单信息
$order_data = (new order())->with('Oshop')->where('order_number',$ordernumber)->find();
if (!$order_data){
throw new Exception('订单号异常');
}
//订单号
$order_num = $ordernumber;
//订单名称
$name = $order_data['good_name'];
//订单价格
$price = $order_data['good_price'];
$pay_type = 'alipay';
switch ($pay_type) {
case 'alipay':
{
echo "<form id='alipayment' action='/alipay/pagepay/pagepay.php' method='post'>
<input id='WIDout_trade_no' name='WIDout_trade_no' value='" . $order_num . "'/>
<input id='WIDsubject' name='WIDsubject' value='" . $name . "'/>
<input id='WIDtotal_amount' name='WIDtotal_amount' value='" . $price . "'/>
<input id='WIDbody' name='WIDbody' />
</form><script>document.getElementById('alipayment').submit();</script>";
}
}
}catch (Exception $exception){
throw new Exception('断网异常');
}
}