123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- <?php
- /**
- * OrderRepeat.php UTF-8
- * 通知CP
- *
- * @date : 2020/7/29 12:00
- *
- * @license 这不是一个自由软件,未经授权不许任何使用和传播。
- * @author : chenbingling <cbl@huosdk.com>
- * @version : HUOSDK 8.0
- */
- namespace huoOrderRepeat\controller;
- use huo\controller\common\Base;
- use huo\controller\game\Game;
- use huo\controller\pay\SdkOrderCache;
- use huo\controller\request\Request;
- use huo\model\log\OrderCpLogModel;
- use huolib\constant\OrderConst;
- use huolib\status\CommonStatus;
- use huolib\status\OrderStatus;
- use huolib\tool\StrUtils;
- use huoOrderRepeat\constant\OrderRepeatConstant;
- use huoOrderRepeat\queue\RepeatQueue;
- use think\Log;
- class OrderRepeat extends Base {
- protected function retSucMsg($code, $data = []) {
- $_msg = OrderStatus::getMsg($code);
- return $this->huoSuccess($code, $_msg, $data);
- }
- protected function retErrMsg($code) {
- $_err_msg = OrderStatus::getMsg($code);
- return $this->huoError($code, $_err_msg);
- }
- /**
- * CP通知入队列
- *
- * @param string $order_id 订单id
- * @param int $attempts 任务尝试次数
- *
- * @return array
- */
- public function cpNotifyQueue($order_id, $attempts = OrderRepeatConstant::JOB_REPEAT_MAX_CNT) {
- $_param['order_id'] = $order_id;
- $_param['attempts'] = $attempts;
- (new RepeatQueue($_param))->pushQueue();
- return $this->retSucMsg(CommonStatus::NO_ERROR);
- }
- /**
- * CP通知
- *
- * @param string $order_id
- *
- * @return array|mixed
- */
- public function notify($order_id = '') {
- if (empty($order_id)) {
- return $this->retErrMsg(OrderStatus::ORDER_ID_EMPTY);
- }
- // $_order_model = new OrderModel();
- $_order_model = SdkOrderCache::ins();
- $_order_data = $_order_model->getInfoByOrderId($order_id);
- if (false == $_order_data) {
- return $this->retErrMsg(OrderStatus::ORDER_NOT_EXISTS);
- }
- if (OrderConst::PAY_STATUS_SUC != $_order_data['status']) {
- Log::write(
- "func=".__FUNCTION__."&class=".__CLASS__."&code=".OrderStatus::ORDER_NOT_PAY.'&order_data.'
- .json_encode($_order_data),
- LOG::LOG
- );
- return $this->retErrMsg(OrderStatus::ORDER_NOT_PAY);
- }
- if (OrderConst::CP_STATUS_SUC == $_order_data['cp_status']) {
- return $this->retSucMsg(OrderStatus::NO_ERROR);
- }
- $_param = $this->setCpParam($_order_data);
- // $_cp_url = (new GameModel())->getCpPaybackUrl($_order_data['app_id']);
- $_cp_url = (new Game())->getCpPaybackUrl($_order_data['app_id']);
- if (empty($_cp_url)) {
- Log::write(
- "func=".__FUNCTION__."&class=".__CLASS__."&code=".OrderStatus::NOTIFY_URL_EMPTY.'&order_data.'
- .json_encode($_order_data),
- LOG::ERROR
- );
- return $this->retErrMsg(OrderStatus::NOTIFY_URL_EMPTY);
- }
- $_cp_status = $this->notifyCp($_cp_url, $_param);
- /* 更新订单信息 */
- $_update_order_data['cp_status'] = $_cp_status;
- $_update_order_data['notify_cnt'] = $_order_data['notify_cnt'] + 1;
- $_update_order_data['last_notify_time'] = time();
- if (OrderConst::CP_STATUS_SUC == $_cp_status) {
- $_update_order_data['finish_time'] = time();
- // $_rs = $_order_model->updateData($_update_order_data, $_order_data['id']);
- $_rs = SdkOrderCache::ins()->updateOrder($_order_data['order_id'], $_update_order_data);
- if (true == $_rs) {
- $_code = OrderStatus::NO_ERROR;
- } else {
- $_code = OrderStatus::INNER_ERROR;
- }
- } else {
- $_update_order_data['is_handle'] = OrderConst::ORDER_IS_HANDLE;
- // $_order_model->updateData($_update_order_data, $_order_data['id']);
- SdkOrderCache::ins()->updateOrder($_order_data['order_id'], $_update_order_data);
- $_code = OrderStatus::NOTIFY_FAIL;
- }
- /* 插入通知Log */
- $_data['pay_id'] = get_val($_order_data, 'id', 0);
- $_data['order_id'] = get_val($_order_data, 'order_id', '');
- $_data['cp_order_id'] = get_val($_order_data, 'cp_order_id', 0);
- $_data['status'] = get_val($_order_data, 'status', '');
- $_data['cp_payback_url'] = $_cp_url;
- $_data['params'] = $_param;
- $_data['ext'] = get_val($_order_data, 'ext', '');
- $_data['cp_status'] = get_val($_update_order_data, 'cp_status', 0);
- $_data['notify_cnt'] = get_val($_update_order_data, 'notify_cnt', '');
- $_oc_model = new OrderCpLogModel();
- $_oc_model->insertLog($_data);
- return $this->retSucMsg($_code);
- }
- /**
- * @param $cp_url
- * @param $param
- *
- * @return int
- */
- public function notifyCp($cp_url, $param) {
- $_cp_rs = Request::cpPayback($cp_url, $param);
- if ($_cp_rs > 0) {
- $_cp_status = 2;
- } else {
- $_cp_status = 3;
- }
- return $_cp_status;
- }
- /**
- * 设置通知CP参数
- *
- * @param array $order_data
- *
- * @return bool|string
- */
- public function setCpParam($order_data = []) {
- $_cp_rq_data['app_id'] = get_val($order_data, 'app_id');
- $_cp_rq_data['cp_order_id'] = get_val($order_data, 'cp_order_id');
- $_cp_rq_data['mem_id'] = get_val($order_data, 'mg_mem_id', 0);/* 使用游戏玩家ID */
- $_cp_rq_data['order_id'] = get_val($order_data, 'order_id');
- $_cp_rq_data['order_status'] = get_val($order_data, 'status');
- $_cp_rq_data['pay_time'] = get_val($order_data, 'create_time');
- $_cp_rq_data['product_id'] = get_val($order_data, 'product_id');
- $_cp_rq_data['product_name'] = get_val($order_data, 'product_name');
- $_cp_rq_data['product_price'] = get_val($order_data, 'amount');
- $_cp_rq_data['ext'] = get_val($order_data, 'ext');
- $_param = StrUtils::argSort($_cp_rq_data);
- $_signstr = StrUtils::createLinkString($_param);
- /* 获取游戏信息 */
- $_app_key = (new Game())->getAppKey($_cp_rq_data['app_id']);
- if (empty($_app_key)) {
- return false;
- }
- $_sign = md5($_signstr."&app_key=".$_app_key);
- $_cp_rq_data['sign'] = $_sign;
- return $_signstr."&sign=".$_sign;
- }
- }
|