123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- <?php
- include_once (app_path('/libs/Umeng/').'com/alibaba/openapi/client/serialize/SerializerProvider.class.php');
- include_once (app_path('/libs/Umeng/').'com/alibaba/openapi/client/util/SignatureUtil.class.php');
- class SyncAPIClient {
- var $clientPolicy;
-
- /**
- *
- * @param ClientPolicy $clientPolicy
- */
- function SyncAPIClient(ClientPolicy $clientPolicy) {
- $this->clientPolicy = $clientPolicy;
- }
- public function send(APIRequest $request, $resultDefiniation, RequestPolicy $requestPolicy) {
- $urlRequest = $this->generateRequestPath ( $request, $requestPolicy, $this->clientPolicy );
- if ($requestPolicy->useHttps) {
- if($this->clientPolicy->httpsPort==443){
- $urlRequest = "https://" . $this->clientPolicy->serverHost . $urlRequest;
- }else{
- $urlRequest = "https://" . $this->clientPolicy->serverHost .":".$this->clientPolicy->httpsPort . $urlRequest;
- }
- } else {
- if($this->clientPolicy->httpPort==80){
- $urlRequest = "http://" . $this->clientPolicy->serverHost . $urlRequest;
- }else{
- $urlRequest = "http://" . $this->clientPolicy->serverHost .":".$this->clientPolicy->httpPort . $urlRequest;
- }
- }
-
- $serializerTools = SerializerProvider::getSerializer ( $requestPolicy->requestProtocol );
- $requestData = $serializerTools->serialize ( $request->requestEntity );
- $requestData = array_merge ( $requestData, $request->addtionalParams );
- if ($requestPolicy->needAuthorization) {
- $requestData ["access_token"] = $request->accessToken;
- }
- if ($requestPolicy->requestSendTimestamp) {
- // $requestData ["_aop_timestamp"] = time();
- }
- $requestData ["_aop_datePattern"] = DateUtil::getDateFormatInServer ();
- if ($requestPolicy->useSignture) {
- if ($this->clientPolicy->appKey != null && $this->clientPolicy->secKey != null) {
- $pathToSign = $this->generateAPIPath ( $request, $requestPolicy, $this->clientPolicy );
- $signaturedStr = SignatureUtil::signature ( $pathToSign, $requestData, $requestPolicy, $this->clientPolicy );
- $requestData ["_aop_signature"] = $signaturedStr;
- }
- }
- $ch = curl_init ();
- $paramToSign = "";
- foreach ( $requestData as $k => $v ) {
- $paramToSign = $paramToSign . $k . "=" . urlencode($v) . "&";
- }
- $paramLength = strlen ( $paramToSign );
- if ($paramLength > 0) {
- $paramToSign = substr ( $paramToSign, 0, $paramToSign - 1 );
- }
- if ($requestPolicy->httpMethod === "GET") {
- $urlRequest = $urlRequest . "?" . $paramToSign;
- curl_setopt ( $ch, CURLOPT_URL, $urlRequest );
- curl_setopt ( $ch, CURLOPT_HEADER, false );
- curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
- curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 120 );
- curl_setopt ( $ch, CURLOPT_POST, 0 );
- curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, false );
- curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
-
- $result = $newclient->get ( $urlRequest, $requestData );
- } else {
- curl_setopt ( $ch, CURLOPT_URL, $urlRequest );
- curl_setopt ( $ch, CURLOPT_HEADER, false );
- curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
- curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, 120 );
- curl_setopt ( $ch, CURLOPT_POST, 1 );
- curl_setopt ( $ch, CURLOPT_POSTFIELDS, $paramToSign );
- curl_setopt ( $ch, CURLOPT_SSL_VERIFYHOST, false );
- curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
- $data = curl_exec ( $ch );
- }
- $data = curl_exec ( $ch );
- if ($data) {
- $content = $data;
- $deSerializerTools = SerializerProvider::getDeSerializer ( $requestPolicy->responseProtocol );
- $status = curl_getinfo ( $ch, CURLINFO_HTTP_CODE );
- curl_close ( $ch );
- if ($status >= 400 && $status <= 599) {
- $resultException = $deSerializerTools->buildException ( $content, $resultDefiniation );
- throw $resultException;
- } else {
- $resultDefiniation = $deSerializerTools->deSerialize ( $content, $resultDefiniation );
- return $resultDefiniation;
- }
- } else {
- $status = curl_getinfo ( $ch, CURLINFO_HTTP_CODE );
- curl_close ( $ch );
- return $status;
- }
- }
- private function generateRequestPath(APIRequest $request, RequestPolicy $requestPolicy, ClientPolicy $clientPolicy) {
- $urlResult = "";
- if ($requestPolicy->accessPrivateApi) {
- $urlResult = "/api";
- } else {
- $urlResult = "/openapi";
- }
-
- $defs = array (
- $urlResult,
- "/",
- $requestPolicy->requestProtocol,
- "/",
- $request->apiId->version,
- "/",
- $request->apiId->namespace,
- "/",
- $request->apiId->name,
- "/",
- $clientPolicy->appKey
- );
-
- $urlResult = implode ( $defs );
-
- return $urlResult;
- }
- private function generateAPIPath(APIRequest $request, RequestPolicy $requestPolicy, ClientPolicy $clientPolicy) {
- $urlResult = "";
- $defs = array (
- $urlResult,
- $requestPolicy->requestProtocol,
- "/",
- $request->apiId->version,
- "/",
- $request->apiId->namespace,
- "/",
- $request->apiId->name,
- "/",
- $clientPolicy->appKey
- );
-
- $urlResult = implode ( $defs );
-
- return $urlResult;
- }
- }
- ?>
|