Commit 667d8aad by wangyu

feat: 调整签名逻辑

1 parent 9fc1c285
......@@ -58,7 +58,7 @@ class Transfer
public static function run($channel, $config, $metadata)
{
if (!in_array($channel, self::$supportChannel)) {
throw new PayException('sdk当前不支持该退款渠道,当前仅支持:' . implode(',', self::$supportChannel));
throw new PayException('sdk当前不支持该转账渠道,当前仅支持:' . implode(',', self::$supportChannel));
}
try {
......
......@@ -104,9 +104,10 @@ abstract class BaseData
/**
* 设置签名
*
* @param bool $urlDecode
* @throws \Exception
*/
public function setSign()
public function setSign(bool $urlDecode = true)
{
$this->buildData();
if ($this->channel === Config::CMB_PAY) {
......@@ -144,7 +145,7 @@ abstract class BaseData
default:
$values = ArrayUtil::removeKeys($data, ['sign']);
$values = ArrayUtil::arraySort($values);
$signStr = ArrayUtil::createLinkstring($values);
$signStr = ArrayUtil::createLinkstring($values, $urlDecode);
$this->retData['sign'] = $this->makeSign($signStr);
}
}
......
......@@ -31,8 +31,7 @@ class PayBankData extends WxBaseData
protected function buildData()
{
$this->retData = [
// 'mch_appid' => $this->appId,
'mchid' => $this->mchId,
'mch_id' => $this->mchId,
'partner_trade_no' => $this->trans_no,
'nonce_str' => $this->nonceStr,
'enc_bank_no' => $this->payer_bank_no,
......
......@@ -26,7 +26,7 @@ use Payment\Common\PayException;
* @property string $tradeType 支付类型
* @property string $terminal_id 终端设备号(门店号或收银设备ID),默认请传"WEB"
*
* @package Payment\Common\Weixin\Dataa
* @package Payment\Common\Weixin\Data
*/
abstract class WxBaseData extends BaseData
{
......
......@@ -2,11 +2,13 @@
namespace Payment\Trans;
use Payment\Common\PayException;
use Payment\Common\Weixin\Data\PayBankData;
use Payment\Common\Weixin\WxBaseStrategy;
use Payment\Common\WxConfig;
use Payment\Config;
use Payment\Utils\Curl;
use Payment\Utils\DataParser;
/**
* 微信企业付款到银行卡接口
......@@ -118,4 +120,34 @@ class WxPayBank extends WxBaseStrategy
{
return true;
}
/**
* @param array $data
*
* @return array|string
* @throws PayException
*/
public function handle(array $data)
{
$buildClass = $this->getBuildDataClass();
try {
$this->reqData = new $buildClass($this->config, $data);
} catch (PayException $e) {
throw $e;
}
//企业付款到银行卡参数不能进行urldecode
$this->reqData->setSign(true);
$xml = DataParser::toXml($this->reqData->getData());
$ret = $this->sendReq($xml);
// 检查返回的数据是否被篡改
$flag = $this->verifySign($ret);
if (!$flag) throw new PayException('微信返回数据被篡改。请检查网络是否安全!');
return $this->retData($ret);
}
}
......@@ -85,12 +85,13 @@ class ArrayUtil
/**
* 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
* @param array $para 需要拼接的数组
* @param bool $urlDecode
* @return string
* @throws \Exception
*/
public static function createLinkstring($para)
public static function createLinkstring($para, bool $urlDecode = true)
{
if (! is_array($para)) {
if (!is_array($para)) {
throw new \Exception('必须传入数组参数');
}
......@@ -101,7 +102,7 @@ class ArrayUtil
continue;
}
$arg .= $key . '=' . urldecode($val) . '&';
$arg .= $key . '=' . (true === $urlDecode ? urldecode($val) : $val) . '&';
}
//去掉最后一个&字符
$arg && $arg = substr($arg, 0, -1);
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!