123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- <?php
- /**
- * PtbPay.php UTF-8
- * 平台币支付
- *
- * @date : 2018/5/18 21:19
- *
- * @license 这不是一个自由软件,未经授权不许任何使用和传播。
- * @author : wuyonghong <wyh@huosdk.com>
- * @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;
- }
- }
|