merchant_id = $mid; return $this; } # 查询订单 public function query() { $input = input(); $this->log($input, 'query'); $result = array(); $sign = $this->_sign($input, array('customerId', 'data', 'timestamp')); if ($sign && isset($input['data']) && isset($input['sign']) && $sign == $input['sign']) { $data = base64_decode($input['data']); $order_id = ''; if (isset($data['orderId'])) { $merchant_order_id = $data['orderId']; $orderService = OrderService::instance(); $order = $orderService->get($order_id, $merchant_order_id, $this->merchant_id); if (!$order) { $orderHistoryService = OrderHistoryService::instance(); $order = $orderHistoryService->get($order_id, $merchant_order_id, $this->merchant_id); } if ($order) { $result['retCode'] = '100'; $result['retMessage'] = '查询成功'; if ($order['status'] == 2) { $data['orderStatus'] = 0; } elseif ($order['status'] == 3) { $data['orderStatus'] = 2; } else { $data['orderStatus'] = 1; } if ($order['channel_callback_msg']) { $order['channel_callback_msg'] = json_decode($order['channel_callback_msg'], true); if (isset($order['channel_callback_msg']['message']) && $order['channel_callback_msg']['message']) { $order['msg'] = $order['channel_callback_msg']['message']; } elseif (isset($order['channel_callback_msg']['msg']) && $order['channel_callback_msg']['msg']) { $order['msg'] = $order['channel_callback_msg']['msg']; } if (isset($order['msg'])) { $order['msg'] = json_encode($order['msg']); } if (isset($order['msg']) && $order['msg'] && strstr($order['msg'], '{')) { $msg = json_decode($order['msg'], true); $cardinfos = array(); foreach ($msg as $k => $v) { $cardinfos[$k]['cardno'] = $v['card']; $cardinfos[$k]['cardpass'] = $v['pwd']; $cardinfos[$k]['expiretime'] = $v['time']; } $data['cardinfos'] = $cardinfos; } } $data = base64_encode(json_encode($data)); $result['data'] = $data; } else { $result['retCode'] = '107'; $result['retMessage'] = '没有对应商品'; } } else { $result['retCode'] = '104'; $result['retMessage'] = '传入的参数有误'; } } else { $result['retCode'] = '104'; $result['retMessage'] = '传入的参数有误'; } return json_encode($result); } # 获取订单 public function apply() { $input = input(); /* $input = '{"data":"eyJvcmRlcklkIjoiMjM4ODEwMjk0ODg2IiwiYnV5TnVtIjoiMSIsInRvdGFsUHJpY2UiOiI2My4wMCIsImJyYW5kSWQiOiI2NTc2ODYiLCJza3VJZCI6IjEwMDQ0MTcxMDI3NDQ4IiwidXNlcklwIjoiMTE0LjI1NS4yNDkuMTU3Iiwic291cmNlVHlwZSI6MCwiZ2FtZUFjY291bnQiOiI4MzgzMTA3NjAifQ==","customerId":"12058096","sign":"df706acda0119f4a30cfa61f3cbf8b96","timestamp":"20220212112733"}'; $input = json_decode($input, true); */ $this->log($input, 'apply'); $result = array(); $sign = $this->_sign($input, array('customerId', 'data', 'timestamp')); if ($sign && isset($input['data']) && isset($input['sign']) && $sign == $input['sign']) { $this->log($input, 'request'); $data = json_decode(base64_decode($input['data']), 2); if (isset($data['buyNum'])) { /* for ($num = 1; $num <= $data['buyNum']; $num++) { $data['price'] = $data['totalPrice']/$data['buyNum']; $data['num'] = 1; $this->push($data); }*/ $data['price'] = $data['totalPrice']; $data['num'] = $data['buyNum']; $result = $this->push($data); } else { $result['retCode'] = '107'; $result['retMessage'] = '没有对应商品'; } } else { $result['retCode'] = '104'; $result['retMessage'] = '传入的参数有误'; } return json_encode($result); } private function push($item) { $param['cash'] = $item['price']; $param['account'] = isset($item['gameAccount']) ? $item['gameAccount'] : $item['orderId']; $param['num'] = $item['num']; //brandId,skuId $proid = '10042'; if ($item['skuId'] == '10044171027448') { # 话费 $proid = '10042'; } elseif ($item['skuId'] == '10044576509192') { $proid = '10312'; } elseif ($item['skuId'] == '10044576679692') { $proid = '10313'; } elseif ($item['skuId'] == '10044576952662') { $proid = '10314'; } elseif ($item['skuId'] == '10044577242594') { $proid = '10315'; } elseif ($item['skuId'] == '10044577441391') { $proid = '10316'; } elseif ($item['skuId'] == '10044577572750') { $proid = '10317'; } elseif ($item['skuId'] == '10044577730376') { $proid = '10318'; } elseif ($item['skuId'] == '10044577847545') { $proid = '10319'; } elseif ($item['skuId'] == '10044577985279') { $proid = '10320'; } elseif ($item['skuId'] == '10044728052857') { $proid = '10320'; } elseif ($item['skuId'] == '10044526123989') { $proid = '10266'; } elseif ($item['skuId'] == '10044525730737') { $proid = '10265'; } elseif ($item['skuId'] == '10046204437430') { $proid = '10264'; } elseif ($item['skuId'] == '10044525510836') { $proid = '10263'; } elseif ($item['skuId'] == '10044172064397') { $proid = '10262'; } elseif ($item['skuId'] == '10044731140480') { $proid = '10321'; } elseif ($item['skuId'] == '10044731328341') { $proid = '10322'; } elseif ($item['skuId'] == '10044731481679') { $proid = '10323'; } elseif ($item['skuId'] == '10044731766812') { $proid = '10324'; } elseif ($item['skuId'] == '10044731878362') { $proid = '10325'; } elseif ($item['skuId'] == '10044740592759') { $proid = '10326'; } elseif ($item['skuId'] == '10044849385551') { $proid = '10004'; } elseif ($item['skuId'] == '10044861704969') { $proid = '10003'; } elseif ($item['skuId'] == '10044861323678') { $proid = '10005'; } $pinfo = \app\channel\service\ProductBaseService::instance()->getOne($proid); $product = $pinfo['key']; $param['cash'] = $pinfo['value']; $param['order'] = $item['orderId']; # 验证是否可以充值 $yes = $this->yes($param['order']); if ($yes) { # 可以充值 去充值 $msg = ChannelService::instance()->use($this->merchant_id, $product, $param, true); if (is_string($msg)) { # 下单失败,回调失败 $result['retCode'] = '107'; $result['retMessage'] = $msg; } else { $result['retCode'] = '100'; $result['retMessage'] = '成功'; } return $result; } } # 验证是否可以充值 public function yes($order) { return true; } # 通知处理 public function notify() { $log['type'] = 'merchant_notify'; $log['request'] = input(); if (!isset($log['request']['merchant_order_id'])) { echo 'error';die; } $merchant_order_id = $log['request']['merchant_order_id']; if (strstr($merchant_order_id, 't')) { echo 'success';die; } if (isset($log['request']['status']) && ($log['request']['status'] == 2 || $log['request']['status'] == 3)) { if ($log['request']['status'] == 2) { $status = "0"; } elseif ($log['request']['status'] == 3) { $status = "2"; } else { $status = "1"; } $order_id = ''; $merchant_order_id = $log['request']['merchant_order_id']; $orderService = OrderService::instance(); $order = $orderService->get($order_id, $merchant_order_id, $this->merchant_id); if (!$order) { $orderHistoryService = OrderHistoryService::instance(); $order = $orderHistoryService->get($order_id, $merchant_order_id, $this->merchant_id); } if (!$order) { echo 'error';die; } if ($order['channel_callback_msg']) { $order['channel_callback_msg'] = json_decode($order['channel_callback_msg'], true); if (isset($order['channel_callback_msg']['message']) && $order['channel_callback_msg']['message']) { $log['request']['msg'] = $order['channel_callback_msg']['message']; } elseif (isset($vo['channel_callback_msg']['msg']) && $order['channel_callback_msg']['msg']) { $log['request']['msg'] = $order['channel_callback_msg']['msg']; } if (isset($log['request']['msg'])) { $log['request']['msg'] = json_encode($log['request']['msg']); } } if ($order['product_key'] && strstr($order['product_key'], '_card')) { $url = 'http://card.jd.com/api/cardApi.action'; if (!isset($log['request']['msg']) && $log['request']['status'] == 2) { $log['request']['msg'][] = array ( 'card' => 'test123', 'pwd' => 'test123', 'time' => date('Y-m-d', time() + 360*86400), ); $log['request']['msg'] = json_encode($log['request']['msg']); } } else { $url = 'http://card.jd.com/api/gameApi.action'; } $request['customerId'] = $this->mid; $data['orderId'] = $merchant_order_id; $data['orderStatus'] = $status; if (isset($log['request']['msg']) && $log['request']['msg'] && strstr($log['request']['msg'], '{')) { # 卡密回调 $msg = json_decode($log['request']['msg'], true); $cardinfos = array(); if (isset($msg['card'])) { if (strstr($msg['card'], ',')) { $card = explode(',', $msg['card']); $pwd = explode(',', $msg['pwd']); $time = explode(',', $msg['time']); } else { $card = explode(',', $msg['card']); $pwd = explode(',', $msg['pwd']); $time = explode(',', $msg['time']); } if (isset($card) && $card) { foreach ($card as $k => $v) { $cardinfos[$k]['cardno'] = $v; if (isset($pwd[$k])) { $cardinfos[$k]['cardpass'] = $pwd[$k]; } elseif (isset($pwd[0])) { $cardinfos[$k]['cardpass'] = $pwd[0]; } else { $cardinfos[$k]['cardpass'] = ''; } if (isset($time[$k])) { $cardinfos[$k]['expiretime'] = $time[$k]; } elseif (isset($time[0])) { $cardinfos[$k]['expiretime'] = $time[0]; } else { $cardinfos[$k]['expiretime'] = ''; } } } } else { foreach ($msg as $k => $v) { $cardinfos[$k]['cardno'] = $v['card']; $cardinfos[$k]['cardpass'] = $v['pwd']; $cardinfos[$k]['expiretime'] = $v['time']; } } $data['cardinfos'] = $cardinfos; } $request['data'] = base64_encode(json_encode($data)); $request['timestamp'] = date('YmdHis'); $request['sign'] = $this->_sign($request, array('customerId', 'data', 'timestamp')); $response = $this->curl('get', $url, $request); if ($response) { $response = json_decode($response, true); if (isset($response['retCode']) && $response['retCode'] == 100) { echo 'success';die; } } } echo 'error';die; } # 记录日志 protected function log($data, $type = 'request') { Log::write('jingdong', $type, $data); } private function _sign($request, $param) { $signature_string = ''; foreach ($param as $k => $v) { if (isset($request[$v]) && $request[$v]) { $signature_string .= $v .'=' . $request[$v] . '&'; } } $signature_string .= $this->token; return md5($signature_string); } }