'billMobile', 'cash' => 'productPrice', 'serviceProviderType' => 'serviceProviderType', ); $info = $this->getMobileInfo($param['mobile']); if ($info) { $param['province'] = ProvinceService::instance()->getInfo($info['province']); $param['city'] = ProvinceService::instance()->getInfo($info['city']); } $param['serviceProviderType'] = 'CMCC'; if (isset($param['isp']) && $param['isp']) { if ($param['isp'] == 1) { $param['serviceProviderType'] = 'CMCC'; } elseif ($param['isp'] == 2) { $param['serviceProviderType'] = 'UNICOM'; } elseif ($param['isp'] == 3) { $param['serviceProviderType'] = 'TELECOM'; } } $this->api = 'cooperate/addTelBill'; return $this->submit($param, $check); } # 通知处理 主要返回状态 2是成功 3是失败 public function notify($data) { $request = $data; $result = array(); $result['cash'] = 1; if ($data['billTradeStatus'] == 'SUCCESS') { $result['status'] = 2; } else { $result['status'] = 3; } if (isset($data['officialOrderList']) && $data['officialOrderList']) { $data['s_nubmer'] = $result['s_nubmer'] = $data['officialOrderList']; } $result['yes'] = '{"errorCode":200}'; $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); if (!$array) { $msg = 'error'; } elseif (isset($array['errorCode']) && $array['errorCode'] == '000000') { # 正确 $msg = 'ok'; $encryptKey = $this->private_decrypt($array['encryptKey']); $data = $this->decrypt($array['data'], $encryptKey); $data = filter_var($data, FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW); $data = json_decode($data, true); $array['data'] = $data; } else { # 错误 $msg = isset($array['errorMsg']) ? $array['errorMsg'] : 'error'; } return array ( 'msg' => $msg, 'data' => $data, 'array' => $array, ); } # 查询接口 public function query($param) { } # 提交数据 private function submit($param, $check) { if (isset($param['province'])) { $provice = $param['province']; } else { return 'province error'; } if (isset($param['city'])) { $city = $param['city']; } else { return 'city error'; } $param = $this->param($param, $check); if (is_string($param) || (is_array($param) && $param['status'] == 1)) { return $param; } $request = $param['detail']; $request['billOrderNo'] = $param['order']; $time = time() + 86400; $request['billExpireTime'] = date('Y-m-d H:i:s', $time); $request['notifyUrl'] = $this->getNotify($param['order'], 1); $request['provinceCode'] = $provice; $request['cityCode'] = $city; //$request['productNo'] = $this->getGid($param['cash']); $request['sign'] = $this->_sign($request); $send['merchantNo'] = $this->mid; $send['data'] = $this->encrypt(json_encode($request)); $send['encryptKey'] = $this->public_encrypt(); $url = $this->host . $this->api; $response = $this->curl('get', $url, $send); //$response = '{"data":"P9+wc7gXJNGKqCbDk7EiNloeF2x/bAOLMnjlrKi2nXATzAp0OmFWKqejv30wTrfJTi2HxKzU7daF2diBQZd3fMcbiPBf2MtBmYML+NFsQ6qT4uW9AsjmYJFgwk96uasYBMQuXlPpLs6PoKFBIJvnVKNn/7NUmIRJZDMLU8fxUtG0iDrLrrSW3rXXDtzv5fXKFM3Fm9Hgt06BFHUWAQtMSnN/xLzE9/Wrm6YR8Qfolz11baJmUPcqyDgye7CPO5Ih0Jq8nQkwd3T53cbN0UR5AexeAQgtDmJfx/eqOFBxMh327cgN2IwihwF+jGbrFNrexHg6mx4gJNTBdOqlq95LwXQFXGAXlhQ8TqG/5RjM+ycyaJGCPkv9x8pEOMHvmcUi1v/ZXn+Qo3RuLsq/H88XiqwWLujOULsnmlnFrquGW8IQIIMmwV9FzIgv4FgS4HJXLyBEVW/Q2fwvmAt9DKkK4Rv5ubo9cLObRYeije+CVGyGkheF6JuqBzlrk073VO1XBZMLNHBYnuS4so0LhnyeVDZVRozGfhBH3Xb1wVWi8Yk=","encryptKey":"fdGn83VQ13Ka7opJvnnTI+HSZTH1KWPZG+1BxGQmkevAPclUbhmoArzXesnrauZUAvn1pRdJmg1fTMV0auS72wI9jW35fRtslpDXlpHFmkt89q7NPmeQPfDaT7BC9dX4M5VyBHWqPNd9f1EElmtBy6a6ugGNV3B9SPBmsrbY0Z0=","errorCode":"000000","errorMsg":"成功","merchantNo":"7000000421"}'; $response = $this->response($response); //$response['data'] = ''; //$response['msg'] = 'ok'; $channel_order_id = ''; if (isset($response['array']['data']['platformBillOrderNo']) && $response['array']['data']['platformBillOrderNo']) { $channel_order_id = $response['array']['data']['platformBillOrderNo']; } $this->create($param['order'], $channel_order_id, $param['merchant_order'], $param['cash'], $url, $request, $response, 1, $param['account']); return $response['msg']; } private function _sign($request) { ksort($request); $signature_string = ''; foreach ($request as $k => $v) { if (!$this->checkEmpty($v)) { $signature_string .= $v; } } $signature = ''; $priKey = "-----BEGIN RSA PRIVATE KEY-----\n" . chunk_split($this->privateKey, 64, "\n") . "-----END RSA PRIVATE KEY-----\n"; openssl_sign($signature_string, $signature, $priKey, OPENSSL_ALGO_SHA256); $signature = base64_encode($signature); return $signature; } private function padZero($data, $blocksize = 16){ $pad = $blocksize - (strlen($data) % $blocksize); return $data . str_repeat("\0", $pad); } private function encrypt($data) { return openssl_encrypt($this->padZero($data), 'AES-128-CBC', $this->encryptKey, 2, '0000000000000000'); } public function decrypt($data, $key) { return openssl_decrypt($data, 'AES-128-CBC', $key, 2, '0000000000000000'); } function public_encrypt() { $publicKey = "-----BEGIN PUBLIC KEY-----\n" . chunk_split($this->nowpayPublickey, 64, "\n") . "-----END PUBLIC KEY-----\n"; $output = ''; openssl_public_encrypt($this->encryptKey, $output, $publicKey); return base64_encode($output); } function private_decrypt($str) { $priKey = "-----BEGIN RSA PRIVATE KEY-----\n" . chunk_split($this->privateKey, 64, "\n") . "-----END RSA PRIVATE KEY-----\n"; $output = ''; openssl_private_decrypt(base64_decode($str), $output, $priKey); return $output; } protected function checkEmpty($value) { if (!isset($value)) return true; if ($value === null) return true; if (empty($value)) return true; if (empty(trim($value))) return true; return false; } }