"wxpay","desc" => ""); $types[] = array("payment" => "alipay","desc" => ""); $types[] = array("payment" => "cmbpay","desc" => "首付最高减99"); return $types; } static public function pay_bonus($pay_sn) { $member_info = array('member_id' => $_SESSION['member_id'], 'member_name' => $_SESSION['member_name']); $logic_payment = Logic('payment'); $logic_payment->payPredepositEx($pay_sn,$member_info); } static public function pay($pay_sn, $payment,$usebonus,&$err) { if($usebonus) { self::pay_bonus($pay_sn); } $logic_payment = Logic('payment'); $payinfo = $logic_payment->getRealOrderInfo($pay_sn, $_SESSION['member_id']); if (intval($payinfo['data']['api_pay_state']) != 0) { $err = array('code' => errcode::ErrPayment, 'msg' => $payinfo['msg']); return false; } $left_cents = intval(doubleval($payinfo['data']['api_pay_amount']) * 100 + 0.5); if($left_cents == 0) { $output['need_pay'] = false; $output['tips'] = "已经用红包支付完成"; $payinfo = self::update_order($pay_sn, $pay_sn, 'bonus'); // 更新订单 if (isset($payinfo) && $payinfo['state']) { if(is_pushoms()) { $logic_delivery = Logic('delivery'); $ret = $logic_delivery->putOrder($pay_sn, $pay_sn); if(empty($ret)) { //todo must add to 定时任务 Log::record("Put order to oms error: pay_sn={$pay_sn},bonus pay.",Log::ERR); } } } return $output; } else { $pay = null; if($payment == "wxpay") { $pay = new Pay\wxpay(); } else if($payment == "alipay") { $pay = new Pay\alipay(); } else if($payment == "cmbpay") { $pay = new Pay\cmbpay(); } else { $err = array('code' => errcode::ErrPayment, 'msg' => $payinfo['msg']); return false; } $subject = $payinfo['data']['subject']; $pay_sn = $payinfo['data']['pay_sn']; $order_sn = $payinfo['data']['order_list'][0]['order_sn']; $output['need_pay'] = true; $output['tips'] = ""; $third_param = $pay->gen_pay($pay_sn,$left_cents,$order_sn,$subject); $output['param'] = $third_param; return $output; } } public static function check_fee($pay_sn,$total_fee,&$need_pay) { $logic_payment = Logic('payment'); $result = $logic_payment->getRealOrderInfo($pay_sn); if (intval($result['data']['api_pay_state']) != 0) { return false; } $need_pay = intval($result['data']['api_pay_amount'] * 100 + 0.5); $total_fee = intval($total_fee * 100 + 0.5); return ($need_pay === $total_fee); } static public function paied($pay_sn) { $logic_payment = Logic('payment'); $result = $logic_payment->getRealOrderInfo($pay_sn); if (intval($result['data']['api_pay_state']) != 0) { return true; } return false; } public function OnNotify($param,$payment) { $pay = $this->gen_payment($payment); if($pay == null) { return false; } $result = $pay->on_notify($param); if($result != false) { $pay_sn = $result['pay_sn']; $trade_no = $result['trade_no']; $cb_info = $this->update_order($pay_sn,$trade_no,$payment); if ($cb_info['state'] == false) { Log::record("update_order fail: pay_sn={$pay_sn},trade_no={$trade_no}", Log::DEBUG); return false; } else { if(is_pushoms()) { $logic_delivery = Logic('delivery'); $logic_delivery->putOrder($pay_sn, $trade_no); Log::record("update_order success: pay_sn={$pay_sn}", Log::DEBUG); } $this->OnSuccess($pay_sn); return true; } } else { return false; } } private function gen_payment($payment) { if($payment == "wxpay") { return new Pay\wxpay(); } else if($payment == "alipay") { return new Pay\alipay(); } else if($payment == "cmbpay") { return new Pay\cmbpay(); } else { return null; } } public function OnSuccess($pay_sn) { $logic_payment = Logic('payment'); $result = $logic_payment->getRealOrderInfo($pay_sn); if($result['state'] != true) { return false; } $data = &$result['data']; $order_amount = 0.0; $goods_amount = 0.0; if(is_array($data['order_list'])) { foreach($data['order_list'] as $key => $order) { $order_amount += doubleval($order['order_amount']); $goods_amount += doubleval($order['goods_amount']); } $mod = Model('order'); $info = $mod->getOrderInfo(array('pay_sn' => $pay_sn)); $buyer_id = intval($info['buyer_id']); $goods_amount = intval($info['goods_amount']); $ret = account_helper::paysuccess_bonus($buyer_id,$goods_amount); if($ret == false) { Log::record("向用户发送购物后分享红包失败",log::ERR); return false; } else { return true; } } else { return false; } } public function update_order($paysn, $trade_no, $payment) { $logic_payment = Logic('payment'); $tmp = explode('|', $paysn); $paysn = $tmp[0]; if (!empty($tmp[1])) { $order_type = $tmp[1]; } else { $order_pay_info = Model('order')->getOrderPayInfo(array('pay_sn' => $paysn)); if (empty($order_pay_info)) { $order_type = 'v'; } else { $order_type = 'r'; } } if ($order_type == 'r') { $result = $logic_payment->getRealOrderInfo($paysn); if (intval($result['data']['api_pay_state'])) { return array('state' => true); } $order_list = $result['data']['order_list']; $result = $logic_payment->updateRealOrder($paysn, $payment, $order_list, $trade_no); } elseif ($order_type == 'v') { $result = $logic_payment->getVrOrderInfo($paysn, null, true); if ($result['data']['order_state'] != ORDER_STATE_NEW) { return array('state' => true); } $result = $logic_payment->updateVrOrder($paysn, $payment, $result['data'], $trade_no); } return $result; } }