* @version : HUOSDK 8.0 */ namespace huo\controller\pay; use huo\controller\common\Base; use huo\controller\common\CommonFunc; use huo\controller\member\MemCache; use huolib\constant\CommonConst; use huolib\constant\OrderConst; use huolib\constant\PaywayConst; use huolib\status\MemberStatus; use huolib\status\OrderStatus; use huolib\status\SettleStatus; use huolib\tool\StrUtils; class PtbPay extends Base { /** * 平台币SDK支付 * * @param string $order_id 订单ID * * @return array */ public function ptbSdkPay($order_id) { $_soc_class = SdkOrderCache::ins(); $_order_data = $_soc_class->getInfoByOrderId($order_id); $_order_data['payway'] = PaywayConst::PAYWAY_PTBPAY; $_soc_class->saveOrderCache($order_id, $_order_data); if ($_order_data == false) { $_code = OrderStatus::ORDER_NOT_EXISTS; return $this->huoError($_code, OrderStatus::getMsg($_code)); } /* 实际支付金额为0 */ $_order_data['real_amount'] = 0; /* 平台币支付所有金额 */ $_order_data['ptb_amount'] = $_order_data['amount']; $_soc_class->updateOrder($order_id, $_order_data); /* Modified by wuyonghong BEGIN 2018/3/26 ISSUES:5314 LTV */ /* 充值时计算LTV */ $_ltv_class = new \ltv\Ltv(); $_mem_data = (new \huo\model\member\MemberModel())->getInfoById( $_order_data['mem_id'] );//field($_field)->where($_map)->find(); $_ltv_class->charge( $_mem_data['app_id'], $_mem_data['agent_id'], $_order_data['app_id'], $_order_data['amount'], $_order_data['update_time'], $_mem_data['create_time'] ); /* END 2018/3/26 ISSUES:5314 */ $_rs = (new Notify())->doAfterPayNotify($order_id); $_cp_status = OrderConst::CP_STATUS_SUC; if (OrderStatus::NOTIFY_FAIL == $_rs['code']) { $_cp_status = OrderConst::CP_STATUS_NOT; } else { if (SettleStatus::NO_ERROR != $_rs['code']) { return $this->huoReturn($_rs); } } $_rdata = $this->clientAjax($_order_data['payway'], $order_id, 2, 2, $_cp_status); $_code = OrderStatus::NO_ERROR; return $this->huoSuccess($_code, OrderStatus::getMsg($_code), $_rdata); } /** * 扣除平台币 * * @param string $order_id 订单ID * * @return array */ public function PtbOrder($order_id) { $_soc_class = SdkOrderCache::ins(); $_order_data = $_soc_class->getInfoByOrderId($order_id); if (false == $_order_data) { $_code = OrderStatus::ORDER_NOT_EXISTS; return $this->huoError($_code, OrderStatus::getMsg($_code)); } $_me_data = MemCache::ins()->getMeInfoById($_order_data['mem_id']); if (empty($_me_data)) { $_code = MemberStatus::UID_NOT_EXISTS; return $this->huoError($_code, MemberStatus::getMsg($_code)); } /* 订单金额与平台币金额比对 */ $_ptb_cnt = $_me_data['ptb_cnt']; $_ptb_rate = CommonFunc::getPtbRmbRate(); $_mem_ptb_amount = StrUtils::formatNumber($_ptb_cnt / $_ptb_rate, 2); if ($_mem_ptb_amount > CommonConst::CONST_ZERO_COMPARE && $_mem_ptb_amount < $_order_data['amount']) { /* 平台币金额少于订单金额 还需其他支付 */ $_order_data['ptb_amount'] = $_mem_ptb_amount; $_order_data['real_amount'] = StrUtils::formatNumber($_order_data['amount'] - $_order_data['ptb_amount']); $_soc_class->updateOrder($order_id, $_order_data); $_code = OrderStatus::NO_ERROR; } elseif ($_mem_ptb_amount >= $_order_data['amount']) { /* 平台币金额大于订单金额 */ $_order_data['ptb_amount'] = $_order_data['amount']; $_order_data['real_amount'] = StrUtils::formatNumber($_order_data['amount'] - $_order_data['ptb_amount']); $_soc_class->updateOrder($order_id, $_order_data); $_code = OrderStatus::NO_ERROR; } else { /* 不处理扣除平台币 */ $_code = OrderStatus::NO_ERROR; } return $this->huoSuccess($_code, OrderStatus::getMsg($_code)); } /** * 游戏客户端的标准返回 * * @param $payway * @param $order_id * @param int $status * @param int $is_native * @param int $cp_status * * @return mixed */ public function clientAjax($payway, $order_id, $status = 1, $is_native = 2, $cp_status = 2) { $_rdata['pay_type'] = $payway; $_rdata['order_id'] = $order_id; $_rdata['real_amount'] = 0; $_rdata['token'] = $order_id; $_rdata['is_native'] = $is_native; $_rdata['status'] = $status; $_rdata['cp_status'] = $cp_status; return $_rdata; } }