RequestHandler.class.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <?php
  2. /**
  3. * 请求类
  4. * ============================================================================
  5. * api说明:
  6. * init(),初始化函数,默认给一些参数赋值,如cmdno,date等。
  7. * getGateURL()/setGateURL(),获取/设置入口地址,不包含参数值
  8. * getKey()/setKey(),获取/设置密钥
  9. * getParameter()/setParameter(),获取/设置参数值
  10. * getAllParameters(),获取所有参数
  11. * getRequestURL(),获取带参数的请求URL
  12. * getDebugInfo(),获取debug信息
  13. * ============================================================================
  14. */
  15. class RequestHandler {
  16. /**
  17. * 网关url地址
  18. */
  19. var $gateUrl;
  20. /**
  21. * 密钥
  22. */
  23. var $key;
  24. /**
  25. * 请求的参数
  26. */
  27. var $parameters;
  28. /**
  29. * debug信息
  30. */
  31. var $debugInfo;
  32. function __construct() {
  33. $this->RequestHandler();
  34. }
  35. function RequestHandler() {
  36. $this->gateUrl = "'https://pay.swiftpass.cn/pay/gateway";
  37. $this->key = "";
  38. $this->parameters = array();
  39. $this->debugInfo = "";
  40. }
  41. /**
  42. * 初始化函数。
  43. */
  44. function init() {
  45. // nothing to do
  46. }
  47. /**
  48. * 获取入口地址,不包含参数值
  49. */
  50. function getGateURL() {
  51. return $this->gateUrl;
  52. }
  53. /**
  54. * 设置入口地址,不包含参数值
  55. */
  56. function setGateURL($gateUrl) {
  57. $this->gateUrl = $gateUrl;
  58. }
  59. /**
  60. * 获取密钥
  61. */
  62. function getKey() {
  63. return $this->key;
  64. }
  65. /**
  66. * 设置密钥
  67. */
  68. function setKey($key) {
  69. $this->key = $key;
  70. }
  71. /**
  72. * 获取参数值
  73. */
  74. function getParameter($parameter) {
  75. return isset($this->parameters[$parameter]) ? $this->parameters[$parameter] : '';
  76. }
  77. /**
  78. * 设置参数值
  79. */
  80. function setParameter($parameter, $parameterValue) {
  81. $this->parameters[$parameter] = $parameterValue;
  82. }
  83. /**
  84. * 一次性设置参数
  85. */
  86. function setReqParams($post, $filterField = null) {
  87. if ($filterField !== null) {
  88. forEach ($filterField as $k => $v) {
  89. unset($post[$v]);
  90. }
  91. }
  92. // 判断是否存在空值,空值不提交
  93. forEach ($post as $k => $v) {
  94. if (empty($v)) {
  95. unset($post[$k]);
  96. }
  97. }
  98. $this->parameters = $post;
  99. }
  100. /**
  101. * 获取所有请求的参数
  102. *
  103. * @return array
  104. */
  105. function getAllParameters() {
  106. return $this->parameters;
  107. }
  108. /**
  109. * 获取带参数的请求URL
  110. */
  111. function getRequestURL() {
  112. $this->createSign();
  113. $reqPar = "";
  114. ksort($this->parameters);
  115. foreach ($this->parameters as $k => $v) {
  116. $reqPar .= $k."=".urlencode($v)."&";
  117. }
  118. // 去掉最后一个&
  119. $reqPar = substr($reqPar, 0, strlen($reqPar) - 1);
  120. $requestURL = $this->getGateURL()."?".$reqPar;
  121. return $requestURL;
  122. }
  123. /**
  124. * 获取debug信息
  125. */
  126. function getDebugInfo() {
  127. return $this->debugInfo;
  128. }
  129. /**
  130. * 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。
  131. */
  132. function createSign() {
  133. $signPars = "";
  134. ksort($this->parameters);
  135. foreach ($this->parameters as $k => $v) {
  136. if ("" != $v && "sign" != $k) {
  137. $signPars .= $k."=".$v."&";
  138. }
  139. }
  140. $signPars .= "key=".$this->getKey();
  141. $sign = strtoupper(md5($signPars));
  142. $this->setParameter("sign", $sign);
  143. // debug信息
  144. $this->_setDebugInfo($signPars." => sign:".$sign);
  145. }
  146. /**
  147. * 设置debug信息
  148. */
  149. function _setDebugInfo($debugInfo) {
  150. $this->debugInfo = $debugInfo;
  151. }
  152. }
  153. ?>