'number', 'cash' => 'money', ); $this->api = 'cards/api/sellCard'; return $this->submit($param, $check); } # 数汇一卡通 public function shykt_cardbuy($param) { $check = array ( 'num' => 'number', 'cash' => 'money', ); $this->api = 'cards/api/sellCard'; return $this->submit($param, $check); } public function lockCard($order) { $response =$this->lock_send($order,2); $log['type'] = 'LockCard_response'; $log['data'] = $response; $log['config'] = $this->data; $this->log($log); $array = $this->json_decode($response); if (!$array) { return 'error'; } elseif (isset($array['code']) && $array['code'] == '1') { # 正确 return 'ok'; } else { # 错误 return 'error'; } } #解锁接口 public function unlockCard($order) { $response =$this->lock_send($order,2); $log['type'] = 'UnLockCard_response'; $log['data'] = $response; $log['config'] = $this->data; $this->log($log); $array = $this->json_decode($response); if (!$array) { return 'error'; } elseif (isset($array['code']) && $array['code'] == '1') { # 正确 return 'ok'; } else { # 错误 return 'error'; } } #锁卡发送 public function lock_send($order,$type = 1){ $request=[]; $request['customerId'] = $this->mid; // $request['money'] = $order['cash']; $response = $this->json_decode($order['response']); if(empty($response['kami'])){ return '未找到卡密'; } $request['cardNo'] = $response['kami']['cardno']; $request['lockType'] = $type; $request['timestamp'] =time(); $request['sign'] = $this->_sign($request, array('cardNo', 'customerId', 'lockType', 'timestamp')); $url = $this->host . 'cards/api/orderLocked'; $data = $this->curl('post', $url, $request,true); return $data; } # 通知处理 主要返回状态 2是成功 3是失败 public function notify($data) { $result = array(); $result['cash'] = 1; $result['status'] = $data['status'] ; if (isset($data['kami']) && $data['kami']['cardno']) { # 流水号 $data['s_nubmer'] = $result['s_nubmer'] = $data['kami']['cardno']; } $result['yes'] = 'ok'; $result['data'] = $data; return $result; } # 数据响应格式处理 public function response($data) { $log['type'] = 'response'; $log['data'] = $data; $log['config'] = $this->data; $this->log($log); $array = $this->json_decode($data); // var_dump($array);die; if (!$array) { $msg = 'error'; } elseif (isset($array['code']) && $array['code'] == '1' ) { # 正确 $msg = 'yescard'; if (isset($array['data'])) { $cardlist = $array['data']['cards']; // $merchant = MerchantService::instance()->get($this->data['merchant']); // $cardlist[] $cardData = $this->aes_decrypt($cardlist); $cardArray = $this->json_decode($cardData); $logs['type'] = 'test'; $logs['data'] = $cardArray; $this->log($logs); // var_dump($cardArray[0]);die; $cardno = $cardArray[0]['cardno']; $cardpwd = $cardArray[0]['cardkey']; $array['kami'] = array ( 'cardno' => $cardno, 'cardpwd' => $cardpwd, 'expired' => $cardArray[0]['expirtime'] ?? '', 'value' => $array['data']['count_money'], ); // var_dump($array);die; } } else { # 错误 $msg = $array['msg'] ?? 'error'; } return array ( 'msg' => $msg, 'data' => $array, 'array' => $array, ); } //AES-128-ECB解密 data 字符串 public function query($order) { $request['customerId'] = $this->mid; $request['orderId'] = $order['order_id']; $request['timestamp'] = time(); $request['sign'] = $this->_sign($request, array('customerId', 'orderId','timestamp')); $url = $this->host . 'cards/api/orderSearch'; $response = $this->curl('post', $url, $request,true); $log['type'] = 'query_response'; $log['data'] = $response; $log['config'] = $this->data; $this->log($log); $array = $this->json_decode($response); // if (isset($array['data']['cards'])) { $result = array(); // $result['status'] = 4; if (isset($array['code']) && $array['code'] == '1') { if (isset($array['data']['cards'])) { $cardList = $array['data']['cards']; $cardData = $this->aes_decrypt($cardList); $cardArray = $this->json_decode($cardData); $cardno = $cardArray[0]['cardno']; $cardpwd = $cardArray[0]['cardkey']; $kamidata = array ( 'cardno' => $cardno, 'cardpwd' => $cardpwd, 'expired' => $cardArray[0]['expirtime'] ?? '', 'value' => $array['data']['count_money'], ); // var_dump($kamidata);die; $this->upOrderResponse($kamidata, $order['merchant_order_id'], $order['response']); $result['status'] = 7; $result['kami'] = $kamidata; } else { $result['status'] = 4; } } else { $result['status'] = 3; } // } return $result; } private function submit($param, $check) { $param = $this->param($param, $check); if (is_string($param) || (is_array($param) && $param['status'] == 1)) { return $param; } $request = $param['detail']; $request['customerId'] = $this->mid; $request['productCode'] = $this->getGid($param['cash']); $request['timestamp'] = time(); $request['orderId'] = $param['order']; // $request['money'] = '0'; $request['sign'] = $this->_sign($request, array('customerId', 'money', 'number', 'orderId', 'productCode', 'timestamp')); $url = $this->host . $this->api; $response = $this->curl('post', $url, $request, true); // $response = '{"code":1,"msg":"成功","data":{"billno":"B17252834199510831","orderId":"4029177133840735740","count_money":"20","rate":"0.9800","number":1,"count_amount":"19.6000","custom":null,"cards":"d50c80397d4f2a3b90c99d4436ad38d3c3f85c916bc3c3610f71816a9a9d683d4b9f9977988b6d931d05dcc7d9fb93482a3635e1420651b6645e9bd18ea417d5f28031e14223396162488b952981769ba6e264a94219a1a90d4893732845ab14"}}'; $response = $this->response($response); // var_dump($response);die; // var_dump($response);die; // var_dump($response); //$response['data'] = ''; //$response['msg'] = 'ok'; $channel_order_id = ''; if (isset($response['array']['data']['billno'])) { $channel_order_id = $response['array']['data']['billno']; } if(!isset($param['account']) || !$param['account'] ){ $param['account'] = $request['productCode']; } $this->create($param['order'], $channel_order_id, $param['merchant_order'], $param['cash'], $url, $request, $response, 1, $param['account']); return $response['array']['card'] ?? $response['msg']; } private function _sign($request, $param) { // ksort($request); $signature_string = ''; foreach ($param as $k => $v) { // if (isset($request[$v]) && $request[$v]) { $signature_string .= $v . '=' . $request[$v] . '&'; } $signature_string = substr($signature_string, 0, -1); $signature_string .= '&key='.$this->token; // var_dump($signature_string);die; // $signature_string = iconv("UTF-8", "gbk", $signature_string); return md5($signature_string); } //AES-128-ECB解密 data 字符串 protected function aes_decrypt($data) { $encrypted = hex2bin($data); $json = $this->channel['describe']; $array = $this->json_decode($json); if(isset($array['aeskey'])){ $this->aeskey = $array['aeskey']; } // var_dump($encrypted);die; // $key = ''; $data = openssl_decrypt($encrypted, 'AES-128-ECB', $this->aeskey, OPENSSL_RAW_DATA); return $data; } public function upOrderResponse($kami,$merchant_order_id,$orderResponse) { $orderService = OrderService::instance(); if(isset($orderResponse)){ $response = json_decode($orderResponse,true); }else{ $response = []; } $response['kami'] = $kami; $data = ['response' => json_encode($response)]; $orderService->db()->where(array('merchant_order_id' => $merchant_order_id))->update($data); } }