/** * 支付签名(paySign)生成方法 * * @param array $para * @throws Exception * @return string */ public function getPaySign(array $para) { // 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后, // 使用URL 键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。 // 这里需要注意的是所有参数名均为小写字符,例如appId 在排序后字符串则为appid; // 将所有key改为小写字符 $paraFilter = array(); foreach ($para as $key => $value) { $paraFilter[strtolower($key)] = $value; } // 除去数组中的空值和签名参数 $paraFilter = Helpers::paraFilter($paraFilter); // 增加或修改appkey $paraFilter['appkey'] = $this->getPaySignKey(); // 对数组排序 $paraFilter = Helpers::argSort($paraFilter); $string1 = Helpers::createLinkstring($paraFilter); // 对string1 作签名算法,字段名和字段值都采用原始值(此时package 的value 就对应了 // 使用2.6 中描述的方式生成的package),不进行URL 转义。 // 具体签名算法为paySign =SHA1(string1)。 $paySign = sha1($string1); return $paySign; }
/** * Sign签名生成方法 * * @param array $para * @throws Exception * @return string */ public function getSign(array $para) { /** * a.除sign 字段外,对所有传入参数按照字段名的ASCII 码从小到大排序(字典序)后, * 使用URL 键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1, * 注意: 值为空的参数不参与签名 ; */ // 过滤不参与签名的参数 $paraFilter = Helpers::paraFilter($para); // 对数组进行(字典序)排序 $paraFilter = Helpers::argSort($paraFilter); // 进行URL键值对的格式拼接成字符串string1 $string1 = Helpers::createLinkstring($paraFilter); /** * b. * 在string1 最后拼接上key=Key(商户支付密钥 ) 得到stringSignTemp 字符串, * 并对stringSignTemp 进行md5 运算,再将得到的字符串所有字符转换为大写,得到sign 值signValue。 */ $sign = $string1 . '&key=' . $this->getKey(); $sign = strtoupper(md5($sign)); return $sign; }
/** * 签名(Sign)生成方法 * * @param array $para * @throws Exception * @return string */ public function getSign(array $para) { // a.除sign 字段外,对所有传入参数按照字段名的ASCII 码从小到大排序(字典序)后, // 使用URL 键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1; // 除去数组中的空值和签名参数 $paraFilter = Helpers::paraFilter($para); // 对数组排序 $paraFilter = Helpers::argSort($paraFilter); $string1 = Helpers::createLinkstring($paraFilter); // b. 在string1 最后拼接上key=paternerKey 得到stringSignTemp 字符串, // 并对stringSignTemp 进行md5 运算,再将得到的字符串所有字符转换为大写,得到sign 值signValue。 $sign = $string1 . '&key=' . $this->getPartnerKey(); $sign = strtoupper(md5($sign)); return $sign; }