作者 郭盛
1 个管道 的构建 通过 耗费 1 秒

编写续约接口

... ... @@ -98,6 +98,94 @@ class Order extends Api
}
/**
* @ApiTitle (续约订单)
* @ApiSummary (续约订单)
* @ApiMethod (POST)
* @ApiRoute (/api/order/sonorder)
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
*
* @ApiParams (name="order_id", type="int", required=true, description="订单ID")
* @ApiParams (name="is_use", type="int", required=true, description="是否适用优惠劵(0不使用,1使用)")
* @ApiParams (name="coupon_id", type="int", required=false, description="优惠劵ID")
* @ApiParams (name="money", type="string", required=false, description="金额")
* @ApiReturn({
"code": 1,
"msg": "SUCCESS",
"time": "1553839125",
"data": {
"order_id":"order_id",//子订单id
}
})
*/
public function sonorder()
{
$user_id = $this->getUserId();
$param = $this->request->param();
$validate = new Validate([
'order_id' => 'require',
'is_use' => 'require',
'money'=>'require',
]);
if (!$validate->check($param)) {
$this->error($validate->getError());
}
if($param['is_use'] == 1){
if(empty($param['coupon_id'])){
$this->error('优惠劵ID错误');
}
$youhui = Db::name('coupon')->where('id',$param['coupon_id'])->find();
if($youhui['is_use'] != 0){
$this->error('优惠劵已过期或者已使用');
}
$param['createtime'] = time();
$param['num'] = get_order_sn();
$data = Db::name('sonorder')->insertGetId($param);
if(empty($data)){
$this->error('失败');
}else{
//修改优惠劵为已使用
Db::name('coupon')->where('id',$param['coupon_id'])->update(['is_use'=>1]);
$this->success('success',['order_id'=>$data]);
}
}else{
$param['createtime'] = time();
$param['num'] = get_order_sn();
$data = Db::name('sonorder')->insertGetId($param);
$this->success('success',['order_id'=>$data]);
}
}
/**
* @ApiTitle (续约订单支付)
* @ApiSummary (续约订单支付)
* @ApiMethod (POST)
* @ApiRoute (/api/order/sonpay)
* @ApiHeaders (name=token, type=string, required=true, description="请求的Token")
*
* @ApiParams (name="order_id", type="inter", required=true, description="续约订单id")
*
*/
public function sonpay()
{
$user_id = $this->getUserId();
$order_id = $this->request->param('order_id');
if(empty($order_id)){
$this->error('缺少必要参数');
}
$order = Db::name('sonorder')->where('id',$order_id)->find();
if(empty($order)){
$this->error('查询为空');
}
if($order['status'] != 1){
$this->error('订单状态不合法');
}
//微信支付
$openid = $this->getOpenId();
$pay = new WeixinPay();
$this->success('SUCCESS',$pay->pay($openid,$order['num'],"小微问问",$order['money'],url('api/pay/sonnotify','','',true)));
}
/**
* @ApiTitle (支付)
* @ApiSummary (支付)
* @ApiMethod (POST)
... ...
... ... @@ -116,4 +116,53 @@ class Pay extends Api
});
$response->send();
}
/**
* 子订单支付回调
* @throws \EasyWeChat\Core\Exceptions\FaultException
*/
public function sonnotify(){
$app = new Application($this->options);
$response = $app->payment->handleNotify(function($notify, $successful){
// 使用通知里的 "微信支付订单号" 或者 "商户订单号" 去自己的数据库找到订单
$out_trade_no=$notify->out_trade_no;
$order = Db::name('sonorder')->where(['num'=>$out_trade_no])->find();
if (!$order) { // 如果订单不存在
return 'Order not exist.'; // 告诉微信,我已经处理完了,订单没找到,别再通知我了
}
// 如果订单存在
// 检查订单是否已经更新过支付状态
if ($order['status'] != 1) { // 判断是否已经支付
return true; // 已经支付成功了就不再更新了
}
// 用户是否支付成功
if ($successful) {
Db::startTrans();
$update['status'] = 2;
$update['paytime'] = time();
//查出父订单信息
$info = Db::name('order')
->where('id',$order['order_id'])
->find();
if($info['expirationtime'] > time()){
//未到过期时间
Db::name('order')
->where('id',$order['order_id'])
->update(['expirationtime'=>$info['expirationtime']+86400*7]);
}else{
Db::name('order')
->where('id',$order['order_id'])
->update(['expirationtime'=>$update['paytime'] + 86400*7]);
}
} else { // 用户支付失败
$update['status']=1;
}
Db::name('sonorder')->where('num',$out_trade_no)->update($update);
Db::commit();
return true; // 返回处理完成
});
$response->send();
}
}
\ No newline at end of file
... ...
此 diff 太大无法显示。