<?php /** * 请求类 * ============================================================================ * api说明: * init(),初始化函数,默认给一些参数赋值,如cmdno,date等。 * getGateURL()/setGateURL(),获取/设置入口地址,不包含参数值 * getKey()/setKey(),获取/设置密钥 * getParameter()/setParameter(),获取/设置参数值 * getAllParameters(),获取所有参数 * getRequestURL(),获取带参数的请求URL * getDebugInfo(),获取debug信息 * ============================================================================ */ class RequestHandler { /** * 网关url地址 */ var $gateUrl; /** * 密钥 */ var $key; /** * 请求的参数 */ var $parameters; /** * debug信息 */ var $debugInfo; function __construct() { $this->RequestHandler(); } function RequestHandler() { $this->gateUrl = "'https://pay.swiftpass.cn/pay/gateway"; $this->key = ""; $this->parameters = array(); $this->debugInfo = ""; } /** * 初始化函数。 */ function init() { // nothing to do } /** * 获取入口地址,不包含参数值 */ function getGateURL() { return $this->gateUrl; } /** * 设置入口地址,不包含参数值 */ function setGateURL($gateUrl) { $this->gateUrl = $gateUrl; } /** * 获取密钥 */ function getKey() { return $this->key; } /** * 设置密钥 */ function setKey($key) { $this->key = $key; } /** * 获取参数值 */ function getParameter($parameter) { return isset($this->parameters[$parameter]) ? $this->parameters[$parameter] : ''; } /** * 设置参数值 */ function setParameter($parameter, $parameterValue) { $this->parameters[$parameter] = $parameterValue; } /** * 一次性设置参数 */ function setReqParams($post, $filterField = null) { if ($filterField !== null) { forEach ($filterField as $k => $v) { unset($post[$v]); } } // 判断是否存在空值,空值不提交 forEach ($post as $k => $v) { if (empty($v)) { unset($post[$k]); } } $this->parameters = $post; } /** * 获取所有请求的参数 * * @return array */ function getAllParameters() { return $this->parameters; } /** * 获取带参数的请求URL */ function getRequestURL() { $this->createSign(); $reqPar = ""; ksort($this->parameters); foreach ($this->parameters as $k => $v) { $reqPar .= $k."=".urlencode($v)."&"; } // 去掉最后一个& $reqPar = substr($reqPar, 0, strlen($reqPar) - 1); $requestURL = $this->getGateURL()."?".$reqPar; return $requestURL; } /** * 获取debug信息 */ function getDebugInfo() { return $this->debugInfo; } /** * 创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。 */ function createSign() { $signPars = ""; ksort($this->parameters); foreach ($this->parameters as $k => $v) { if ("" != $v && "sign" != $k) { $signPars .= $k."=".$v."&"; } } $signPars .= "key=".$this->getKey(); $sign = strtoupper(md5($signPars)); $this->setParameter("sign", $sign); // debug信息 $this->_setDebugInfo($signPars." => sign:".$sign); } /** * 设置debug信息 */ function _setDebugInfo($debugInfo) { $this->debugInfo = $debugInfo; } } ?>