Beispiel #1
0
 /**
  *    经销商采购订单--返回通知结果
  *
  *    @author    Garbin
  *    @param     array $order_info
  *    @param     bool  $strict
  *    @return    array
  */
 function dealer_notify($order_info, $strict = false)
 {
     if (empty($order_info)) {
         $this->_error('order_info_empty');
         return false;
     }
     /* 初始化所需数据 */
     $notify = $this->_get_notify();
     $alipayNotify = new AlipayNotify($this->alipay_config);
     /* 验证来路是否可信 */
     if ($strict) {
         /* 严格验证 */
         $verify_result = $alipayNotify->queryNotify($notify['notify_id']);
         if (!$verify_result) {
             /* 来路不可信 */
             $this->_error('notify_unauthentic');
             return false;
         }
     }
     /* 验证通知是否可信 */
     $sign_result = $alipayNotify->verifySign($notify);
     if (!$sign_result) {
         /* 若本地签名与网关签名不一致,说明签名不可信 */
         $this->_error('sign_inconsistent');
         return false;
     }
     /* ----------通知验证结束---------- */
     /* ----------本地验证开始---------- */
     /* 验证与本地信息是否匹配 */
     /* 这里不只是付款通知,有可能是发货通知,确认收货通知 */
     if ($order_info['ship_bill_no'] != $notify['out_trade_no']) {
         /* 通知中的订单与欲改变的订单不一致 */
         $this->_error('order_inconsistent');
         return false;
     }
     if ($order_info['amount'] != $notify['total_fee']) {
         /* 支付的金额与实际金额不一致 */
         $this->_error('price_inconsistent');
         return false;
     }
     //至此,说明通知是可信的,订单也是对应的,可信的
     /* 按通知结果返回相应的结果 */
     $order_no = '';
     switch ($notify['trade_status']) {
         case 'WAIT_BUYER_PAY':
             //等待买家付款
             // $order_status = DORDER_PENDING;     // 10
             $order_status = DORDER_READY;
             // 0
             break;
         case 'WAIT_SELLER_SEND_GOODS':
             //买家已付款,等待卖家发货
             //   $order_status = DORDER_ACCEPTED; //
             $order_status = DORDER_PENDING;
             // 订单改为付款状态 10
             $trade_no = $notify['trade_no'];
             break;
         case 'WAIT_BUYER_CONFIRM_GOODS':
             //卖家已发货,等待买家确认
             // $order_status = DORDER_SHIPPED;
             $order_status = DORDER_ACCEPTED;
             // 订单状态改为 已发货 20  , 发货状态:DORDER_SELLED 改为10
             break;
         case 'TRADE_FINISHED':
             //交易结束
             /* 说明是第三方担保交易,交易结束 */
             $order_status = DORDER_SHIPPED;
             // 订单买家确认收货,订单状态完成。  status =30  ,take_status = 30, abn_status = 30
             break;
         case 'TRADE_CLOSED':
             //交易关闭
             $order_status = DORDER_CANCLED;
             // 废弃订单 status =30  ,take_status = 30,,abn_status = 40
             break;
         default:
             $this->_error('undefined_status');
             return false;
             break;
     }
     switch ($notify['refund_status']) {
         case 'REFUND_SUCCESS':
             //退款成功,取消订单
             $order_status = DORDER_CANCLED;
             break;
     }
     /* 记录日志  */
     $this->put_log();
     return array('target' => $order_status, 'trade_status' => $notify['trade_status'], 'trade_no' => $trade_no);
 }