diff --git a/WeChat/Pay.php b/WeChat/Pay.php index ea2aeb5..f5c4ab9 100644 --- a/WeChat/Pay.php +++ b/WeChat/Pay.php @@ -196,7 +196,7 @@ class Pay public function createTransfers(array $options) { $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'; - return $this->callPostApi($url, $options, true, false); + return $this->callPostApi($url, $options, true, 'MD5', false); } /** @@ -208,7 +208,7 @@ class Pay public function queryTransfers($partner_trade_no) { $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/gettransferinfo'; - return $this->callPostApi($url, ['partner_trade_no' => $partner_trade_no], true, false); + return $this->callPostApi($url, ['partner_trade_no' => $partner_trade_no], true, 'MD5', false); } /** @@ -230,9 +230,10 @@ class Pay /** * 生成支付签名 * @param array $data + * @param string $signType * @return string */ - public function getPaySign(array $data) + public function getPaySign(array $data, $signType = 'MD5') { unset($data['sign']); ksort($data); @@ -240,6 +241,9 @@ class Pay foreach ($data as $k => $v) { $str .= "{$k}={$v}&"; } + if ($signType === 'MD5') { + return strtoupper(md5("{$str}key={$key}")); + } return strtoupper(hash_hmac('SHA256', "{$str}key={$key}", $key)); } @@ -248,11 +252,12 @@ class Pay * @param string $url 请求 * @param array $data 接口参数 * @param bool $isCert 是否需要使用双向证书 + * @param string $signType 数据签名类型 MD5|SHA256 * @param bool $needSignType 是否需要传签名类型参数 * @return array * @throws InvalidResponseException */ - public function callPostApi($url, array $data, $isCert = false, $needSignType = true) + public function callPostApi($url, array $data, $isCert = false, $signType = 'HMAC-SHA256', $needSignType = true) { $option = []; if ($isCert) { @@ -266,9 +271,9 @@ class Pay } $params = $this->params->merge($data); if ($needSignType) { - $params['sign_type'] = 'HMAC-SHA256'; + $params['sign_type'] = strtoupper($signType); } - $params['sign'] = $this->getPaySign($params); + $params['sign'] = $this->getPaySign($params, $signType); $result = Tools::xml2arr(Tools::post($url, Tools::arr2xml($params), $option)); if ($result['return_code'] !== 'SUCCESS') { throw new InvalidResponseException($result['return_msg'], '0');