req_params($card_no, $card_type, $amount, $params['order_sn']); if(empty($params['product_id'])) { return [false, '商品编号获取失败', false]; } $sign = $this->sign($params); $params['sign'] = $sign; $params = json_encode($params); $params = $this->encrypt($params); $resp = http_post_data(config::ORDER_URL, $params , config::ExtHeaders, $net_errno); if (empty($resp)) { return [false, '系统错误', true]; } else { Log::record($resp, Log::DEBUG); $resp = json_decode($resp, true); if (empty($resp)) { return [false, '系统错误', true]; } else { $status = intval($resp['status']); if($status === 1) { $data = $this->decrypt($resp['data']['json_data']); Log::record("zhenqi add status 0 data:{$data}", Log::DEBUG); $data = json_decode($data,true); return [true, $data['out_trade_no'], false]; } else { $sub_code = $resp['sub_code']; if(($sub_code >= 100 && $sub_code <= 200) || $sub_code == 102) { $data = $this->decrypt($resp['data']['json_data']); Log::record("zhenqi add status 1 sub_code:{$sub_code}, data:{$data}", Log::DEBUG); $data = json_decode($data,true); return [true, $data['out_trade_no'], false]; }else { return [false, $resp['info'], false]; } } } } } public function query($refill_info) { $params['out_trade_no'] = $refill_info['order_sn']; $params['time_stamp'] = time(); $params['sign'] = $this->sign($params); $params = json_encode($params); $params = $this->encrypt($params); $resp = http_post_data(config::QUERY_URL, $params , config::ExtHeaders); if (empty($resp)) { return [false, '系统错误']; } else { Log::record($resp, Log::DEBUG); $resp = json_decode($resp, true); if (empty($resp)) { return [false, '系统错误']; } elseif($resp['status'] == 1) { $data = $this->decrypt($resp['data']['json_data']); Log::record("zhenqi order query status 1 data:{$data}", Log::DEBUG); $data = json_decode($data,true); $status = intval($data['status']); if ($status === 1) { $updata['official_sn'] = $data['sp_order_no']; Model('refill_order')->edit($refill_info['order_id'], $updata); $order_state = ORDER_STATE_SUCCESS; } elseif ($status === 2) { $order_state = ORDER_STATE_CANCEL; } elseif ($status === 3) { $order_state = ORDER_STATE_SEND; } else { return [false, $status]; } return [true, $order_state]; } elseif ($resp['sub_code'] == 1210) { return [true, ORDER_STATE_NOEXIST]; } else { return [false, $resp['info']]; } } } private function sign($params) { ksort($params); $body = ""; foreach ($params as $k => $v) { $body .= "{$k}={$v}&"; } $body .= "app_secret=".config::APP_SECRET; return strtoupper(md5($body)); } //加密 private function encrypt($encrypt) { $key = substr(openssl_digest(openssl_digest(config::TOKEN, 'sha1', true), 'sha1', true), 0, 16); $data = openssl_encrypt($encrypt, 'AES-128-ECB', $key, OPENSSL_RAW_DATA); return base64_encode($data); } //解密 private function decrypt($decrypt) { $key = substr(openssl_digest(openssl_digest(config::TOKEN, 'sha1', true), 'sha1', true), 0, 16); return openssl_decrypt($decrypt, 'AES-128-ECB', $key); } }