/php/janrain-engage-php-sdk/library/engage.api.lib.php

https://github.com/kevinelong/Janrain-Sample-Code · PHP · 202 lines · 176 code · 8 blank · 18 comment · 31 complexity · 2a8de49bfda01e9e3845ea3634e0d94b MD5 · raw file

  1. <?php
  2. /**
  3. * Copyright 2011
  4. * Janrain Inc.
  5. * All rights reserved.
  6. */
  7. /* run engage_lib_init */
  8. engage_define('ENGAGE_LIB_DEVMODE', false);
  9. engage_lib_init(ENGAGE_LIB_DEVMODE);
  10. /* begin engage_lib_init */
  11. function engage_lib_init($dev_mode=false) {
  12. if (defined('ENGAGE_LIB_INIT')) {
  13. if (ENGAGE_LIB_INIT === true) {
  14. return;
  15. }
  16. }
  17. engage_define('ENGAGE_DEV_MODE', $dev_mode);
  18. engage_define('ENGAGE_API_KEY_LEN', 40);
  19. engage_define('ENGAGE_TOKEN_LEN', 40);
  20. engage_define('ENGAGE_STAT_OK', 'ok');
  21. engage_define('ENGAGE_POST_SSL', true);
  22. engage_define('ENGAGE_PARSE_ARRAY', true);
  23. engage_define('ENGAGE_AUTH_EXTEND', false);
  24. engage_define('ENGAGE_FORMAT_JSON', 'json');
  25. engage_define('ENGAGE_FORMAT_XML', 'xml');
  26. engage_define('ENGAGE_FORMATS', ENGAGE_FORMAT_JSON.','.ENGAGE_FORMAT_XML);
  27. engage_define('ENGAGE_KEY_APIKEY', 'apiKey');
  28. engage_define('ENGAGE_KEY_TOKEN', 'token');
  29. engage_define('ENGAGE_KEY_FORMAT', 'format');
  30. engage_define('ENGAGE_KEY_EXTEND', 'extended');
  31. engage_define('ENGAGE_KEY_IDENTIFIER', 'identifier');
  32. engage_define('ENGAGE_KEY_STAT', 'stat');
  33. engage_define('ENGAGE_API_BASE_URL', 'https://rpxnow.com/api/v2/');
  34. engage_define('ENGAGE_AUTHINFO_EP', 'auth_info');
  35. engage_define('ENGAGE_ELABEL_DEBUG', 'debug');
  36. engage_define('ENGAGE_ELABEL_MESSAGE', 'message');
  37. engage_define('ENGAGE_ELABEL_WARN', 'warning');
  38. engage_define('ENGAGE_ELABEL_ERROR', 'error');
  39. engage_define('ENGAGE_ERROR_POST', 'API POST failure');
  40. engage_define('ENGAGE_ERROR_APIKEY', 'invalid api key');
  41. engage_define('ENGAGE_ERROR_TOKEN', 'invalid token');
  42. engage_define('ENGAGE_ERROR_FORMAT', 'invalid format');
  43. engage_define('ENGAGE_ERROR_RANGE', 'value out of range ');
  44. engage_define('ENGAGE_ERROR_COUNT', 'maximum count exceeded');
  45. engage_define('ENGAGE_ERROR_ARRAY', 'array expected');
  46. engage_define('ENGAGE_ERROR_STRING', 'string expected');
  47. engage_define('ENGAGE_ERROR_STAT', 'response stat not ok ');
  48. engage_define('ENGAGE_ERROR_INT', 'integer expected');
  49. engage_define('ENGAGE_ERROR_XML', 'XML error code:');
  50. engage_define('ENGAGE_ERROR_IDENT', 'missing identifier');
  51. engage_define('ENGAGE_ERROR_JSON', 'json decode error');
  52. engage_define('ENGAGE_JERROR_DEPTH', ', maximum stack depth exceeded');
  53. engage_define('ENGAGE_JERROR_CHAR', ', unexpected character found');
  54. engage_define('ENGAGE_JERROR_SYN', ', malformed JSON');
  55. if (ENGAGE_DEV_MODE === true) {
  56. if (!version_compare(PHP_VERSION, '5.0.0', '>=')){
  57. engage_error('PHP version less than required version', __FUNCTION__);
  58. }
  59. if (!function_exists('json_decode')) {
  60. engage_error('JSON library not found', __FUNCTION__);
  61. }
  62. if (!function_exists('curl_init')) {
  63. engage_error('cURL libary not found', __FUNCTION__);
  64. }
  65. if (!function_exists('simplexml_load_string')) {
  66. engage_error('XML library not found', __FUNCTION__);
  67. }
  68. }
  69. define('ENGAGE_LIB_INIT', true);
  70. }
  71. /* end engage_lib_init */
  72. /* begin engage_define */
  73. function engage_define($label, $value) {
  74. if (!defined($label)) {
  75. define($label, $value);
  76. }
  77. }
  78. /* end engage_define */
  79. /* begin engage_parse_result */
  80. function engage_parse_result($result, $format=ENGAGE_FORMAT_JSON, $array_out=ENGAGE_PARSE_ARRAY) {
  81. if ($array_out === true) {
  82. $array = true;
  83. } else {
  84. $array = false;
  85. }
  86. $ready = true;
  87. if ($result === false) {
  88. $ready = false;
  89. }
  90. if (!in_array($format, explode(',',ENGAGE_FORMATS))) {
  91. $ready = false;
  92. }
  93. if ($ready === true) {
  94. if ($format == ENGAGE_FORMAT_JSON) {
  95. $decode_result = json_decode($result, $array);
  96. if ($decode_result === NULL) {
  97. switch(json_last_error()) {
  98. case JSON_ERROR_DEPTH:
  99. $json_error = ENGAGE_JERROR_DEPTH;
  100. break;
  101. case JSON_ERROR_UTF8:
  102. case JSON_ERROR_CTRL_CHAR:
  103. $json_error = ENGAGE_JERROR_CHAR;
  104. break;
  105. case JSON_ERROR_SYNTAX:
  106. case JSON_ERROR_STATE_MISMATCH:
  107. $json_error = ENGAGE_JERROR_SYN;
  108. break;
  109. }
  110. engage_error(ENGAGE_ERROR_JSON.$json_error, __FUNCTION__);
  111. return false;
  112. }
  113. } elseif ($format == ENGAGE_FORMAT_XML) {
  114. $xmlconfig = libxml_use_internal_errors(true);
  115. $decode_result = simplexml_load_string($result);
  116. if ($decode_result === false) {
  117. $xml_errors = libxml_get_errors();
  118. foreach ($xml_errors as $xml_error) {
  119. engage_error(ENGAGE_ERROR_XML.$xml_error->code, __FUNCTION__);
  120. }
  121. libxml_clear_errors();
  122. return false;
  123. }
  124. if ($array === true) {
  125. $decode_result = json_encode($decode_result);
  126. $decode_result = engage_parse_result($decode_result, ENGAGE_FORMAT_JSON, true);
  127. }
  128. }
  129. return $decode_result;
  130. }
  131. return false;
  132. }
  133. /* end engage_parse_result */
  134. /* begin engage_post */
  135. function engage_post($url, $parameters, $ssl=ENGAGE_POST_SSL) {
  136. $curl = curl_init();
  137. if ($curl == false) {
  138. engage_error(ENGAGE_ERROR_CURL, __FUNCTION__);
  139. return false;
  140. }
  141. engage_error('parameters: ' . print_r($parameters, true), __FUNCTION__, ENGAGE_ELABEL_DEBUG);
  142. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  143. curl_setopt($curl, CURLOPT_URL, $url);
  144. curl_setopt($curl, CURLOPT_POST, true);
  145. curl_setopt($curl, CURLOPT_POSTFIELDS, $parameters);
  146. curl_setopt($curl, CURLOPT_HEADER, false);
  147. curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
  148. curl_setopt($curl, CURLOPT_FAILONERROR, true);
  149. $result = curl_exec($curl);
  150. if ($result == false) {
  151. engage_error('Curl error: ' . curl_error($curl), __FUNCTION__);
  152. engage_error('HTTP code: ' . curl_errno($curl), __FUNCTION__);
  153. engage_error('parameters: ' . print_r($parameters, true), __FUNCTION__);
  154. curl_close($curl);
  155. } else {
  156. curl_close($curl);
  157. return $result;
  158. }
  159. return false;
  160. }
  161. /* end engage_post */
  162. /* begin engage_error */
  163. function engage_error($error, $function='unknown', $label=ENGAGE_ELABEL_ERROR){
  164. global $engage_errors;
  165. if (!is_array($engage_errors)){
  166. $engage_errors = array();
  167. }
  168. $error_key = $function.':'.$error;
  169. $engage_errors[$error_key] = $label;
  170. }
  171. /* end engage_error */
  172. /* begin engage_get_errors */
  173. function engage_get_errors($label=NULL) {
  174. global $engage_errors;
  175. if (!is_array($engage_errors)){
  176. $engage_errors = array();
  177. }
  178. $return_errors = array();
  179. if ($label === NULL) {
  180. $return_errors = $engage_errors;
  181. } else {
  182. foreach($engage_errors as $key=>$val) {
  183. if ($label == $val) {
  184. $return_errors[$key] = $val;
  185. }
  186. }
  187. }
  188. if (!empty($return_errors)){
  189. return $return_errors;
  190. }
  191. return false;
  192. }
  193. /* end engage_get_errors */
  194. ?>