| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- <?php
- namespace addons\YunfastPay\common\utils;
- /**
- * 银典支付
- * @package addons\YunfastPay\common\utils
- */
- class KFRequestUtil
- {
- /**
- * 秘钥类型域,机构秘钥:ORG、商户秘钥:MCHT、终端秘钥:TERM
- *
- * @var string
- */
- protected $typeField = 'ORG';
- /**
- * secretKey是3des加密秘钥,测试时请替换成自己的测试秘钥,
- * 生产需要换生产秘钥,如果没有请联系广东快付的技术获取。
- * 这里可以使用机构秘钥或者商户秘钥。使用机构秘钥加密类型ORG,
- * 使用商户秘钥加密类型MCHT
- *
- * @var string
- */
- protected $secretKey;
- /**
- * orgCd是机构号,测试时请替换成自己的测试机构号,
- * 生产需要换生产机构号,如果没有请联系广东快付的技术获取。
- *
- * @var string
- */
- protected $orgCd;
- /**
- * 测试请求地址
- *
- * @var string
- */
- protected $testReqUrl = 'http://test.api.route.hangmuxitong.com';
- /**
- * 生产请求地址
- *
- * @var string
- */
- protected $reqUrl = 'https://api.yunfastpay.com';
- /**
- * @var boolean
- */
- protected $debug = true;
-
- /**
- * 初始化
- *
- * @param string $orgCd
- * @param string $secretKey
- * @param string $typeField
- * @param boolean $debug
- */
- public function __construct(
- string $orgCd,
- string $secretKey,
- string $typeField = 'ORG',
- bool $debug = false
- )
- {
- $this->orgCd = $orgCd;
- $this->secretKey = $secretKey;
- $this->typeField = $typeField;
- $this->debug = $debug;
- }
- private function getRequestUrl()
- {
- return $this->reqUrl;
- return $this->debug
- ? $this->testReqUrl
- : $this->reqUrl;
- }
- /**
- * 发送请求
- *
- * @param array $reqData
- * @return string
- */
- public function req($reqData)
- {
- if ($this->debug) {
- echo '=====>请求路径:' . $this->getRequestUrl(). '<br/>';
- echo '=====>请求参数:' . json_encode($reqData, JSON_UNESCAPED_UNICODE). '<br/>';
- }
- $encReqData = Des3Utils::encrypt(json_encode($reqData), $this->secretKey);
-
- $data['typeField'] = $this->typeField;
- $data['keyField'] = $this->orgCd;
- $data['dataField'] = $encReqData;
- if ($this->debug) {
- echo '=====>请求报文:' . json_encode($data). '<br/>';
- }
- $encRespStr = $this->send_request($this->getRequestUrl(), json_encode($data));
- if ($this->debug) {
- echo '=====>返回报文:' . $encRespStr . '<br/>';
- }
- $respMsg = json_decode($encRespStr, true);
- $respStr = Des3Utils::decrypt($respMsg['dataField'], $this->secretKey);
- if ($this->debug) {
- echo '=====>返回数据:' . $respStr . '<br/>';
- }
- return $respStr;
- }
- /**
- * CURL发送Request请求,含POST和REQUEST
- * @param string $url 请求的链接
- * @param mixed $params 传递的参数
- * @param string $method 请求的方法
- * @param mixed $options CURL的参数
- * @return array|string
- */
- private function send_request($url, $params = [], $method = 'POST', $options = [])
- {
- $method = strtoupper($method);
- $protocol = substr($url, 0, 5);
- $query_string = is_array($params) ? http_build_query($params) : $params;
-
- $ch = curl_init();
- $defaults = [];
- if ('GET' == $method) {
- $geturl = $query_string ? $url . (stripos($url, '?') !== false ? '&' : '?') . $query_string : $url;
- $defaults[CURLOPT_URL] = $geturl;
- } else {
- $defaults[CURLOPT_URL] = $url;
- if ($method == 'POST') {
- $defaults[CURLOPT_POST] = 1;
- } else {
- $defaults[CURLOPT_CUSTOMREQUEST] = $method;
- }
- $defaults[CURLOPT_POSTFIELDS] = $query_string;
- }
-
- $defaults[CURLOPT_HEADER] = false;
- $defaults[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.98 Safari/537.36';
- $defaults[CURLOPT_FOLLOWLOCATION] = true;
- $defaults[CURLOPT_RETURNTRANSFER] = true;
- $defaults[CURLOPT_CONNECTTIMEOUT] = 30;
- $defaults[CURLOPT_TIMEOUT] = 30;
-
- // disable 100-continue
- curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:', 'Content-Type:application/json'));
-
- if ('https' == $protocol) {
- $defaults[CURLOPT_SSL_VERIFYPEER] = false;
- $defaults[CURLOPT_SSL_VERIFYHOST] = false;
- }
-
- curl_setopt_array($ch, (array) $options + $defaults);
-
- $ret = curl_exec($ch);
- $err = curl_error($ch);
-
- if (false === $ret || !empty($err)) {
- $errno = curl_errno($ch);
- $info = curl_getinfo($ch);
- curl_close($ch);
- return [
- 'ret' => false,
- 'errno' => $errno,
- 'msg' => $err,
- 'info' => $info,
- ];
- }
- curl_close($ch);
- return $ret;
- }
- }
|